EOS 2  1.1.0
Einfache Objektbasierte Sprache
FlowChart.java
gehe zur Dokumentation dieser Datei
1 package de.lathanda.eos.gui.flowchart;
2 
3 import de.lathanda.eos.baseparser.AbstractProgram;
4 import de.lathanda.eos.baseparser.CompilerListener;
5 import de.lathanda.eos.baseparser.ProgramUnit;
6 import de.lathanda.eos.common.gui.BackgroundCompiler;
7 import de.lathanda.eos.common.gui.Messages;
8 import de.lathanda.eos.gui.diagram.Diagram;
9 import de.lathanda.eos.gui.diagram.Drawing;
10 import de.lathanda.eos.gui.text.Text;
11 import de.lathanda.eos.vm.ErrorInformation;
12 
13 import java.awt.Color;
14 import java.awt.Dimension;
15 import java.awt.Graphics;
16 import java.awt.Graphics2D;
17 import java.awt.image.BufferedImage;
18 import java.util.LinkedList;
19 
26 public class FlowChart extends Diagram implements CompilerListener {
27  private static final long serialVersionUID = 401580908976907379L;
28  private final Drawing d;
29  private final LinkedList<Procedure> procedures;
30  private static final float SPACE = 10;
31 
32  public FlowChart() {
33  super(Messages.getString("FlowChart.Title"));
34  procedures = 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  @Override
45  public void init(BackgroundCompiler bc) {
46  bc.addCompilerListener(this);
47  }
48 
49  @Override
50  public void deinit(BackgroundCompiler bc) {
51  bc.addCompilerListener(this);
52  }
53 
54  @Override
55  public void compileComplete(LinkedList<ErrorInformation> errors, AbstractProgram program) {
56  procedures.clear();
57  // create units
58  procedures.add(new Procedure(Text.LABEL.getString("Main"), program.getProgram()));
59  for (ProgramUnit pu : program.getSubPrograms()) {
60  procedures.add(new Procedure(pu.getName(), pu.getSequence()));
61  }
62 
63  this.setPreferredSize(layout(d));
64  revalidate();
65  repaint();
66  }
67 
68  @Override
69  public BufferedImage export(float dpi) {
70  Drawing drawing = new Drawing(dpi);
71  Dimension dim = layout(drawing);
72  BufferedImage image = new BufferedImage(dim.width, dim.height, BufferedImage.TYPE_INT_RGB);
73  Graphics2D g = image.createGraphics();
74  g.setBackground(Color.WHITE);
75  g.clearRect(0, 0, dim.width, dim.height);
76  drawing.init(g);
77  render(drawing);
78  layout(d);
79  return image;
80  }
81 
82  private Dimension layout(Drawing d) {
83  procedures.forEach(p -> p.layout(d));
84  float h = 0;
85  float w = 0;
86  for (ConnectedUnit u : procedures) {
87  u.setOffsetY(h);
88  h = h + u.getHeight() + SPACE;
89  if (w < u.getWidth()) {
90  w = u.getWidth();
91  }
92  }
93  return new Dimension(d.convertmm2pixel(w + SPACE * 2), d.convertmm2pixel(h + SPACE * 2));
94  }
95 
96  private void render(Drawing d) {
97  d.pushTransform();
98  d.translate(SPACE, SPACE);
99  d.setDrawWidth(0.5f);
100  procedures.stream().forEachOrdered(p -> p.draw(d));
101  d.popTransform();
102  }
103 
104  public void render(Graphics2D g) {
105  d.init(g);
106  render(d);
107  }
108 }
static String getString(String id)
Definition: Messages.java:29
void deinit(BackgroundCompiler bc)
Definition: FlowChart.java:50
void init(BackgroundCompiler bc)
Definition: FlowChart.java:45
BufferedImage export(float dpi)
Definition: FlowChart.java:69
void compileComplete(LinkedList< ErrorInformation > errors, AbstractProgram program)
Definition: FlowChart.java:55
LinkedList< ProgramUnit > getSubPrograms()
ResourceBundle LABEL
Definition: Text.java:8
Impressum