Xcos: fix doc building 07/19007/1
Clément DAVID [Mon, 30 Jan 2017 17:05:50 +0000 (18:05 +0100)]
Change-Id: I215b1a0c941e232a6d25196c01e868a2a27dbac8

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

index f53ada5..4851b90 100644 (file)
@@ -114,6 +114,7 @@ import com.mxgraph.view.mxGraphSelectionModel;
 import com.mxgraph.view.mxMultiplicity;
 import java.lang.reflect.Constructor;
 import java.rmi.server.UID;
+import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.Optional;
 import org.scilab.modules.xcos.io.ScilabTypeCoder;
@@ -197,15 +198,6 @@ public class XcosDiagram extends ScilabGraph {
 
         // do not put loop links inside the common block cell but on the defaultParent
         ((mxGraphModel) getModel()).setMaintainEdgeParent(false);
-        getModel().addListener(mxEvent.CHANGE, new mxIEventListener() {
-            @Override
-            public void invoke(Object sender, mxEventObject evt) {
-                if (sender instanceof XcosGraphModel) {
-                    List<XcosDiagram> diagrams = Xcos.getInstance().openedDiagrams(Xcos.findRoot(XcosDiagram.this));
-                    diagrams.stream().forEach(d -> d.updateTabTitle());
-                }
-            }
-        });
     }
 
     /*
@@ -632,6 +624,32 @@ public class XcosDiagram extends ScilabGraph {
     }
 
     /**
+     * Update the tab title depending on the status
+     */
+    private static final class SavedStatusTracker implements mxIEventListener {
+        private static final Map<XcosDiagram, SavedStatusTracker> instances = new HashMap<>();
+        private ScicosObjectOwner owner;
+
+        private SavedStatusTracker(final ScicosObjectOwner o) {
+            this.owner = o;
+        }
+
+        public static SavedStatusTracker getInstance(XcosDiagram d) {
+            return instances.putIfAbsent(d, new SavedStatusTracker(Xcos.findRoot(d)));
+        }
+
+        @Override
+        public void invoke(Object sender, mxEventObject eo) {
+            if (sender instanceof XcosGraphModel) {
+                List<XcosDiagram> diagrams = Xcos.getInstance().openedDiagrams(owner);
+                diagrams.stream().forEach(d -> d.updateTabTitle());
+            }
+        }
+
+
+    }
+
+    /**
      * Hook method that creates the new edge for insertEdge. This implementation
      * does not set the source and target of the edge, these are set when the
      * edge is added to the model.
@@ -1101,6 +1119,10 @@ public class XcosDiagram extends ScilabGraph {
         removeListener(RepositionTracker.getInstance());
         getUndoManager().removeListener(UndoUpdateTracker.getInstance());
         removeListener(RefreshBlockTracker.getInstance());
+        getModel().removeListener(SavedStatusTracker.getInstance(this));
+
+        // Update the saved status rendering on modification
+        getModel().addListener(mxEvent.CHANGE, SavedStatusTracker.getInstance(this));
 
         // Track when resizing or moving (droping) a cell.
         addListener(mxEvent.CELLS_RESIZED, RepositionTracker.getInstance());