Xcos GUI: define our own GraphModel 90/17590/1
Clément DAVID [Thu, 17 Dec 2015 14:23:12 +0000 (15:23 +0100)]
On Scilab 5.5 the ID creation were performed on cells but moving it to the
model is much more easier to manage on load / reload.

Change-Id: Ieb22e4543ec76eaa0b815107d22a4cd846c6f98a

scilab/modules/xcos/src/java/org/scilab/modules/xcos/graph/XcosDiagram.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/graph/model/XcosCell.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/graph/model/XcosGraphModel.java [new file with mode: 0644]

index ed2887f..ea21db6 100644 (file)
@@ -14,6 +14,7 @@
 
 package org.scilab.modules.xcos.graph;
 
+import org.scilab.modules.xcos.graph.model.XcosGraphModel;
 import java.awt.GraphicsEnvironment;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
@@ -25,7 +26,6 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashSet;
-import java.util.Hashtable;
 import java.util.IllegalFormatException;
 import java.util.LinkedList;
 import java.util.List;
@@ -105,12 +105,13 @@ import com.mxgraph.model.mxICell;
 import com.mxgraph.util.mxEvent;
 import com.mxgraph.util.mxEventObject;
 import com.mxgraph.util.mxPoint;
-import com.mxgraph.util.mxRectangle;
 import com.mxgraph.util.mxUndoableEdit;
 import com.mxgraph.util.mxUndoableEdit.mxUndoableChange;
 import com.mxgraph.view.mxGraphSelectionModel;
 import com.mxgraph.view.mxMultiplicity;
 import java.lang.reflect.Constructor;
+import java.rmi.server.UID;
+import java.util.Hashtable;
 import org.scilab.modules.types.ScilabString;
 import org.scilab.modules.types.ScilabType;
 import org.scilab.modules.xcos.io.ScilabTypeCoder;
@@ -138,6 +139,7 @@ public class XcosDiagram extends ScilabGraph {
      */
     private static final mxGeometry DEFAULT_LABEL_GEOMETRY = new mxGeometry(0.5, 1.1, 0.0, 0.0);
 
+
     /**
      * Constructor
      *
@@ -147,13 +149,10 @@ public class XcosDiagram extends ScilabGraph {
      * @param uid the string UID that will be used on the default parent
      */
     public XcosDiagram(final JavaController controller, final long diagramId, final Kind kind, String uid) {
-        super(new mxGraphModel(), Xcos.getInstance().getStyleSheet());
+        super(new XcosGraphModel(controller, diagramId, kind, uid), Xcos.getInstance().getStyleSheet());
 
-        // add the default parent (the JGraphX layer)
-        XcosCell parent = new XcosCell(controller, diagramId, kind, null, null, null, uid);
-        controller.referenceObject(diagramId);
-        ((mxICell) getModel().getRoot()).insert(parent);
-        setDefaultParent(parent);
+        // set the default parent (the JGraphX layer) defined on the model
+        setDefaultParent(getModel().getChildAt(getModel().getRoot(), 0));
 
         setComponent(new GraphComponent(this));
         initComponent();
@@ -978,7 +977,7 @@ public class XcosDiagram extends ScilabGraph {
      *
      * This method *must* be used to setup the component after any reassociation.
      */
-    public void initComponent() {
+    public final void initComponent() {
         getAsComponent().setToolTips(true);
 
         // This enable stop editing cells when pressing Enter.
index 6025586..cf30371 100644 (file)
@@ -87,7 +87,7 @@ public class XcosCell extends mxCell {
         setValue(new JavaController(), value);
     }
 
-    public void setValue(JavaController controller, Object value) {
+    public final void setValue(JavaController controller, Object value) {
         super.setValue(value);
         setMVCValue(controller, value);
     }
@@ -121,7 +121,7 @@ public class XcosCell extends mxCell {
         setId(new JavaController(), id);
     }
 
-    public void setId(JavaController controller, String id) {
+    public final void setId(JavaController controller, String id) {
         super.setId(id);
         setMVCId(controller, id);
     }
@@ -153,7 +153,7 @@ public class XcosCell extends mxCell {
         setGeometry(new JavaController(), geometry);
     }
 
-    public void setGeometry(JavaController controller, mxGeometry geometry) {
+    public final void setGeometry(JavaController controller, mxGeometry geometry) {
         super.setGeometry(geometry);
         setMVCGeometry(controller, geometry);
     }
@@ -245,7 +245,7 @@ public class XcosCell extends mxCell {
         setStyle(new JavaController(), style);
     }
 
-    public void setStyle(JavaController controller, String style) {
+    public final void setStyle(JavaController controller, String style) {
         super.setStyle(style);
         setMVCStyle(controller, style);
     }
diff --git a/scilab/modules/xcos/src/java/org/scilab/modules/xcos/graph/model/XcosGraphModel.java b/scilab/modules/xcos/src/java/org/scilab/modules/xcos/graph/model/XcosGraphModel.java
new file mode 100644 (file)
index 0000000..10b4984
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011-2015 - Scilab Enterprises - Clement DAVID
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
+ *
+ */
+
+package org.scilab.modules.xcos.graph.model;
+
+import com.mxgraph.model.mxCell;
+import com.mxgraph.model.mxGraphModel;
+import java.rmi.server.UID;
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
+
+/**
+ * Implement a custom model for Xcos
+ */
+public class XcosGraphModel extends mxGraphModel {
+
+    public XcosGraphModel(JavaController controller, long diagramId, Kind kind, String uid) {
+        super(new mxCell());
+
+        XcosCell parent = new XcosCell(controller, diagramId, kind, null, null, null, uid);
+        ((mxCell) getRoot()).insert(parent);
+    }
+
+    @Override
+    public final String createId(Object cell) {
+        return new UID().toString();
+    }
+
+}