Xcos: set the diagram as modified on parameters modification 89/18989/2
Clément DAVID [Fri, 27 Jan 2017 10:21:39 +0000 (11:21 +0100)]
Change-Id: I32dfeb9b5abc4e92b49ffc189906c713ecb64931

scilab/modules/xcos/src/java/org/scilab/modules/xcos/actions/DebugLevelAction.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/actions/SetContextAction.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/actions/SetupAction.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/actions/dialog/SetupDialog.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/graph/ScicosParameters.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/codec/XcosDiagramCodec.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/scicos/DiagramElement.java

index 6fb9517..95ef2ed 100644 (file)
@@ -22,6 +22,7 @@ import java.awt.event.ActionEvent;
 import org.scilab.modules.graph.ScilabComponent;
 import org.scilab.modules.graph.ScilabGraph;
 import org.scilab.modules.gui.menuitem.MenuItem;
+import org.scilab.modules.xcos.Xcos;
 import org.scilab.modules.xcos.actions.dialog.DebugLevelDialog;
 import org.scilab.modules.xcos.graph.ScicosParameters;
 import org.scilab.modules.xcos.graph.XcosDiagram;
@@ -109,7 +110,7 @@ public final class DebugLevelAction extends SimulationNotRunningAction {
             return;
         }
 
-        final DebugLevelDialog dialog = new DebugLevelDialog(graph.getAsComponent(), new ScicosParameters(graph.getUID(), graph.getKind()));
+        final DebugLevelDialog dialog = new DebugLevelDialog(graph.getAsComponent(), new ScicosParameters(Xcos.findRoot(graph)));
 
         dialog.pack();
         dialog.setVisible(true);
index 59efaa1..3a1e60a 100644 (file)
@@ -22,6 +22,7 @@ import java.awt.event.ActionEvent;
 import org.scilab.modules.graph.ScilabComponent;
 import org.scilab.modules.graph.ScilabGraph;
 import org.scilab.modules.gui.menuitem.MenuItem;
+import org.scilab.modules.xcos.Xcos;
 import org.scilab.modules.xcos.actions.dialog.SetContextDialog;
 import org.scilab.modules.xcos.graph.ScicosParameters;
 import org.scilab.modules.xcos.graph.XcosDiagram;
@@ -79,7 +80,7 @@ public final class SetContextAction extends SimulationNotRunningAction {
             return;
         }
 
-        final SetContextDialog dialog = new SetContextDialog(comp, graph, new ScicosParameters(graph.getUID(), graph.getKind()));
+        final SetContextDialog dialog = new SetContextDialog(comp, graph, new ScicosParameters(Xcos.findRoot(graph)));
 
         dialog.pack();
         dialog.setVisible(true);
index 5ebfef9..3cb9aa7 100644 (file)
@@ -22,6 +22,7 @@ import java.awt.event.ActionEvent;
 import org.scilab.modules.graph.ScilabComponent;
 import org.scilab.modules.graph.ScilabGraph;
 import org.scilab.modules.gui.menuitem.MenuItem;
+import org.scilab.modules.xcos.Xcos;
 import org.scilab.modules.xcos.actions.dialog.SetupDialog;
 import org.scilab.modules.xcos.graph.ScicosParameters;
 import org.scilab.modules.xcos.graph.XcosDiagram;
@@ -79,7 +80,7 @@ public final class SetupAction extends SimulationNotRunningAction {
             return;
         }
 
-        final SetupDialog dialog = new SetupDialog(comp, graph, new ScicosParameters(graph.getUID(), graph.getKind()));
+        final SetupDialog dialog = new SetupDialog(comp, graph, new ScicosParameters(Xcos.findRoot(graph)));
 
         dialog.pack();
         dialog.setVisible(true);
index a472c62..07f02ba 100644 (file)
@@ -485,10 +485,6 @@ public class SetupDialog extends JDialog {
             @Override
             public void actionPerformed(ActionEvent e) {
                 try {
-                    /*
-                     * TODO This logic must be deported to a vetoable
-                     * handler
-                     */
                     int solverSelectedIndex = solver.getSelectedIndex();
 
                     VectorOfDouble v = new VectorOfDouble(8);
index 94f2561..d769931 100644 (file)
@@ -16,6 +16,7 @@
 
 package org.scilab.modules.xcos.graph;
 
+import java.beans.PropertyChangeEvent;
 import java.beans.PropertyVetoException;
 import java.beans.VetoableChangeListener;
 import java.beans.VetoableChangeSupport;
@@ -26,6 +27,8 @@ import org.scilab.modules.xcos.Kind;
 import org.scilab.modules.xcos.ObjectProperties;
 import org.scilab.modules.xcos.VectorOfDouble;
 import org.scilab.modules.xcos.VectorOfString;
+import org.scilab.modules.xcos.Xcos;
+import org.scilab.modules.xcos.graph.model.ScicosObjectOwner;
 import org.scilab.modules.xcos.preferences.XcosOptions;
 
 /**
@@ -103,8 +106,7 @@ public class ScicosParameters implements Serializable, Cloneable {
     /**
      * Reference to the diagram
      */
-    private final long uid;
-    private final Kind kind;
+    private final ScicosObjectOwner root;
 
     /*
      * Beans support, used to follow instance modification and validate changes.
@@ -115,23 +117,29 @@ public class ScicosParameters implements Serializable, Cloneable {
      * Default constructor
      *
      * Initialize parameters with their default values.
+     * @param root the diagram
      */
-    public ScicosParameters(final long uid, final Kind kind) {
-        this.uid = uid;
-        this.kind = kind;
+    public ScicosParameters(final ScicosObjectOwner root) {
+        this.root = root;
 
         /*
          * This call will update static values from the configuration.
          */
         XcosOptions.getSimulation();
+
+        // install the modification handler
+        vcs.addVetoableChangeListener((PropertyChangeEvent evt) -> {
+            Xcos.getInstance().setModified(root, true);
+            Xcos.getInstance().openedDiagrams(root).stream().forEach(d -> d.updateTabTitle());
+        });
     }
 
     public long getUID() {
-        return uid;
+        return root.getUID();
     }
 
     public Kind getKind() {
-        return kind;
+        return root.getKind();
     }
 
     /**
@@ -219,60 +227,4 @@ public class ScicosParameters implements Serializable, Cloneable {
         vcs.fireVetoableChange(DEBUG_LEVEL_CHANGE, oldValue, debugLevel);
         controller.setObjectProperty(getUID(), getKind(), ObjectProperties.DEBUG_LEVEL, debugLevel);
     }
-
-    /*
-     * VetoableChangeSupport proxy methods
-     */
-
-    /**
-     * Each setXXX method fire a vetoable change event. This method register a new listener for all events.
-     *
-     * @param listener
-     *            A listener
-     */
-    public void addVetoableChangeListener(VetoableChangeListener listener) {
-        this.vcs.addVetoableChangeListener(listener);
-    }
-
-    /**
-     * Each setXXX method fire a vetoable change event. This method register a new listener for a specific event. Each event name is equal to the field name.
-     *
-     * @param propertyName
-     *            the property name
-     * @param listener
-     *            A listener
-     */
-    public void addVetoableChangeListener(String propertyName, VetoableChangeListener listener) {
-        this.vcs.addVetoableChangeListener(propertyName, listener);
-    }
-
-    /**
-     * Each setXXX method fire a vetoable change event. This method remove a listener for all events.
-     *
-     * @param listener
-     *            A listener
-     */
-    public void removeVetoableChangeListener(VetoableChangeListener listener) {
-        this.vcs.removeVetoableChangeListener(listener);
-    }
-
-    /**
-     * Each setXXX method fire a vetoable change event. This method remove a listener for a specific event. Each event name is equal to the field name.
-     *
-     * @param propertyName
-     *            the property name
-     * @param listener
-     *            A listener
-     */
-    public void removeVetoableChangeListener(String propertyName, VetoableChangeListener listener) {
-        this.vcs.removeVetoableChangeListener(propertyName, listener);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public Object clone() throws CloneNotSupportedException {
-        return super.clone();
-    }
 }
index f9259fe..54b4274 100644 (file)
@@ -187,7 +187,7 @@ public class XcosDiagramCodec extends ScilabGraphCodec {
         Field field;
         try {
             field = ScicosParameters.class.getDeclaredField(fieldname);
-            ScicosParameters params = new ScicosParameters(((XcosDiagram) obj).getUID(), ((XcosDiagram) obj).getKind());
+            ScicosParameters params = new ScicosParameters(Xcos.findRoot((XcosDiagram) obj));
             super.setFieldValue(params, fieldname, value);
         } catch (SecurityException e) {
             field = null;
index 564f935..cc02f93 100644 (file)
@@ -31,6 +31,7 @@ import org.scilab.modules.types.ScilabString;
 import org.scilab.modules.types.ScilabTList;
 import org.scilab.modules.types.ScilabType;
 import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Xcos;
 import org.scilab.modules.xcos.block.BasicBlock;
 import org.scilab.modules.xcos.block.SuperBlock;
 import org.scilab.modules.xcos.block.io.ContextUpdate.IOBlocks;
@@ -191,7 +192,7 @@ public final class DiagramElement extends AbstractElement<XcosDiagram> {
 
         // Fill the diagram attributes
         ScicosParametersElement params = new ScicosParametersElement(controller);
-        params.decode(base.get(1), new ScicosParameters(diag.getUID(), diag.getKind()));
+        params.decode(base.get(1), new ScicosParameters(Xcos.findRoot(diag)));
 
         // Decode the objs attributes
         decodeObjs(diag);