EOS 2  1.1.0
Einfache Objektbasierte Sprache
Alternative.java
gehe zur Dokumentation dieser Datei
1 package de.lathanda.eos.gui.flowchart;
2 
3 import de.lathanda.eos.baseparser.AlternativeUnit;
4 import de.lathanda.eos.gui.diagram.Drawing;
5 import de.lathanda.eos.gui.text.Text;
6 
13 public class Alternative extends ConnectedUnit {
14  private final Sequence A; // true
15  private final Sequence B; // false
16  private final Diamond diam;
17  private final String yes = Text.LABEL.getString("Yes");
18  private final String no = Text.LABEL.getString("No");
19  private float yesx;
20  private float yesy;
21  private float nox;
22  private float noy;
23 
24  private float ABbeginY;
25  private float AendY;
26  private float BendY;
27  private float AcenterX;
28  private float BcenterX;
29 
31  A = new Sequence(au.getThen());
32  B = new Sequence(au.getElse());
33  diam = new Diamond(au.getLabel());
35  }
36 
37  @Override
38  public void layoutUnit(Drawing d) {
39  A.layout(d);
40  B.layout(d);
41  diam.layout(d);
42 
43  float sideWidth = Math.max(A.getWidth(), B.getWidth());
44  width = Math.max(sideWidth * 2 + SPACEX, diam.getWidth() + sideWidth);
45 
46  diam.centerX(width);
47 
48  ABbeginY = diam.getHeight() + SPACE;
49  A.centerX(sideWidth);
50  B.setOffsetX(width - (sideWidth - B.getWidth()) / 2 - B.getWidth());
51  AcenterX = A.getOffsetX() + A.getWidth() / 2;
52  BcenterX = B.getOffsetX() + B.getWidth() / 2;
53  A.setOffsetY(ABbeginY);
54  B.setOffsetY(ABbeginY);
55  AendY = A.getHeight() + ABbeginY;
56  BendY = B.getHeight() + ABbeginY;
57 
58  yesx = diam.getX(0) - d.stringWidth(yes) - BORDER;
59  yesy = diam.getY(0) - BORDER;
60  nox = diam.getX(2) + BORDER;
61  noy = diam.getY(2) - BORDER;
62  height = diam.getHeight() + SPACE + Math.max(A.getHeight(), B.getHeight()) + SPACE;
63  }
64 
65  @Override
66  public void drawUnit(Drawing d) {
67  // condition diamond
68  diam.draw(d);
69 
70  // left side arrow
71  d.drawString(yes, yesx, yesy);
72  d.drawLine(diam.getX(0), diam.getY(0), AcenterX, diam.getY(0));
73  d.drawArrow(AcenterX, diam.getY(0), AcenterX, ABbeginY, 2);
74 
75  // right side arrow
76  d.drawString(no, nox, noy);
77  d.drawLine(diam.getX(2), diam.getY(2), BcenterX, diam.getY(2));
78  d.drawArrow(BcenterX, diam.getY(2), BcenterX, ABbeginY, 2);
79 
80  // left and right side
81  A.draw(d);
82  B.draw(d);
83 
84  // rejoin line (arrow is added by surrounding structure)
85  d.drawLine(AcenterX, AendY, AcenterX, height);
86  d.drawLine(BcenterX, BendY, BcenterX, height);
87  d.drawLine(AcenterX, height, BcenterX, height);
88  }
89 }
float stringWidth(String text)
Definition: Drawing.java:111
void drawLine(float x1, float y1, float x2, float y2)
Definition: Drawing.java:138
void drawArrow(float x1, float y1, float x2, float y2, float size)
Definition: Drawing.java:284
void drawString(String text, float x, float y)
Definition: Drawing.java:148
static final float SPACEX
Definition: Unit.java:15
final void layout(Drawing d)
Definition: Unit.java:50
final void draw(Drawing d)
Definition: Unit.java:29
static final float SPACE
Definition: Unit.java:14
void setOffsetY(float offsetY)
Definition: Unit.java:79
void setOffsetX(float offsetX)
Definition: Unit.java:63
void centerX(float width)
Definition: Unit.java:95
static final float BORDER
Definition: Unit.java:13
ResourceBundle LABEL
Definition: Text.java:8
Impressum