|
@@ -26,8 +26,11 @@ import java.io.File;
|
|
|
import java.io.IOException;
|
|
|
import java.net.URI;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Collection;
|
|
|
import java.util.List;
|
|
|
import java.util.ListIterator;
|
|
|
+import java.util.Optional;
|
|
|
+import java.util.logging.Logger;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
import javax.swing.AbstractAction;
|
|
@@ -103,6 +106,7 @@ import holeg.utility.ImageImport;
|
|
|
* @author Gruppe14
|
|
|
*/
|
|
|
public class GUI {
|
|
|
+ private static final Logger log = Logger.getLogger(Model.class.getName());
|
|
|
/**
|
|
|
* Menu on the Top containing File, Edit View Help etc
|
|
|
*/
|
|
@@ -182,7 +186,7 @@ public class GUI {
|
|
|
// In this section is the graph for the selected HolonElement of the clicked
|
|
|
|
|
|
private final Model model;
|
|
|
- private final Control controller;
|
|
|
+ private final Control control;
|
|
|
|
|
|
// In this section are all the Holonelements that correspond to the clicked
|
|
|
// HolonObject with consumption/production, name and amount.
|
|
@@ -252,7 +256,7 @@ public class GUI {
|
|
|
* @param control the Controller
|
|
|
*/
|
|
|
GUI(Control control) {
|
|
|
- this.controller = control;
|
|
|
+ this.control = control;
|
|
|
this.informationPanel = new HolonInformationPanel(control);
|
|
|
this.model = control.getModel();
|
|
|
inspector = new Inspector(control);
|
|
@@ -261,8 +265,8 @@ public class GUI {
|
|
|
this.unitGraph = new UnitGraph(control);
|
|
|
this.canvas = new Canvas(model, control, unitGraph);
|
|
|
initialize();
|
|
|
- updateCategories(model.getCategories());
|
|
|
- control.OnCategoryChanged.addListener(() -> this.updateCategoryUI(model.getCategories()));
|
|
|
+ updateCategories(GuiSettings.getCategories());
|
|
|
+ control.OnCategoryChanged.addListener(() -> this.updateCategoryUI(GuiSettings.getCategories()));
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -272,7 +276,7 @@ public class GUI {
|
|
|
holegJFrame = new JFrame();
|
|
|
holegJFrame.setTitle("HOLEG Simulator");
|
|
|
// try to restore old position/dimensions
|
|
|
- ArrayList<Integer> savedWindowDim = controller.loadSavedWindowDimensionsIfExistent();
|
|
|
+ ArrayList<Integer> savedWindowDim = control.loadSavedWindowDimensionsIfExistent();
|
|
|
if (savedWindowDim.size() == 4) {
|
|
|
holegJFrame.setBounds(savedWindowDim.get(0), savedWindowDim.get(1), savedWindowDim.get(2),
|
|
|
savedWindowDim.get(3));
|
|
@@ -292,14 +296,14 @@ public class GUI {
|
|
|
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
|
|
|
if (JOptionPane.showConfirmDialog(holegJFrame, "Are you sure you want to exit?", "HOLEG",
|
|
|
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
|
|
|
- controller
|
|
|
+ control
|
|
|
.deleteDirectory(new File(System.getProperty("user.home") + "/.config/HolonGUI/Autosave"));
|
|
|
|
|
|
// try to save the position and size of the window, such
|
|
|
// that (if possible)
|
|
|
// it can be opened in the same position the next time
|
|
|
try {
|
|
|
- controller.savePosAndSizeOfWindow(holegJFrame.getX(), holegJFrame.getY(),
|
|
|
+ control.savePosAndSizeOfWindow(holegJFrame.getX(), holegJFrame.getY(),
|
|
|
holegJFrame.getWidth(), holegJFrame.getHeight());
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
@@ -325,10 +329,10 @@ public class GUI {
|
|
|
@Override
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
try {
|
|
|
- controller.loadAutoSave(controller.getUndoSave());
|
|
|
+ control.loadAutoSave(control.getUndoSave());
|
|
|
closeInvalidUpperNodeTabs();
|
|
|
|
|
|
- controller.calculateStateAndVisualForCurrentTimeStep();
|
|
|
+ control.calculateStateAndVisualForCurrentTimeStep();
|
|
|
canvas.repaint();
|
|
|
updateUpperNodes();
|
|
|
} catch (IOException eex) {
|
|
@@ -346,11 +350,11 @@ public class GUI {
|
|
|
@Override
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
try {
|
|
|
- controller.loadAutoSave(controller.getRedoSave());
|
|
|
+ control.loadAutoSave(control.getRedoSave());
|
|
|
|
|
|
closeInvalidUpperNodeTabs();
|
|
|
|
|
|
- controller.calculateStateAndVisualForCurrentTimeStep();
|
|
|
+ control.calculateStateAndVisualForCurrentTimeStep();
|
|
|
canvas.repaint();
|
|
|
updateUpperNodes();
|
|
|
} catch (IOException ex) {
|
|
@@ -368,21 +372,22 @@ public class GUI {
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
chooseTabTemp();
|
|
|
|
|
|
- model.getSelectedObjects().clear();
|
|
|
+ GuiSettings.getSelectedObjects().clear();
|
|
|
|
|
|
// Uppernode Canvas?
|
|
|
JScrollPane scrollPane = getScrollPaneFromTabbedPane();
|
|
|
Component canvasOrUpperNodeCanvas = scrollPane.getViewport().getComponent(0);
|
|
|
|
|
|
if (canvasOrUpperNodeCanvas instanceof GroupNodeCanvas groupNodeCanvas) {
|
|
|
- controller.addSelectedObjects(groupNodeCanvas.getGroupNode().getObjectsInThisLayer().collect(Collectors.toSet()));
|
|
|
+ control.addSelectedObjects(
|
|
|
+ groupNodeCanvas.getGroupNode().getObjectsInThisLayer().collect(Collectors.toSet()));
|
|
|
groupNodeCanvas.repaint();
|
|
|
// or Canvas?
|
|
|
} else if (canvasOrUpperNodeCanvas instanceof Canvas) {
|
|
|
- controller.addSelectedObjects(model.getObjectsOnCanvas());
|
|
|
+ control.addSelectedObjects(model.getObjectsOnCanvas());
|
|
|
canvas.repaint();
|
|
|
}
|
|
|
- controller.getObjectsInDepth();
|
|
|
+ control.getObjectsInDepth();
|
|
|
}
|
|
|
};
|
|
|
actionMap.put(cntrlADown, controlA);
|
|
@@ -406,9 +411,9 @@ public class GUI {
|
|
|
boolean wasProducerDeleted = true;
|
|
|
|
|
|
if (canvasOrUpperNodeCanvas instanceof GroupNodeCanvas groupNodeCanvas) {
|
|
|
- for (AbstractCanvasObject cps : model.getSelectedObjects()) {
|
|
|
+ for (AbstractCanvasObject cps : GuiSettings.getSelectedObjects()) {
|
|
|
if (groupNodeCanvas.getGroupNode().getObjectsInThisLayer().anyMatch(object -> object == cps)) {
|
|
|
- controller.delObjUpperNode(cps, groupNodeCanvas.getGroupNode());
|
|
|
+ control.delObjUpperNode(cps, groupNodeCanvas.getGroupNode());
|
|
|
unc.setToolTip(false);
|
|
|
|
|
|
// remove UpperNodeTab if UpperNode deleted
|
|
@@ -416,34 +421,35 @@ public class GUI {
|
|
|
}
|
|
|
}
|
|
|
groupNodeCanvas.repaint();
|
|
|
- controller.clearSelection();
|
|
|
+ control.clearSelection();
|
|
|
|
|
|
// or Canvas?
|
|
|
} else if (canvasOrUpperNodeCanvas instanceof Canvas canvasPanel) {
|
|
|
// Edge Deleting
|
|
|
- Edge edgeHighlight = model.getSelectedEdge();
|
|
|
- if (edgeHighlight != null) {
|
|
|
- controller.removeEdgesOnCanvas(edgeHighlight);
|
|
|
+ Optional<Edge> edgeHighlight = GuiSettings.getSelectedEdges().stream().findAny();
|
|
|
+ edgeHighlight.ifPresent(edge -> {
|
|
|
+ control.removeEdgesOnCanvas(edge);
|
|
|
+ // TODO(Tom2021-12-20): Convert to Optional
|
|
|
canvasPanel.edgeHighlight = null;
|
|
|
- }
|
|
|
+ });
|
|
|
canvas.setToolTip(false);
|
|
|
- for (AbstractCanvasObject cps : model.getSelectedObjects()) {
|
|
|
- controller.delCanvasObject(cps, false);
|
|
|
+ for (AbstractCanvasObject cps : GuiSettings.getSelectedObjects()) {
|
|
|
+ control.delCanvasObject(cps, false);
|
|
|
// remove UpperNodeTab if UpperNode deleted
|
|
|
removeUpperNodeTab(cps);
|
|
|
}
|
|
|
- controller.clearSelection();
|
|
|
- controller.tryAutoSave();
|
|
|
+ control.clearSelection();
|
|
|
+ control.tryAutoSave();
|
|
|
canvas.repaint();
|
|
|
}
|
|
|
|
|
|
// recalculate net if a producer was deleted
|
|
|
if (wasProducerDeleted) {
|
|
|
- controller.resetSimulation();
|
|
|
- controller.calculateStateAndVisualForCurrentTimeStep();
|
|
|
+ control.resetSimulation();
|
|
|
+ control.calculateStateAndVisualForCurrentTimeStep();
|
|
|
}
|
|
|
|
|
|
- model.getSelectedObjects().clear();
|
|
|
+ GuiSettings.getSelectedObjects().clear();
|
|
|
}
|
|
|
});
|
|
|
|
|
@@ -455,7 +461,7 @@ public class GUI {
|
|
|
|
|
|
@Override
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
- SearchPopUp dialog = new SearchPopUp(controller, canvas, holegJFrame);
|
|
|
+ SearchPopUp dialog = new SearchPopUp(control, canvas, holegJFrame);
|
|
|
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
|
|
|
dialog.setVisible(true);
|
|
|
}
|
|
@@ -471,12 +477,12 @@ public class GUI {
|
|
|
chooseTabTemp();
|
|
|
System.out.println("heiCopy - control C");
|
|
|
JScrollPane scrollPane = getScrollPaneFromTabbedPane();
|
|
|
- if (!model.getSelectedObjects().isEmpty()) {
|
|
|
- if (scrollPane.getViewport().getComponent(0) instanceof GroupNodeCanvas groupNodeCanvas)
|
|
|
- controller.copy(groupNodeCanvas.getGroupNode());
|
|
|
+ if (!GuiSettings.getSelectedObjects().isEmpty()) {
|
|
|
+ if (scrollPane.getViewport().getComponent(0)instanceof GroupNodeCanvas groupNodeCanvas)
|
|
|
+ control.copy(groupNodeCanvas.getGroupNode());
|
|
|
else
|
|
|
- controller.copy(null);
|
|
|
- if (!model.getClipboradObjects().isEmpty()) {
|
|
|
+ control.copy(null);
|
|
|
+ if (!GuiSettings.getClipboardObjects().isEmpty()) {
|
|
|
canvas.itemPaste.setEnabled(true);
|
|
|
}
|
|
|
}
|
|
@@ -505,13 +511,12 @@ public class GUI {
|
|
|
|
|
|
if (tabTemp != null && canvasOrUpperNodeCanvas instanceof GroupNodeCanvas groupNodeCanvas) {
|
|
|
|
|
|
- controller.paste(groupNodeCanvas.getGroupNode(),
|
|
|
- canvasOrUpperNodeCanvas.getMousePosition());
|
|
|
- controller.calculateStateAndVisualForCurrentTimeStep();
|
|
|
+ control.paste(groupNodeCanvas.getGroupNode(), canvasOrUpperNodeCanvas.getMousePosition());
|
|
|
+ control.calculateStateAndVisualForCurrentTimeStep();
|
|
|
scrollPane.getViewport().getComponent(0).repaint();
|
|
|
} else {
|
|
|
- controller.paste(null, canvas.getMousePosition());
|
|
|
- controller.calculateStateAndVisualForCurrentTimeStep();
|
|
|
+ control.paste(null, canvas.getMousePosition());
|
|
|
+ control.calculateStateAndVisualForCurrentTimeStep();
|
|
|
canvas.repaint();
|
|
|
}
|
|
|
} catch (HeadlessException | JsonParseException | UnsupportedFlavorException | IOException e1) {
|
|
@@ -532,17 +537,17 @@ public class GUI {
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
chooseTabTemp();
|
|
|
JScrollPane scrollPane = getScrollPaneFromTabbedPane();
|
|
|
- if (!model.getSelectedObjects().isEmpty()) {
|
|
|
- if (scrollPane.getViewport().getComponent(0) instanceof GroupNodeCanvas groupNodeCanvas) {
|
|
|
- controller.cut(groupNodeCanvas.getGroupNode());
|
|
|
- controller.calculateStateAndVisualForCurrentTimeStep();
|
|
|
+ if (!GuiSettings.getSelectedObjects().isEmpty()) {
|
|
|
+ if (scrollPane.getViewport().getComponent(0)instanceof GroupNodeCanvas groupNodeCanvas) {
|
|
|
+ control.cut(groupNodeCanvas.getGroupNode());
|
|
|
+ control.calculateStateAndVisualForCurrentTimeStep();
|
|
|
scrollPane.getViewport().getComponent(0).repaint();
|
|
|
} else {
|
|
|
- controller.cut(null);
|
|
|
- controller.calculateStateAndVisualForCurrentTimeStep();
|
|
|
+ control.cut(null);
|
|
|
+ control.calculateStateAndVisualForCurrentTimeStep();
|
|
|
canvas.repaint();
|
|
|
}
|
|
|
- if (!model.getClipboradObjects().isEmpty()) {
|
|
|
+ if (!GuiSettings.getClipboardObjects().isEmpty()) {
|
|
|
canvas.itemPaste.setEnabled(true);
|
|
|
}
|
|
|
}
|
|
@@ -569,10 +574,10 @@ public class GUI {
|
|
|
mnNewMenuEdit.add(mntmRedo);
|
|
|
mntmFindReplace.addActionListener(actionEvent -> {
|
|
|
try {
|
|
|
- SearchPopUp dialog = new SearchPopUp(controller, canvas, holegJFrame);
|
|
|
+ SearchPopUp dialog = new SearchPopUp(control, canvas, holegJFrame);
|
|
|
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
|
|
|
dialog.setVisible(true);
|
|
|
- controller.getObjectsInDepth();
|
|
|
+ control.getObjectsInDepth();
|
|
|
} catch (Exception ex) {
|
|
|
ex.printStackTrace();
|
|
|
}
|
|
@@ -583,7 +588,7 @@ public class GUI {
|
|
|
mntmEditEdges.addActionListener(actionEvent -> {
|
|
|
EditEdgesPopUp edgePopUp = new EditEdgesPopUp(holegJFrame);
|
|
|
edgePopUp.setCanvas(canvas);
|
|
|
- edgePopUp.setController(controller);
|
|
|
+ edgePopUp.setController(control);
|
|
|
edgePopUp.setVisible(true);
|
|
|
});
|
|
|
|
|
@@ -605,16 +610,7 @@ public class GUI {
|
|
|
|
|
|
mnNewMenuOptions.add(mntmResetCategory);
|
|
|
mntmResetCategory.addActionListener(actionEvent -> {
|
|
|
- ArrayList<Category> cat = model.getCategories();
|
|
|
- try {
|
|
|
- while (!cat.isEmpty()) {
|
|
|
- controller.deleteCategory(cat.get(0).getName());
|
|
|
-
|
|
|
- }
|
|
|
- controller.resetCategorys();
|
|
|
- } catch (Exception e2) {
|
|
|
- System.out.println(e2.getMessage());
|
|
|
- }
|
|
|
+ control.resetCategories();
|
|
|
categoryTree.revalidate();
|
|
|
categoryTree.repaint();
|
|
|
});
|
|
@@ -631,10 +627,10 @@ public class GUI {
|
|
|
+ "After that as many HolonObjects as possible will get fully supplied.");
|
|
|
|
|
|
mntmFairMinFirst.addActionListener(arg0 -> {
|
|
|
- controller.getModel().setFairnessModel(FairnessModel.MininumDemandFirst);
|
|
|
+ control.getModel().setFairnessModel(FairnessModel.MininumDemandFirst);
|
|
|
mntmFairMinFirst.setForeground(Color.BLUE);
|
|
|
mntmFairAlleEqual.setForeground(mnFairnessModel.getForeground());
|
|
|
- controller.calculateStateAndVisualForCurrentTimeStep();
|
|
|
+ control.calculateStateAndVisualForCurrentTimeStep();
|
|
|
// Update UpperNodes
|
|
|
Component canvasOrUpperNodeCanvas = getScrollPaneFromTabbedPane().getViewport().getComponent(0);
|
|
|
if (canvasOrUpperNodeCanvas != null && canvasOrUpperNodeCanvas instanceof GroupNodeCanvas groupNodeCanvas) {
|
|
@@ -646,10 +642,10 @@ public class GUI {
|
|
|
mntmFairAlleEqual.setToolTipText("HolonObjects will all get the same amount of energy.");
|
|
|
|
|
|
mntmFairAlleEqual.addActionListener(arg0 -> {
|
|
|
- controller.getModel().setFairnessModel(FairnessModel.AllEqual);
|
|
|
+ control.getModel().setFairnessModel(FairnessModel.AllEqual);
|
|
|
mntmFairAlleEqual.setForeground(Color.BLUE);
|
|
|
mntmFairMinFirst.setForeground(mnFairnessModel.getForeground());
|
|
|
- controller.calculateStateAndVisualForCurrentTimeStep();
|
|
|
+ control.calculateStateAndVisualForCurrentTimeStep();
|
|
|
// Update UpperNodes
|
|
|
Component canvasOrUpperNodeCanvas = getScrollPaneFromTabbedPane().getViewport().getComponent(0);
|
|
|
if (canvasOrUpperNodeCanvas != null && canvasOrUpperNodeCanvas instanceof GroupNodeCanvas groupNodeCanvas) {
|
|
@@ -661,13 +657,13 @@ public class GUI {
|
|
|
|
|
|
mnNewMenuView.add(mntmCanvasSize);
|
|
|
mntmCanvasSize.addActionListener(actionEvent -> {
|
|
|
- CanvasResizePopUp popUp = new CanvasResizePopUp(model, controller, canvas, this.tabbedPaneInnerOriginal,
|
|
|
+ CanvasResizePopUp popUp = new CanvasResizePopUp(model, control, canvas, this.tabbedPaneInnerOriginal,
|
|
|
holegJFrame);
|
|
|
popUp.setVisible(true);
|
|
|
});
|
|
|
|
|
|
tabbedPaneInnerOriginal.addChangeListener(change -> {
|
|
|
- controller.clearSelection();
|
|
|
+ control.clearSelection();
|
|
|
});
|
|
|
mnNewMenuView.add(mntmCanvasSize);
|
|
|
|
|
@@ -685,7 +681,8 @@ public class GUI {
|
|
|
JScrollPane spane = getScrollPaneFromTabbedPane();
|
|
|
if (spane != null) {
|
|
|
Component canvasOrUpperNodeCanvas = spane.getViewport().getComponent(0);
|
|
|
- if (canvasOrUpperNodeCanvas != null && canvasOrUpperNodeCanvas instanceof GroupNodeCanvas groupNodeCanvas) {
|
|
|
+ if (canvasOrUpperNodeCanvas != null
|
|
|
+ && canvasOrUpperNodeCanvas instanceof GroupNodeCanvas groupNodeCanvas) {
|
|
|
groupNodeCanvas.repaint();
|
|
|
}
|
|
|
}
|
|
@@ -703,7 +700,7 @@ public class GUI {
|
|
|
mnHelp.add(mntmAboutUs);
|
|
|
|
|
|
canvas.setBackground(Color.WHITE);
|
|
|
- canvas.setPreferredSize(new Dimension(model.getCanvasX(), model.getCanvasY()));
|
|
|
+ canvas.setPreferredSize(new Dimension(GuiSettings.canvasSize.getX(), GuiSettings.canvasSize.getY()));
|
|
|
/********************
|
|
|
* RIGHT CONTAINER (INFORMATION)
|
|
|
**********************/
|
|
@@ -712,11 +709,6 @@ public class GUI {
|
|
|
toolBarHolonEl.setFloatable(false);
|
|
|
panelHolonEl.add(toolBarHolonEl);
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
/***********************
|
|
|
* HolonElement Graph Actions
|
|
|
**********************/
|
|
@@ -765,9 +757,9 @@ public class GUI {
|
|
|
JLabel label = new JLabel();
|
|
|
Image imgR;
|
|
|
if (leaf) {
|
|
|
- for (Category cat : model.getCategories()) {
|
|
|
+ for (Category cat : GuiSettings.getCategories()) {
|
|
|
for (AbstractCanvasObject cps : cat.getObjects()) {
|
|
|
- if (value.toString().compareTo(cps.getName()) == 0) {
|
|
|
+ if (value.toString().equals(cps.getName())) {
|
|
|
imgR = ImageImport.loadImage(cps.getImage(), 50, 50);
|
|
|
if (imgR != null) {
|
|
|
label.setIcon(new ImageIcon(imgR));
|
|
@@ -782,9 +774,9 @@ public class GUI {
|
|
|
label.setForeground(ColorPreference.Category.Focus);
|
|
|
label.setOpaque(true);
|
|
|
}
|
|
|
- if (label.getText().length() == 0) {
|
|
|
+ if (label.getText().isEmpty()) {
|
|
|
label.setText(value.toString());
|
|
|
- if (value.toString().compareTo("Categories") != 0) {
|
|
|
+ if (!value.toString().equals("Categories")) {
|
|
|
label.setIcon(new ImageIcon(ImageImport.loadImage("/Images/folder.png")));
|
|
|
}
|
|
|
}
|
|
@@ -894,19 +886,21 @@ public class GUI {
|
|
|
/**
|
|
|
* close UpperNodeTabs of replaced UpperNode
|
|
|
*/
|
|
|
- if (groupNodeCanvas.mayBeReplaced != null && groupNodeCanvas.mayBeReplaced instanceof GroupNode) {
|
|
|
+ if (groupNodeCanvas.mayBeReplaced != null
|
|
|
+ && groupNodeCanvas.mayBeReplaced instanceof GroupNode) {
|
|
|
groupNodeCanvas.closeUpperNodeTab(groupNodeCanvas.mayBeReplaced.getId());
|
|
|
}
|
|
|
- controller.addObjUpperNode(h, groupNodeCanvas.getGroupNode());
|
|
|
+ control.addObjUpperNode(h, groupNodeCanvas.getGroupNode());
|
|
|
|
|
|
/**
|
|
|
* object would be replaced
|
|
|
*/
|
|
|
groupNodeCanvas.mayBeReplaced = null;
|
|
|
groupNodeCanvas.invalidate();
|
|
|
- controller.calculateStateAndVisualForCurrentTimeStep();
|
|
|
+ control.calculateStateAndVisualForCurrentTimeStep();
|
|
|
groupNodeCanvas.repaint();
|
|
|
- groupNodeCanvas.setXY((int) canvas.getMousePosition().getX(), (int) canvas.getMousePosition().getY());
|
|
|
+ groupNodeCanvas.setXY((int) canvas.getMousePosition().getX(),
|
|
|
+ (int) canvas.getMousePosition().getY());
|
|
|
} else {
|
|
|
int x = (int) canvas.getMousePosition().getX() + 16;
|
|
|
int y = (int) canvas.getMousePosition().getY() + 16;
|
|
@@ -927,7 +921,7 @@ public class GUI {
|
|
|
if (canvas.mayBeReplaced != null && canvas.mayBeReplaced instanceof GroupNode) {
|
|
|
canvas.closeUpperNodeTab(canvas.mayBeReplaced.getId());
|
|
|
}
|
|
|
- controller.addObjectCanvas(h);
|
|
|
+ control.addObjectCanvas(h);
|
|
|
/**
|
|
|
* no object should get replaced
|
|
|
*/
|
|
@@ -937,7 +931,7 @@ public class GUI {
|
|
|
(int) canvas.getMousePosition().getY());
|
|
|
canvas.repaint();
|
|
|
}
|
|
|
- controller.calculateStateAndVisualForCurrentTimeStep();
|
|
|
+ control.calculateStateAndVisualForCurrentTimeStep();
|
|
|
contentPane.updateUI();
|
|
|
dragging = false;
|
|
|
}
|
|
@@ -963,9 +957,9 @@ public class GUI {
|
|
|
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) categoryTree
|
|
|
.getPathForLocation(e.getX(), e.getY()).getLastPathComponent();
|
|
|
if (SwingUtilities.isRightMouseButton(e)) {
|
|
|
- for (Category cat : model.getCategories()) {
|
|
|
+ for (Category cat : GuiSettings.getCategories()) {
|
|
|
for (AbstractCanvasObject cps : cat.getObjects()) {
|
|
|
- if (actualObjectClicked.compareTo(cps.getName()) == 0
|
|
|
+ if (actualObjectClicked.equals(cps.getName())
|
|
|
&& !(cps instanceof HolonSwitch)) {
|
|
|
editItem.setEnabled(true);
|
|
|
popmenuEdit.show(e.getComponent(), e.getX(), e.getY());
|
|
@@ -975,9 +969,9 @@ public class GUI {
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
- for (Category cat : model.getCategories()) {
|
|
|
+ for (Category cat : GuiSettings.getCategories()) {
|
|
|
for (AbstractCanvasObject cps : cat.getObjects()) {
|
|
|
- if (actualObjectClicked.compareTo(cps.getName()) == 0) {
|
|
|
+ if (actualObjectClicked.equals(cps.getName())) {
|
|
|
File checkPath = new File(cps.getImage());
|
|
|
if (checkPath.exists()) {
|
|
|
img = new ImageIcon(cps.getImage()).getImage().getScaledInstance(32, 32,
|
|
@@ -1005,18 +999,15 @@ public class GUI {
|
|
|
System.out.println("Edit");
|
|
|
addObjectPopUP = new AddObjectPopUp(true, tempCps, catOfObjToBeEdited, holegJFrame);
|
|
|
addObjectPopUP.setCategory(catOfObjToBeEdited);
|
|
|
- addObjectPopUP.setController(controller);
|
|
|
+ addObjectPopUP.setController(control);
|
|
|
addObjectPopUP.setVisible(true);
|
|
|
});
|
|
|
removeItem.addActionListener(actionEvent -> {
|
|
|
// Remove the selected Object object
|
|
|
- try {
|
|
|
- System.out.println("catOfObjToBeEdited:" + catOfObjToBeEdited + ", tempCps:" + tempCps);
|
|
|
- controller.delObjectCategory(catOfObjToBeEdited, tempCps.getName());
|
|
|
- } catch (IOException e) {
|
|
|
- System.err.println("IOException");
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
+ log.info("catOfObjToBeEdited:" + catOfObjToBeEdited + ", tempCps:" + tempCps);
|
|
|
+ control.findCategoryWithName(catOfObjToBeEdited).ifPresent(cat -> {
|
|
|
+ cat.removeObjectsWithName(tempCps.getName());
|
|
|
+ });
|
|
|
});
|
|
|
scrollPane1.setViewportView(categoryTree);
|
|
|
|
|
@@ -1028,20 +1019,20 @@ public class GUI {
|
|
|
panel.add(toolBar);
|
|
|
btnAddPopUp.add(mItemNew);
|
|
|
mItemNew.addActionListener(actionEvent -> {
|
|
|
- new CreateNewDialog(controller, holegJFrame);
|
|
|
+ new CreateNewDialog(control, holegJFrame);
|
|
|
});
|
|
|
btnAddPopUp.addSeparator();
|
|
|
btnAddPopUp.add(mItemCategory);
|
|
|
mItemCategory.addActionListener(actionEvent -> {
|
|
|
- new CreateNewDialog(controller, Option.Category, holegJFrame);
|
|
|
+ new CreateNewDialog(control, Option.Category, holegJFrame);
|
|
|
});
|
|
|
btnAddPopUp.add(mItemObject);
|
|
|
mItemObject.addActionListener(actionEvent -> {
|
|
|
- new CreateNewDialog(controller, Option.Object, holegJFrame);
|
|
|
+ new CreateNewDialog(control, Option.Object, holegJFrame);
|
|
|
});
|
|
|
btnAddPopUp.add(mItemSwitch);
|
|
|
mItemSwitch.addActionListener(actionEvent -> {
|
|
|
- new CreateNewDialog(controller, Option.Switch, holegJFrame);
|
|
|
+ new CreateNewDialog(control, Option.Switch, holegJFrame);
|
|
|
});
|
|
|
btnAdd.addActionListener(actionEvent -> btnAddPopUp.show(btnAdd, -1, +20));
|
|
|
btnAdd.setIcon(new ImageIcon(ImageImport.loadImage("Images/plus.png", 16, 16)));
|
|
@@ -1112,12 +1103,17 @@ public class GUI {
|
|
|
int dialogResult = JOptionPane.showConfirmDialog(holegJFrame, eraseCategory + nodeName + "?",
|
|
|
warningText, JOptionPane.YES_NO_OPTION);
|
|
|
if (dialogResult == JOptionPane.YES_OPTION) {
|
|
|
- controller.deleteCategory(nodeName);
|
|
|
+ GuiSettings.getCategories().stream().filter(cat -> cat.getName() == nodeName).findAny()
|
|
|
+ .ifPresent(cat -> {
|
|
|
+ control.deleteCategory(cat);
|
|
|
+ });
|
|
|
}
|
|
|
break;
|
|
|
case 2:
|
|
|
DefaultMutableTreeNode parent = (DefaultMutableTreeNode) selectedNode.getParent();
|
|
|
- controller.delObjectCategory(parent.getUserObject().toString(), nodeName);
|
|
|
+ control.findCategoryWithName(parent.getUserObject().toString()).ifPresent(cat -> {
|
|
|
+ cat.removeObjectsWithName(nodeName);
|
|
|
+ });
|
|
|
break;
|
|
|
|
|
|
default:
|
|
@@ -1150,18 +1146,18 @@ public class GUI {
|
|
|
while (tabbedPaneInnerOriginal.getTabCount() > 1) {
|
|
|
tabbedPaneInnerOriginal.remove(1);
|
|
|
}
|
|
|
- controller.clearSelection();
|
|
|
+ control.clearSelection();
|
|
|
model.getEdgesOnCanvas().clear();
|
|
|
model.getObjectsOnCanvas().clear();
|
|
|
- controller.OnSelectionChanged.broadcast();
|
|
|
- controller.setSelecteEdge(null);
|
|
|
- controller.getModel().setCurrentIteration(0);
|
|
|
+ control.OnSelectionChanged.broadcast();
|
|
|
+ GuiSettings.getSelectedEdges().clear();
|
|
|
+ control.getModel().setCurrentIteration(0);
|
|
|
elementGraph.setText("None");
|
|
|
canvas.tempCps = null;
|
|
|
canvas.repaint();
|
|
|
IdCounter.resetObjectCounter(CounterType.Object);
|
|
|
IdCounter.resetObjectCounter(CounterType.Element);
|
|
|
- controller.calculateStateAndVisualForCurrentTimeStep();
|
|
|
+ control.calculateStateAndVisualForCurrentTimeStep();
|
|
|
});
|
|
|
|
|
|
mntmOpen.addActionListener(new ActionListener() {
|
|
@@ -1183,11 +1179,11 @@ public class GUI {
|
|
|
while (tabbedPaneInnerOriginal.getTabCount() > 1) {
|
|
|
tabbedPaneInnerOriginal.remove(1);
|
|
|
}
|
|
|
- model.getSelectedObjects().clear();
|
|
|
- controller.loadFile(file.getAbsolutePath());
|
|
|
+ GuiSettings.getSelectedObjects().clear();
|
|
|
+ control.loadFile(file.getAbsolutePath());
|
|
|
canvas.repaint();
|
|
|
categoryTree.repaint();
|
|
|
- controller.calculateStateAndVisualForCurrentTimeStep();
|
|
|
+ control.calculateStateAndVisualForCurrentTimeStep();
|
|
|
} catch (IOException | ArchiveException e) {
|
|
|
e.printStackTrace();
|
|
|
JLabel message = new JLabel("The savefile is corrupt and cannot be opened.");
|
|
@@ -1231,7 +1227,7 @@ public class GUI {
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
- controller.saveFile(new File(fullPath).getAbsolutePath());
|
|
|
+ control.saveFile(new File(fullPath).getAbsolutePath());
|
|
|
} catch (IOException | ArchiveException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
@@ -1247,11 +1243,11 @@ public class GUI {
|
|
|
|
|
|
private void menuUndoActionPerformed() {
|
|
|
try {
|
|
|
- controller.loadAutoSave(controller.getUndoSave());
|
|
|
+ control.loadAutoSave(control.getUndoSave());
|
|
|
|
|
|
closeInvalidUpperNodeTabs();
|
|
|
|
|
|
- controller.calculateStateAndVisualForCurrentTimeStep();
|
|
|
+ control.calculateStateAndVisualForCurrentTimeStep();
|
|
|
canvas.repaint();
|
|
|
} catch (IOException e) {
|
|
|
e.printStackTrace();
|
|
@@ -1267,11 +1263,11 @@ public class GUI {
|
|
|
|
|
|
private void menuRedoActionPerformed() {
|
|
|
try {
|
|
|
- controller.loadAutoSave(controller.getRedoSave());
|
|
|
+ control.loadAutoSave(control.getRedoSave());
|
|
|
|
|
|
closeInvalidUpperNodeTabs();
|
|
|
|
|
|
- controller.calculateStateAndVisualForCurrentTimeStep();
|
|
|
+ control.calculateStateAndVisualForCurrentTimeStep();
|
|
|
canvas.repaint();
|
|
|
} catch (IOException e) {
|
|
|
e.printStackTrace();
|
|
@@ -1279,11 +1275,11 @@ public class GUI {
|
|
|
}
|
|
|
});
|
|
|
|
|
|
- timePanel = new TimePanel(controller);
|
|
|
+ timePanel = new TimePanel(control);
|
|
|
timePanel.setBorder(null);
|
|
|
timePanel.getTimeSlider().addChangeListener(changeEvent -> {
|
|
|
// TimeSliderChanged event
|
|
|
- controller.calculateStateAndVisualForTimeStep(timePanel.getTimeSlider().getValue());
|
|
|
+ control.calculateStateAndVisualForTimeStep(timePanel.getTimeSlider().getValue());
|
|
|
unitGraph.repaint();
|
|
|
contentPane.updateUI();
|
|
|
});
|
|
@@ -1314,9 +1310,7 @@ public class GUI {
|
|
|
scrollProperties.setViewportView(this.informationPanel);
|
|
|
scrollProperties.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
|
|
|
scrollProperties.getVerticalScrollBar().setUnitIncrement(16);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
tabbedPaneOriginal.setBorder(null);
|
|
|
scrollProperties.setBorder(null);
|
|
|
splitPane.setBorder(null);
|
|
@@ -1328,13 +1322,13 @@ public class GUI {
|
|
|
holegJFrame.getContentPane().add(timePanel, BorderLayout.SOUTH);
|
|
|
|
|
|
try {
|
|
|
- controller.loadAutoSave(System.getProperty("user.home") + "/.config/HolonGUI/Category/Category.json");
|
|
|
+ control.loadAutoSave(System.getProperty("user.home") + "/.config/HolonGUI/Category/Category.json");
|
|
|
} catch (IOException e1) {
|
|
|
}
|
|
|
|
|
|
String autoPath = System.getProperty("user.home") + "/.config/HolonGUI/Autosave/";
|
|
|
File dest = new File(autoPath);
|
|
|
- ArrayList<File> oldAutoSaves = controller.filterOldAutoSaveFiles();
|
|
|
+ ArrayList<File> oldAutoSaves = control.filterOldAutoSaveFiles();
|
|
|
int nrOfOldSaves = oldAutoSaves.size();
|
|
|
|
|
|
if (nrOfOldSaves > 0) {
|
|
@@ -1343,7 +1337,7 @@ public class GUI {
|
|
|
"Old autosave file was found, should it be loaded?", warningText, dialogButton);
|
|
|
if (dialogResult == JOptionPane.YES_OPTION) {
|
|
|
if (dest.exists()) {
|
|
|
- model.setAutoSaveNr(nrOfOldSaves - 1);
|
|
|
+ GuiSettings.autoSaveNr = (nrOfOldSaves - 1);
|
|
|
mntmRedo.doClick();
|
|
|
} else {
|
|
|
JOptionPane.showMessageDialog(holegJFrame, "Autosave could not be loaded.");
|
|
@@ -1355,14 +1349,15 @@ public class GUI {
|
|
|
|
|
|
// after all: delete the obsolete/old autosave files from the
|
|
|
// directory
|
|
|
- controller.deleteObsoleteAutoSaveFiles();
|
|
|
+ control.deleteObsoleteAutoSaveFiles();
|
|
|
}
|
|
|
|
|
|
canvasSP.addComponentListener(new ComponentAdapter() {
|
|
|
@Override
|
|
|
public void componentResized(ComponentEvent e) {
|
|
|
- GuiSettings.canvasSize.setX(Math.max(model.getCanvasX(), canvasSP.getViewport().getWidth()));
|
|
|
- GuiSettings.canvasSize.setY(Math.max(model.getCanvasY(), canvasSP.getViewport().getHeight()));
|
|
|
+ GuiSettings.canvasSize.setX(Math.max(GuiSettings.canvasSize.getX(), canvasSP.getViewport().getWidth()));
|
|
|
+ GuiSettings.canvasSize
|
|
|
+ .setY(Math.max(GuiSettings.canvasSize.getY(), canvasSP.getViewport().getHeight()));
|
|
|
canvas.repaint();
|
|
|
}
|
|
|
});
|
|
@@ -1374,7 +1369,7 @@ public class GUI {
|
|
|
JMenuItem openMenu = new JMenuItem("Open Algorithm Panel", new ImageIcon(ImageImport
|
|
|
.loadImage("/Button_Images/iconAlgo.png").getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH)));
|
|
|
openMenu.addActionListener(actionEvent -> {
|
|
|
- new AddOnWindow(holegJFrame, controller);
|
|
|
+ new AddOnWindow(holegJFrame, control);
|
|
|
});
|
|
|
openMenu.setAccelerator(KeyStroke.getKeyStroke('N', Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx()));
|
|
|
menuWindow.add(openMenu);
|
|
@@ -1382,7 +1377,7 @@ public class GUI {
|
|
|
JMenuItem openOutliner = new JMenuItem("Open Outliner", new ImageIcon(ImageImport
|
|
|
.loadImage("/Button_Images/iconOutliner.png").getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH)));
|
|
|
openOutliner.addActionListener(actionEvent -> {
|
|
|
- outlinerList.add(new Outliner(holegJFrame, model, controller));
|
|
|
+ outlinerList.add(new Outliner(holegJFrame, model, control));
|
|
|
});
|
|
|
openOutliner
|
|
|
.setAccelerator(KeyStroke.getKeyStroke('O', Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx()));
|
|
@@ -1391,7 +1386,7 @@ public class GUI {
|
|
|
JMenuItem openFlexMenuItem = new JMenuItem("Open Flexibility Panel", new ImageIcon(ImageImport
|
|
|
.loadImage("/Button_Images/iconAlgo.png").getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH)));
|
|
|
openFlexMenuItem.addActionListener(actionEvent -> {
|
|
|
- flexList.add(new FlexWindow(holegJFrame, controller));
|
|
|
+ flexList.add(new FlexWindow(holegJFrame, control));
|
|
|
});
|
|
|
openFlexMenuItem
|
|
|
.setAccelerator(KeyStroke.getKeyStroke('L', Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx()));
|
|
@@ -1423,6 +1418,7 @@ public class GUI {
|
|
|
out.update();
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
private boolean isUpperPanelInsideBounds() {
|
|
|
int x = holegJFrame.getX();
|
|
|
int y = holegJFrame.getY();
|
|
@@ -1453,7 +1449,7 @@ public class GUI {
|
|
|
private void setUpAutoSave(File dest) {
|
|
|
dest.mkdirs();
|
|
|
try {
|
|
|
- controller.autoSave();
|
|
|
+ control.autoSave();
|
|
|
} catch (IOException e1) {
|
|
|
e1.printStackTrace();
|
|
|
}
|
|
@@ -1464,7 +1460,7 @@ public class GUI {
|
|
|
*
|
|
|
* @param categories the current categories
|
|
|
*/
|
|
|
- private void updateCategories(final ArrayList<Category> categories) {
|
|
|
+ private void updateCategories(Collection<Category> categories) {
|
|
|
DefaultTreeModel treemodel = new DefaultTreeModel(new DefaultMutableTreeNode("Categories") {
|
|
|
|
|
|
private static final long serialVersionUID = 1L;
|
|
@@ -1490,7 +1486,7 @@ public class GUI {
|
|
|
*
|
|
|
* @param categories the Categories
|
|
|
*/
|
|
|
- public void updateCategoryUI(ArrayList<Category> categories) {
|
|
|
+ public void updateCategoryUI(Collection<Category> categories) {
|
|
|
DefaultTreeModel model = (DefaultTreeModel) categoryTree.getModel();
|
|
|
updateCategories(categories);
|
|
|
model.reload();
|
|
@@ -1507,13 +1503,11 @@ public class GUI {
|
|
|
chooseTabTemp();
|
|
|
|
|
|
JScrollPane scrollPane = getScrollPaneFromTabbedPane();
|
|
|
- if (scrollPane.getViewport().getComponent(0) instanceof Canvas canvasPanel) {
|
|
|
- unc = new GroupNodeCanvas(model, controller, unitGraph, node, "",
|
|
|
- canvasPanel);
|
|
|
+ if (scrollPane.getViewport().getComponent(0)instanceof Canvas canvasPanel) {
|
|
|
+ unc = new GroupNodeCanvas(model, control, unitGraph, node, "", canvasPanel);
|
|
|
|
|
|
- } else if(scrollPane.getViewport().getComponent(0) instanceof GroupNodeCanvas groupNodeCanvas) {
|
|
|
- unc = new GroupNodeCanvas(model, controller, unitGraph, node,
|
|
|
- groupNodeCanvas.getParentPath() + " -> ",
|
|
|
+ } else if (scrollPane.getViewport().getComponent(0)instanceof GroupNodeCanvas groupNodeCanvas) {
|
|
|
+ unc = new GroupNodeCanvas(model, control, unitGraph, node, groupNodeCanvas.getParentPath() + " -> ",
|
|
|
scrollPane.getViewport().getComponent(0));
|
|
|
}
|
|
|
|
|
@@ -1559,8 +1553,12 @@ public class GUI {
|
|
|
}
|
|
|
Component pane = ((JScrollPane) c).getViewport().getComponent(0);
|
|
|
if (pane instanceof GroupNodeCanvas groupNodeCanvas) {
|
|
|
- temp = model.getHashcodeMap().get(groupNodeCanvas.hashCode());
|
|
|
- groupNodeCanvas.setGroupNode((GroupNode) temp);
|
|
|
+ //TODO(Tom2021-12-20) maybe
|
|
|
+ if(temp instanceof GroupNode node) {
|
|
|
+ groupNodeCanvas.setGroupNode(node);
|
|
|
+ }else {
|
|
|
+ log.warning("TODO tabbedPane confickt");
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1621,9 +1619,6 @@ public class GUI {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
private void openWebpage(String URL) {
|
|
|
try {
|
|
|
java.awt.Desktop.getDesktop().browse(new URI(URL));
|