EOS 2  1.1.0
Einfache Objektbasierte Sprache
LoopTimes.java
gehe zur Dokumentation dieser Datei
1 package de.lathanda.eos.gui.flowchart;
2 
3 import de.lathanda.eos.baseparser.LoopTimesUnit;
4 import de.lathanda.eos.gui.diagram.Drawing;
5 import de.lathanda.eos.gui.text.Text;
6 
7 import java.text.MessageFormat;
8 
15 public class LoopTimes extends ConnectedUnit {
16  private final Sequence sequence;
17  private final Statement init;
18  private final Statement inc;
19  private final Diamond diam;
20  private final String yes = Text.LABEL.getString("Yes");
21  private final String no = Text.LABEL.getString("No");
22  private final String var;
23  private final String step;
24 
25  private float yesx;
26  private float yesy;
27  private float nox;
28  private float noy;
29 
30  private float center;
31 
33  sequence = new Sequence(n.getSequence());
34  var = MessageFormat.format(Text.LABEL.getString("RepeatTimes.Var"), n.getIndexId(), n.getTimes().getLabel());
35  diam = new Diamond(MessageFormat.format(Text.LABEL.getString("RepeatTimes.Cond"), n.getIndexId()));
36  step = MessageFormat.format(Text.LABEL.getString("RepeatTimes.Step"), n.getIndexId());
37  init = new Statement(var);
38  inc = new Statement(step);
40  }
41 
42  @Override
43  public void layoutUnit(Drawing d) {
44  sequence.layout(d);
45  init.layout(d);
46  inc.layout(d);
47  diam.layout(d);
48 
49  width = (float) Math.max(Math.max(sequence.getWidth(), diam.getWidth()),
50  Math.max(inc.getWidth(), init.getWidth())) + 2 * SPACEX;
51  center = (width / 2);
52 
53  // place counting variable initialization
54  init.setOffsetX((width - init.getWidth()) / 2);
55 
56  // build diamond
57  float h = init.getHeight() + SPACE;
58  diam.setOffsetY(h);
59  diam.centerX(width);
60 
61  yesx = diam.getX(3) + 1.5f * BORDER;
62  yesy = diam.getY(3) + d.getAscent() - BORDER;
63  nox = diam.getX(0) - d.stringWidth(no) - BORDER;
64  noy = diam.getY(0) - BORDER;
65 
66  // place loop body
67  h = diam.getBottom() + SPACE;
68  sequence.setOffsetX((width - sequence.getWidth()) / 2);
69  sequence.setOffsetY(h);
70 
71  // place increment
72  h = h + sequence.getHeight() + SPACE;
73  inc.setOffsetX((width - inc.getWidth()) / 2);
74  inc.setOffsetY(h);
75 
76  height = h + inc.getHeight() + SPACE + SPACE;
77  }
78 
79  @Override
80  public void drawUnit(Drawing d) {
81  // draw init
82  init.draw(d);
83 
84  // arrow init -> diamond
85  d.drawArrow(diam.getX(1), diam.getY(1) - SPACE, diam.getX(1), diam.getY(1), 2);
86 
87  // condition diamond
88  diam.draw(d);
89 
90  // true arrow
91  d.drawString(yes, yesx, yesy);
92  d.drawArrow(diam.getX(3), diam.getY(3), diam.getX(3), diam.getY(3) + SPACE, 2);
93 
94  // draw loop body
95  sequence.draw(d);
96 
97  // false skip line
98  d.drawString(no, nox, noy);
99  d.drawLine(diam.getX(0), diam.getY(0), 0, diam.getY(0));
100  d.drawLine(0, diam.getY(0), 0, height);
101  d.drawLine(0, height, width / 2, height);
102 
103  // draw squence -> inc arrow
104  float y = inc.getOffsetY();
105  d.drawArrow(center, y - SPACE, center, y, 3);
106 
107  // draw inc
108  inc.draw(d);
109 
110  // jump start arrow
111  y = inc.getOffsetY() + inc.getHeight();
112  d.drawLine(center, y, center, y + SPACE);
113  d.drawLine(center, y + SPACE, width, y + SPACE);
114  d.drawLine(width, y + SPACE, width, diam.getY(2));
115  d.drawArrow(width, diam.getY(2), diam.getX(2), diam.getY(2), 2);
116 
117  }
118 }
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