EOS 2  1.1.0
Einfache Objektbasierte Sprache
ObjectDiagram.java
gehe zur Dokumentation dieser Datei
1 package de.lathanda.eos.gui.objectchart;
2 
3 import java.awt.Color;
4 import java.awt.Dimension;
5 import java.awt.Graphics;
6 import java.awt.Graphics2D;
7 import java.awt.image.BufferedImage;
8 import java.util.LinkedList;
9 
10 import javax.swing.JPanel;
11 
12 import de.lathanda.eos.gui.diagram.Unit;
13 import de.lathanda.eos.vm.MemoryEntry;
14 import de.lathanda.eos.baseparser.AbstractProgram;
15 import de.lathanda.eos.baseparser.SystemType;
16 import de.lathanda.eos.baseparser.Type;
17 import de.lathanda.eos.config.Language;
18 import de.lathanda.eos.gui.diagram.Drawing;
19 
26 public class ObjectDiagram extends JPanel {
27  private static final long serialVersionUID = -8489967668090334257L;
28  private LinkedList<Unit> units;
29  private final Drawing d;
30  private static final float SPACE = 5;
31  public ObjectDiagram() {
32  super();
33  setBackground(Color.WHITE);
34  units = new LinkedList<>();
35  d = new Drawing();
36  }
37 
38  @Override
39  protected void paintComponent(Graphics g) {
40  super.paintComponent(g);
41  render((Graphics2D) g);
42  }
43 
44  public BufferedImage export(float dpi) {
45  if (units.isEmpty()) {
46  return new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB);
47  }
48  Drawing drawing = new Drawing(dpi);
49  Dimension dim = layout(drawing);
50  BufferedImage image = new BufferedImage(dim.width, dim.height, BufferedImage.TYPE_INT_RGB);
51  Graphics2D g = image.createGraphics();
52  g.setBackground(Color.WHITE);
53  g.clearRect(0, 0, dim.width, dim.height);
54  drawing.init(g);
55  render(drawing);
56  layout(d);
57  return image;
58  }
59 
60  public void render(Graphics2D g) {
61  d.init(g);
62  render(d);
63  }
64 
65  private Dimension layout(Drawing d) {
66  units.forEach(p -> p.layout(d));
67  float h = 0;
68  float w = 0;
69  for (Unit u : units) {
70  u.setOffsetY(h);
71  h = h + u.getHeight() + SPACE;
72  if (w < u.getWidth()) {
73  w = u.getWidth();
74  }
75  }
76  h -= SPACE;
77  return new Dimension(d.convertmm2pixel(w + SPACE * 2), d.convertmm2pixel(h + SPACE * 2));
78  }
79 
80  private void render(Drawing d) {
81  d.pushTransform();
82  d.translate(SPACE, SPACE);
83  d.setDrawWidth(0.5f);
84  d.setColor(Color.BLACK);
85  units.stream().forEachOrdered(p -> p.draw(d));
86  d.popTransform();
87  }
88 
89  public void setData(LinkedList<MemoryEntry> data, AbstractProgram program) {
90  units.clear();
91  for (MemoryEntry v : data) {
92  Type type = SystemType.getInstanceByID(v.type);
93  if (type != null) {
94  units.add(Toolkit.create(v.name, Language.def.getClassLabel(type), v.data, type));
95  } else {
96  type = program.getTypeByName(v.type);
97  units.add(Toolkit.create(v.name, v.type, v.data, type));
98  }
99  }
100  setPreferredSize(layout(d));
101  revalidate();
102  repaint();
103  }
104 
105 }
static SystemType getInstanceByID(String id)
void setData(LinkedList< MemoryEntry > data, AbstractProgram program)
static Unit create(String name, String label, Object data, Type type)
Definition: Toolkit.java:48
Definition: MemoryEntry.java:3
Impressum