EOS 2  1.1.0
Einfache Objektbasierte Sprache
ObjectCard.java
gehe zur Dokumentation dieser Datei
1 package de.lathanda.eos.gui.objectchart;
2 
3 import java.awt.font.TextAttribute;
4 import java.util.Hashtable;
5 import java.util.LinkedList;
6 import java.util.Map;
7 
8 import de.lathanda.eos.baseparser.PropertyViewer;
9 import de.lathanda.eos.baseparser.Type;
10 import de.lathanda.eos.gui.diagram.Unit;
11 import de.lathanda.eos.gui.diagram.Drawing;
12 import de.lathanda.eos.gui.diagram.TextUnit;
13 
19 public class ObjectCard extends Unit {
20  private TextUnit header;
21  private LinkedList<Property> properties;
22  private float yLine;
23 
24  public ObjectCard(String name, String label, Object target, Type type) {
25  Map<TextAttribute, Object> map = new Hashtable<>();
26  map.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
27  header = new TextUnit(name + ":" +label);
28  header.setFont(HEADER_FONT.deriveFont(map));
29  properties = new LinkedList<>();
30  LinkedList<PropertyViewer> attr = type.getPropertyViewers(target);
31  for (PropertyViewer a : attr) {
32  properties.add(new Property(a.name, a.getValue()));
33  }
34  }
35 
36  @Override
37  public void drawUnit(Drawing d) {
38  d.drawRoundRect(0, 0, width, height, 5);
39  d.drawLine(0, yLine, width, yLine);
40  header.draw(d);
41  for (Unit property : properties) {
42  property.draw(d);
43  }
44  }
45 
46  @Override
47  public void layoutUnit(Drawing d) {
48  header.layout(d);
49  for (Unit property : properties) {
50  property.layout(d);
51  }
52  header.setOffsetY(INDENT);
53  header.setOffsetX(0);
54  yLine = header.getHeight() + 2 * INDENT;
55  if (properties.isEmpty()) {
56  width = header.getWidth() + 2 * INDENT;
57  height = yLine;
58  } else {
59  float alignedWidth = Property.align(d, properties);
60  width = Math.max(header.getWidth(), alignedWidth) + 2 * INDENT;
61  float y = yLine + INDENT;
62  for (Unit property : properties) {
63  property.setOffsetX(INDENT);
64  property.setOffsetY(y);
65  y += property.getHeight() + INDENT;
66  }
67  height = y;
68  }
69  header.setWidth(width);
70  header.alignCentralX();
71  }
72 }
abstract LinkedList< PropertyViewer > getPropertyViewers(Object target)
void drawLine(float x1, float y1, float x2, float y2)
Definition: Drawing.java:138
void drawRoundRect(float x, float y, float width, float height, float radius)
Definition: Drawing.java:223
void setFont(Font font)
Definition: Unit.java:46
final void layout(Drawing d)
Definition: Unit.java:50
final void draw(Drawing d)
Definition: Unit.java:29
void setWidth(float width)
Definition: Unit.java:59
static final float INDENT
Definition: Unit.java:12
void setOffsetY(float offsetY)
Definition: Unit.java:79
void setOffsetX(float offsetX)
Definition: Unit.java:63
ObjectCard(String name, String label, Object target, Type type)
Definition: ObjectCard.java:24
static float align(Drawing d, Iterable< Property > properties)
Definition: Property.java:44
Impressum