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