Xcos: reuse empty diagram windows when possible. 87/18587/3
diptighosalkar [Tue, 18 Oct 2016 15:37:06 +0000 (20:37 +0530)]
Change-Id: I566c0d0708a4feb589454a4532a5e976172c8699

scilab/modules/xcos/src/java/org/scilab/modules/xcos/Xcos.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/graph/XcosDiagram.java

index 72765fe..9a52481 100644 (file)
@@ -444,6 +444,22 @@ public final class Xcos {
         if (f == null && diag != null && diag.getModel().getChildCount(diag.getDefaultParent()) > 0) {
             diag = null;
         }
+        // looking for an empty, unsaved diagram to use if opening a new file
+        // if not found an already open instance of the file
+        if (diag == null) {
+            // traverse through the key set of all the opened diagrams
+            for (long key : diagrams.keySet()) {
+                List<XcosDiagram> diagramsWithKey = diagrams.get(key);
+                XcosDiagram diagramWithKey = diagramsWithKey.get(0); // get the diagram that maps to that key
+                int childCount = diagramWithKey.countChildren(); //count the number of children in the diagram
+                // if empty, unsaved and unused
+                if (childCount == 0 && diagramWithKey.getSavedFile() == null && !diagramWithKey.isModified()) {
+                    // use that open diagram
+                    diag = diagramWithKey;
+                    diag.transformAndLoadFile(controller, file);
+                }
+            }
+        }
         // if reuse then request focus
         if (diag != null) {
             XcosTab tab = XcosTab.get(diag);
index e23723a..0264ade 100644 (file)
@@ -2261,4 +2261,14 @@ public class XcosDiagram extends ScilabGraph {
             }
         };
     }
+
+   /**
+    * Counts the number of children in the diagram
+    *
+    * @return the number of children in the diagram
+    */
+    public int countChildren()
+    {
+        return getModel().getChildCount(this.getDefaultParent());
+    }
 }