Jelajahi Sumber

fixes #80 (net get recalculated, if a producer is removed)

I. Dix 7 tahun lalu
induk
melakukan
e3e6d21dde
2 mengubah file dengan 25 tambahan dan 4 penghapusan
  1. 2 2
      src/ui/controller/SimulationManager.java
  2. 23 2
      src/ui/view/GUI.java

+ 2 - 2
src/ui/controller/SimulationManager.java

@@ -86,7 +86,7 @@ public class SimulationManager {
             }
         }
         canvas.repaint();
-//        printNetToConsole();
+//        printNetsToConsole();
         flexPane.recalculate();
     }
 
@@ -485,7 +485,7 @@ public class SimulationManager {
     /**
      * Prints the Components auf all subnets.
      */
-    public void printNetToConsole() {
+    public void printNetsToConsole() {
         for (int i = 0; i < subNets.size(); i++) {
             System.out.println("SUBNET NR:" + i);
             System.out.println("  Objects:");

+ 23 - 2
src/ui/view/GUI.java

@@ -58,7 +58,6 @@ public class GUI<E> implements CategoryListener {
     private final JSplitPane splitPaneCanvasConsole = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
     // the tabbed canvas containing the different sub-net tabs of the grid (Main Grid + Nodes of Nodes)
     private final JTabbedPane tabbedPaneInnerOriginal = new JTabbedPane(JTabbedPane.TOP);
-    //    private final JTabbedPane tabbedPaneInnerSplit = new JTabbedPane(JTabbedPane.TOP);
     // the main canvas where we can see the grid currently displayed
     private final JScrollPane canvasSP = new JScrollPane();
     private final JScrollPane scrollPane1 = new JScrollPane();
@@ -271,7 +270,7 @@ public class GUI<E> implements CategoryListener {
     private void initialize() {
         frmCyberPhysical = new JFrame();
         frmCyberPhysical.setTitle("Cyber Physical Systems Model");
-        frmCyberPhysical.setBounds(100, -1080, 1000, 800);
+        frmCyberPhysical.setBounds(100, 100, 1000, 800);
         frmCyberPhysical.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
         frmCyberPhysical.setExtendedState(JFrame.MAXIMIZED_BOTH);
         frmCyberPhysical.addWindowListener(new java.awt.event.WindowAdapter() {
@@ -379,9 +378,18 @@ public class GUI<E> implements CategoryListener {
                 JScrollPane scrollPane = getScrollPaneFromTabbedPane();
                 Component canvasOrUpperNodeCanvas = scrollPane.getViewport().getComponent(0);
 
+                // check whether a producer was deleted (this triggers a complete re-evaluation of the net)
+                boolean wasProducerDeleted = false;
+
                 if (canvasOrUpperNodeCanvas instanceof UpperNodeCanvas) {
                     UpperNodeCanvas uNC = (UpperNodeCanvas) canvasOrUpperNodeCanvas;
                     for (AbstractCpsObject cps : model.getSelectedCpsObjects()) {
+
+                        if (cps instanceof HolonObject
+                                && ((HolonObject) cps).getState() == HolonObject.PRODUCER) {
+                            wasProducerDeleted = true;
+                        }
+
                         controller.removeTrackingObj(cps);
                         if (uNC.upperNode.getNodes().contains(cps)) {
                             controller.delObjUpperNode(cps, uNC.upperNode);
@@ -398,6 +406,12 @@ public class GUI<E> implements CategoryListener {
                     boolean save = false;
                     for (int j = 0; j < model.getSelectedCpsObjects().size(); j++) {
                         AbstractCpsObject cps = model.getSelectedCpsObjects().get(j);
+
+                        if (cps instanceof HolonObject
+                                && ((HolonObject) cps).getState() == HolonObject.PRODUCER) {
+                            wasProducerDeleted = true;
+                        }
+
                         controller.removeTrackingObj(cps);
                         if (j < model.getSelectedCpsObjects().size() - 1)
                             save = true;
@@ -409,6 +423,13 @@ public class GUI<E> implements CategoryListener {
                     }
                     canvas.repaint();
                 }
+
+                // recalculate net if a producer was deleted
+                if (wasProducerDeleted) {
+                    controller.resetSimulation();
+                    controller.calculateStateForCurrentTimeStep();
+                }
+
                 model.getSelectedCpsObjects().clear();
                 hideScrollGraph();
             }