EOS 2  1.1.0
Einfache Objektbasierte Sprache
ObjectChart.java
gehe zur Dokumentation dieser Datei
1 package de.lathanda.eos.gui.objectchart;
2 
3 import java.awt.BorderLayout;
4 import java.awt.Font;
5 import java.awt.image.BufferedImage;
6 import java.util.ArrayList;
7 import java.util.LinkedList;
8 import java.util.TreeSet;
9 
10 import javax.swing.BorderFactory;
11 import javax.swing.DefaultListModel;
12 import javax.swing.JList;
13 import javax.swing.JScrollPane;
14 import javax.swing.ListSelectionModel;
15 import javax.swing.SwingUtilities;
16 import javax.swing.border.BevelBorder;
17 import javax.swing.event.ListSelectionEvent;
18 import javax.swing.event.ListSelectionListener;
19 
20 import de.lathanda.eos.base.util.GuiToolkit;
21 import de.lathanda.eos.baseparser.AbstractProgram;
22 import de.lathanda.eos.baseparser.CompilerListener;
23 import de.lathanda.eos.common.gui.BackgroundCompiler;
24 import de.lathanda.eos.common.gui.Messages;
25 import de.lathanda.eos.config.Language;
26 import de.lathanda.eos.gui.diagram.Diagram;
27 import de.lathanda.eos.vm.AbstractMachine;
28 import de.lathanda.eos.vm.DebugInfo;
29 import de.lathanda.eos.vm.DebugListener;
30 import de.lathanda.eos.vm.ErrorInformation;
31 import de.lathanda.eos.vm.MemoryEntry;
32 import de.lathanda.eos.vm.ReservedVariables;
33 
39 public class ObjectChart extends Diagram implements CompilerListener, DebugListener, ListSelectionListener {
40  private static final long serialVersionUID = -2959905171654651632L;
41  private AbstractMachine machine;
42  private AbstractProgram program;
43  private JList<String> memoryList;
44  private ObjectDiagram objectDiagram;
45  private DefaultListModel<String> memoryModel;
46  private LinkedList<MemoryEntry> memory;
47  private ArrayList<MemoryEntry> variableList = new ArrayList<>();
48 
49  public ObjectChart() {
50  super(Messages.getString("ObjectChart.Title"));
51  memoryModel = new DefaultListModel<String>();
52  memoryList = new JList<>(memoryModel);
53  memoryList.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
54  memoryList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
55  memoryList.setFont(GuiToolkit.createFont(Font.SANS_SERIF, Font.PLAIN, 10));
56  objectDiagram = new ObjectDiagram();
57  setLayout(new BorderLayout());
58  add(new JScrollPane(memoryList), BorderLayout.WEST);
59  add(new JScrollPane(objectDiagram), BorderLayout.CENTER);
60  memoryList.addListSelectionListener(this);
61  }
62 
63  @Override
64  public BufferedImage export(float dpi) {
65  return objectDiagram.export(dpi);
66  }
67 
68  @Override
69  public void init(BackgroundCompiler bc) {
70  bc.addCompilerListener(this);
71  }
72 
73  @Override
74  public void deinit(BackgroundCompiler bc) {
75  bc.removeCompilerListener(this);
76  }
77 
78  @Override
79  public void compileComplete(LinkedList<ErrorInformation> errors, AbstractProgram program) {
80  this.machine = program.getMachine();
81  machine.addDebugListener(this);
82  update();
83  }
84 
85  @Override
86  public void debugPointReached(DebugInfo debugInfo) {
87  update();
88  }
89 
90  private void update() {
91  memory = machine.getMemory();
92  SwingUtilities.invokeLater(() -> doUpdate());
93  }
94 
95  private void doUpdate() {
96  TreeSet<MemoryEntry> selectedValues = new TreeSet<>();
97  int[] indices = memoryList.getSelectedIndices();
98  for (int index : indices) {
99  selectedValues.add(variableList.get(index));
100  }
101  memoryModel.clear();
102  variableList.clear();
103  for (MemoryEntry mem : memory) {
104  if (mem.name.equals(ReservedVariables.RESULT)) {
105  memoryModel.addElement(Language.def.getLabel(ReservedVariables.RESULT));
106  } else if (mem.name.equals(ReservedVariables.WINDOW)) {
107  memoryModel.addElement(Language.def.getLabel(ReservedVariables.WINDOW));
108  } else if (mem.name.startsWith(ReservedVariables.REPEAT_TIMES_INDEX)) {
109  memoryModel.addElement(Language.def.getLabel(ReservedVariables.REPEAT_TIMES_INDEX));
110  } else {
111  memoryModel.addElement(mem.name);
112  }
113  variableList.add(mem);
114  if (selectedValues.contains(mem)) {
115  memoryList.addSelectionInterval(memoryModel.size() - 1, memoryModel.size() - 1);
116  }
117  }
118  revalidate();
119  }
120 
121  @Override
122  public void valueChanged(ListSelectionEvent lse) {
123  LinkedList<MemoryEntry> data = new LinkedList<>();
124  int[] indices = memoryList.getSelectedIndices();
125  for (int index : indices) {
126  data.add(variableList.get(index));
127  }
128  objectDiagram.setData(data, program);
129  repaint();
130  }
131 }
static Font createFont(String name, int style, int size)
Definition: GuiToolkit.java:89
static String getString(String id)
Definition: Messages.java:29
String getLabel(String id)
Definition: Language.java:76
void debugPointReached(DebugInfo debugInfo)
void deinit(BackgroundCompiler bc)
void valueChanged(ListSelectionEvent lse)
void compileComplete(LinkedList< ErrorInformation > errors, AbstractProgram program)
void setData(LinkedList< MemoryEntry > data, AbstractProgram program)
LinkedList< MemoryEntry > getMemory()
void addDebugListener(DebugListener debugListener)
Impressum