1 package de.lathanda.eos.gui.objectchart;
3 import java.awt.BorderLayout;
5 import java.awt.image.BufferedImage;
6 import java.util.ArrayList;
7 import java.util.LinkedList;
8 import java.util.TreeSet;
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;
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;
40 private static final long serialVersionUID = -2959905171654651632L;
43 private JList<String> memoryList;
45 private DefaultListModel<String> memoryModel;
46 private LinkedList<MemoryEntry> memory;
47 private ArrayList<MemoryEntry> variableList =
new ArrayList<>();
51 memoryModel =
new DefaultListModel<String>();
52 memoryList =
new JList<>(memoryModel);
53 memoryList.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
54 memoryList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
57 setLayout(
new BorderLayout());
58 add(
new JScrollPane(memoryList), BorderLayout.WEST);
59 add(
new JScrollPane(objectDiagram), BorderLayout.CENTER);
60 memoryList.addListSelectionListener(
this);
64 public BufferedImage
export(
float dpi) {
65 return objectDiagram.
export(dpi);
90 private void update() {
92 SwingUtilities.invokeLater(() -> doUpdate());
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));
102 variableList.clear();
103 for (MemoryEntry mem : memory) {
104 if (mem.name.equals(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));
111 memoryModel.addElement(mem.name);
113 variableList.add(mem);
114 if (selectedValues.contains(mem)) {
115 memoryList.addSelectionInterval(memoryModel.size() - 1, memoryModel.size() - 1);
123 LinkedList<MemoryEntry> data =
new LinkedList<>();
124 int[] indices = memoryList.getSelectedIndices();
125 for (
int index : indices) {
126 data.add(variableList.get(index));
128 objectDiagram.
setData(data, program);
void removeCompilerListener(CompilerListener cl)
void addCompilerListener(CompilerListener cl)
static String getString(String id)
String getLabel(String id)
void debugPointReached(DebugInfo debugInfo)
void init(BackgroundCompiler bc)
void deinit(BackgroundCompiler bc)
BufferedImage export(float dpi)
void valueChanged(ListSelectionEvent lse)
void compileComplete(LinkedList< ErrorInformation > errors, AbstractProgram program)
BufferedImage export(float dpi)
void setData(LinkedList< MemoryEntry > data, AbstractProgram program)
AbstractMachine getMachine()
LinkedList< MemoryEntry > getMemory()
void addDebugListener(DebugListener debugListener)