bug 14593 fixed : Signs are no more drawn in BIGSOM and PRODUCT 87/18287/4
Clément DAVID [Tue, 21 Jun 2016 14:29:27 +0000 (16:29 +0200)]
The display modification is no more performed on a specific
PropertyChangeListener but implemented as a hook to ease maintenance. I
also refactored the packages a bit to remove the 'listener' term.

Note: this commit also fix the IPAR tooltip rendering.

Change-Id: Id5f19c3dea3d5f5fe0441b77164bb856631e5fc3

17 files changed:
scilab/CHANGES.md
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/BasicBlock.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/custom/BigSom.java [moved from scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/positionning/BigSom.java with 81% similarity]
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/custom/GroundBlock.java [moved from scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/positionning/GroundBlock.java with 97% similarity]
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/custom/ProdPortLabeler.java [moved from scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/listener/ProdPortLabelingListener.java with 66% similarity]
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/custom/Product.java [moved from scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/positionning/Product.java with 82% similarity]
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/custom/RoundBlock.java [moved from scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/positionning/RoundBlock.java with 97% similarity]
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/custom/SumPortLabeler.java [moved from scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/listener/SumPortLabelingListener.java with 67% similarity]
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/custom/Summation.java [moved from scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/positionning/Summation.java with 81% similarity]
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/custom/VoltageSensorBlock.java [moved from scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/positionning/VoltageSensorBlock.java with 97% similarity]
scilab/modules/xcos/src/java/org/scilab/modules/xcos/graph/XcosDiagram.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/graph/model/BlockInterFunction.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/graph/model/XcosCellFactory.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/codec/BasicBlockCodec.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/codec/XcosCodec.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/sax/BlockHandler.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/utils/BlockPositioning.java

index 036741d..98e1c92 100644 (file)
@@ -233,6 +233,7 @@ Bug Fixes
 * [Bug #14557](http://bugzilla.scilab.org/show_bug.cgi?id=14557) fixed - `csim` failed when the system has no state.
 * [Bug #14586](http://bugzilla.scilab.org/show_bug.cgi?id=14586) fixed - Xcos simulation stop button did not work.
 * [Bug #14587](http://bugzilla.scilab.org/show_bug.cgi?id=14587) fixed - Datatip textbox wrong clipping when loaded from `*.scg` file.
+* [Bug #14593](http://bugzilla.scilab.org/show_bug.cgi?id=14593) fixed - Signs are no more drawn in BIGSOM and PRODUCT components.
 
 ### In 6.0.0 beta-2 and earlier:
 
index bac3b80..2847566 100644 (file)
@@ -149,6 +149,12 @@ public class BasicBlock extends XcosCell implements Serializable {
     private boolean locked;
 
     /**
+     * Hook used to implement specifix behavior after any parameter update and before re-layouting the block
+     */
+    public void updateBlockView() {
+    }
+
+    /**
      * Represent a simulation function type compatible with Scilab/Scicos function type descriptors.
      */
     public static enum SimulationFunctionType {
  *
  */
 
-package org.scilab.modules.xcos.block.positionning;
+package org.scilab.modules.xcos.block.custom;
 
 import com.mxgraph.model.mxGeometry;
 import org.scilab.modules.xcos.JavaController;
 import org.scilab.modules.xcos.Kind;
 import org.scilab.modules.xcos.block.BasicBlock;
-import org.scilab.modules.xcos.block.listener.SumPortLabelingListener;
+import org.scilab.modules.xcos.block.custom.SumPortLabeler;
 
 /**
  * Implement the BIGSOM_f function.
- *
- * This class just install a {@link SumPortLabelingListener} on each instance.
  */
-@SuppressWarnings(value = { "serial" })
 public class BigSom extends BasicBlock {
     /**
      * Default constructor
@@ -35,4 +32,9 @@ public class BigSom extends BasicBlock {
     public BigSom(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
         super(controller, uid, kind, value, geometry, style, id);
     }
+
+    @Override
+    public void updateBlockView() {
+        SumPortLabeler.getInstance().updateLabel(this);
+    }
 }
  *
  */
 
-package org.scilab.modules.xcos.block.listener;
+package org.scilab.modules.xcos.block.custom;
 
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.scilab.modules.types.ScilabDouble;
 import org.scilab.modules.xcos.block.BasicBlock;
 import org.scilab.modules.xcos.port.input.InputPort;
 
 import com.mxgraph.model.mxICell;
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
+import org.scilab.modules.xcos.ObjectProperties;
+import org.scilab.modules.xcos.VectorOfDouble;
+import org.scilab.modules.xcos.VectorOfInt;
 
 /**
- * Change the port label on ipar change.
- *
- * This listener must be installed on "integerParameters" property.
+ * Change the port label accordingly to the ipar values.
  */
-@SuppressWarnings(value = { "serial" })
-public class ProdPortLabelingListener implements PropertyChangeListener,
-    Serializable {
+public class ProdPortLabeler {
 
     private static final String NOT_PRINTED_LABEL = "\u00d7";
-    private static ProdPortLabelingListener instance;
+    private static ProdPortLabeler instance;
 
     /**
      * Default constructor
      */
-    public ProdPortLabelingListener() {
+    public ProdPortLabeler() {
     }
 
     /**
      * @return the shared instance
      */
-    public static ProdPortLabelingListener getInstance() {
+    public static ProdPortLabeler getInstance() {
         if (instance == null) {
-            instance = new ProdPortLabelingListener();
+            instance = new ProdPortLabeler();
         }
         return instance;
     }
@@ -60,15 +57,9 @@ public class ProdPortLabelingListener implements PropertyChangeListener,
      * Change the label of the port according to the integer parameters
      * property.
      *
-     * @param evt
-     *            the event
-     * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
+     * @param source the source of the block
      */
-    @Override
-    public void propertyChange(PropertyChangeEvent evt) {
-        final BasicBlock source = (BasicBlock) evt.getSource();
-        final ScilabDouble data = (ScilabDouble) evt.getNewValue();
-
+    public void updateLabel(final BasicBlock source) {
         /**
          * Get the input port children
          */
@@ -84,19 +75,21 @@ public class ProdPortLabelingListener implements PropertyChangeListener,
         /**
          * Set the ports labels
          */
-        // FIXME
-        //        for (InputPort port : ports) {
-        //            final double gain;
-        //
-        //            if (data.isEmpty()
-        //                    || data.getRealPart().length < port.getOrdering()) {
-        //                gain = 1;
-        //            } else {
-        //                gain = data.getRealPart()[port.getOrdering() - 1][0];
-        //            }
-        //
-        //            port.setValue(getLabel(gain));
-        //        }
+        JavaController controller = new JavaController();
+        VectorOfInt ipar = new VectorOfInt(ports.size());
+        controller.getObjectProperty(source.getUID(), Kind.BLOCK, ObjectProperties.IPAR, ipar);
+
+        for (int i = 0; i < ports.size(); i++) {
+            final int gain;
+
+            if (ipar.size() < i) {
+                gain = 1;
+            } else {
+                gain = ipar.get(i);
+            }
+
+            ports.get(i).setValue(getLabel(gain));
+        }
 
         /**
          * Check if all the values are equal to the default one.
  *
  */
 
-package org.scilab.modules.xcos.block.positionning;
+package org.scilab.modules.xcos.block.custom;
 
 import com.mxgraph.model.mxGeometry;
 import org.scilab.modules.xcos.JavaController;
 import org.scilab.modules.xcos.Kind;
 import org.scilab.modules.xcos.block.BasicBlock;
+import org.scilab.modules.xcos.block.custom.ProdPortLabeler;
 
 /**
  * Implement the PRODUCT_f block.
  */
-@SuppressWarnings(value = { "serial" })
 public class Product extends BasicBlock {
 
     public Product(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
         super(controller, uid, kind, value, geometry, style, id);
     }
+
+    @Override
+    public void updateBlockView() {
+        ProdPortLabeler.getInstance().updateLabel(this);
+    }
 }
@@ -1,7 +1,7 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2010 - DIGITEO - Clement DAVID
- * Copyright (C) 2011-2015 - Scilab Enterprises - Clement DAVID
+ * Copyright (C) 2011-2016 - Scilab Enterprises - Clement DAVID
  *
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
  *
  *
  */
 
-package org.scilab.modules.xcos.block.listener;
+package org.scilab.modules.xcos.block.custom;
 
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.scilab.modules.types.ScilabDouble;
 import org.scilab.modules.xcos.block.BasicBlock;
 import org.scilab.modules.xcos.port.input.InputPort;
 
 import com.mxgraph.model.mxICell;
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
+import org.scilab.modules.xcos.ObjectProperties;
+import org.scilab.modules.xcos.VectorOfDouble;
 
 /**
  * Change the port label on rpar change.
  *
  * This listener must be installed on "integerParameters" property.
  */
-@SuppressWarnings(value = { "serial" })
-public class SumPortLabelingListener implements PropertyChangeListener,
-    Serializable {
+public class SumPortLabeler {
 
     private static final String NOT_PRINTED_LABEL = "+";
-    private static SumPortLabelingListener instance;
+    private static SumPortLabeler instance;
 
     /**
      * Default constructor
      */
-    public SumPortLabelingListener() {
+    public SumPortLabeler() {
     }
 
     /**
      * @return the shared instance
      */
-    public static SumPortLabelingListener getInstance() {
+    public static SumPortLabeler getInstance() {
         if (instance == null) {
-            instance = new SumPortLabelingListener();
+            instance = new SumPortLabeler();
         }
         return instance;
     }
@@ -60,15 +58,9 @@ public class SumPortLabelingListener implements PropertyChangeListener,
      * Change the label of the port according to the integer parameters
      * property.
      *
-     * @param evt
-     *            the event
-     * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
+     * @param source the block to update
      */
-    @Override
-    public void propertyChange(PropertyChangeEvent evt) {
-        final BasicBlock source = (BasicBlock) evt.getSource();
-        final ScilabDouble data = (ScilabDouble) evt.getNewValue();
-
+    public void updateLabel(BasicBlock source) {
         /**
          * Get the input port children
          */
@@ -84,19 +76,21 @@ public class SumPortLabelingListener implements PropertyChangeListener,
         /**
          * Set the ports labels
          */
-        // FIXME
-        //        for (InputPort port : ports) {
-        //            final double gain;
-        //
-        //            if (data.isEmpty()
-        //                    || data.getRealPart().length < port.getOrdering()) {
-        //                gain = 1;
-        //            } else {
-        //                gain = data.getRealPart()[port.getOrdering() - 1][0];
-        //            }
-        //
-        //            port.setValue(getLabel(gain));
-        //        }
+        JavaController controller = new JavaController();
+        VectorOfDouble rpar = new VectorOfDouble(ports.size());
+        controller.getObjectProperty(source.getUID(), Kind.BLOCK, ObjectProperties.RPAR, rpar);
+
+        for (int i = 0; i < ports.size(); i++) {
+            final double gain;
+
+            if (rpar.size() < i) {
+                gain = 1;
+            } else {
+                gain = rpar.get(i);
+            }
+
+            ports.get(i).setValue(getLabel(gain));
+        }
 
         /**
          * Check if all the values are equal to the default one.
  *
  */
 
-package org.scilab.modules.xcos.block.positionning;
+package org.scilab.modules.xcos.block.custom;
 
 import com.mxgraph.model.mxGeometry;
 import org.scilab.modules.xcos.JavaController;
 import org.scilab.modules.xcos.Kind;
 import org.scilab.modules.xcos.block.BasicBlock;
-import org.scilab.modules.xcos.block.listener.SumPortLabelingListener;
+import org.scilab.modules.xcos.block.custom.SumPortLabeler;
 
 /**
  * Implement the SUMMATION function.
- *
- * This class just install a {@link SumPortLabelingListener} on each instance.
  */
-@SuppressWarnings(value = { "serial" })
 public class Summation extends BasicBlock {
 
     /**
@@ -36,4 +33,9 @@ public class Summation extends BasicBlock {
     public Summation(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
         super(controller, uid, kind, value, geometry, style, id);
     }
+
+    @Override
+    public void updateBlockView() {
+        SumPortLabeler.getInstance().updateLabel(this);
+    }
 }
index d1df4db..16f4505 100644 (file)
@@ -1953,6 +1953,7 @@ public class XcosDiagram extends ScilabGraph {
         JavaController controller = new JavaController();
         String[] strValue = {""};
         VectorOfDouble vecValue = new VectorOfDouble();
+        VectorOfInt vecInteger = new VectorOfInt();
 
         StringBuilder result = new StringBuilder();
         result.append(ScilabGraphConstants.HTML_BEGIN);
@@ -1984,9 +1985,9 @@ public class XcosDiagram extends ScilabGraph {
         appendReduced(result, ScilabTypeCoder.toString(vecValue))
         .append(ScilabGraphConstants.HTML_END_CODE).append(ScilabGraphConstants.HTML_NEWLINE);
 
-        controller.getObjectProperty(o.getUID(), o.getKind(), ObjectProperties.IPAR, vecValue);
+        controller.getObjectProperty(o.getUID(), o.getKind(), ObjectProperties.IPAR, vecInteger);
         result.append(XcosMessages.TOOLTIP_BLOCK_IPAR).append(ScilabGraphConstants.HTML_BEGIN_CODE);
-        appendReduced(result, ScilabTypeCoder.toString(vecValue))
+        appendReduced(result, ScilabTypeCoder.toString(vecInteger))
         .append(ScilabGraphConstants.HTML_END_CODE).append(ScilabGraphConstants.HTML_NEWLINE);
 
         controller.getObjectProperty(o.getUID(), o.getKind(), ObjectProperties.OPAR, vecValue);
index f9e235f..fba47cc 100644 (file)
@@ -25,12 +25,12 @@ import org.scilab.modules.xcos.block.io.ExplicitInBlock;
 import org.scilab.modules.xcos.block.io.ExplicitOutBlock;
 import org.scilab.modules.xcos.block.io.ImplicitInBlock;
 import org.scilab.modules.xcos.block.io.ImplicitOutBlock;
-import org.scilab.modules.xcos.block.positionning.BigSom;
-import org.scilab.modules.xcos.block.positionning.GroundBlock;
-import org.scilab.modules.xcos.block.positionning.Product;
-import org.scilab.modules.xcos.block.positionning.RoundBlock;
-import org.scilab.modules.xcos.block.positionning.Summation;
-import org.scilab.modules.xcos.block.positionning.VoltageSensorBlock;
+import org.scilab.modules.xcos.block.custom.BigSom;
+import org.scilab.modules.xcos.block.custom.GroundBlock;
+import org.scilab.modules.xcos.block.custom.Product;
+import org.scilab.modules.xcos.block.custom.RoundBlock;
+import org.scilab.modules.xcos.block.custom.Summation;
+import org.scilab.modules.xcos.block.custom.VoltageSensorBlock;
 
 /**
  * List the specific block interface function name. <BR>
index 8dae111..00a3d9b 100644 (file)
@@ -56,7 +56,7 @@ import com.mxgraph.util.mxPoint;
 import java.lang.reflect.Constructor;
 import java.util.EnumMap;
 import org.scilab.modules.xcos.block.SplitBlock;
-import org.scilab.modules.xcos.block.positionning.RoundBlock;
+import org.scilab.modules.xcos.block.custom.RoundBlock;
 ;
 
 /**
index 2d1a857..4ded1ad 100644 (file)
@@ -76,7 +76,7 @@ public class BasicBlockCodec extends XcosObjectCodec {
 
             mxCodecRegistry.addPackage("org.scilab.modules.xcos.block");
             mxCodecRegistry.addPackage("org.scilab.modules.xcos.block.io");
-            mxCodecRegistry.addPackage("org.scilab.modules.xcos.block.positionning");
+            mxCodecRegistry.addPackage("org.scilab.modules.xcos.block.custom");
 
 
             Map<Class <? extends BasicBlock>, List<BlockInterFunction>> customBlocks = EnumSet.allOf(BlockInterFunction.class).stream()
index 93cfc8f..3d0aa07 100644 (file)
@@ -48,7 +48,7 @@ public class XcosCodec extends mxCodec {
             mxCodecRegistry.addPackage("org.scilab.modules.xcos.graph");
             mxCodecRegistry.addPackage("org.scilab.modules.xcos.block");
             mxCodecRegistry
-            .addPackage("org.scilab.modules.xcos.block.positionning");
+            .addPackage("org.scilab.modules.xcos.block.custom");
             mxCodecRegistry.addPackage("org.scilab.modules.xcos.link");
             mxCodecRegistry
             .addPackage("org.scilab.modules.xcos.link.commandcontrol");
index 3acbdc1..3df4513 100644 (file)
@@ -32,12 +32,12 @@ import org.scilab.modules.xcos.block.io.ExplicitInBlock;
 import org.scilab.modules.xcos.block.io.ExplicitOutBlock;
 import org.scilab.modules.xcos.block.io.ImplicitInBlock;
 import org.scilab.modules.xcos.block.io.ImplicitOutBlock;
-import org.scilab.modules.xcos.block.positionning.BigSom;
-import org.scilab.modules.xcos.block.positionning.GroundBlock;
-import org.scilab.modules.xcos.block.positionning.Product;
-import org.scilab.modules.xcos.block.positionning.RoundBlock;
-import org.scilab.modules.xcos.block.positionning.Summation;
-import org.scilab.modules.xcos.block.positionning.VoltageSensorBlock;
+import org.scilab.modules.xcos.block.custom.BigSom;
+import org.scilab.modules.xcos.block.custom.GroundBlock;
+import org.scilab.modules.xcos.block.custom.Product;
+import org.scilab.modules.xcos.block.custom.RoundBlock;
+import org.scilab.modules.xcos.block.custom.Summation;
+import org.scilab.modules.xcos.block.custom.VoltageSensorBlock;
 import org.scilab.modules.xcos.graph.model.BlockInterFunction;
 import org.scilab.modules.xcos.io.HandledElement;
 import org.xml.sax.Attributes;
index f95345b..9e6aa86 100644 (file)
@@ -410,6 +410,7 @@ public final class BlockPositioning {
         }
 
         diag.getModel().beginUpdate();
+        block.updateBlockView();
         updatePortsPosition(diag, block);
         rotateAllPorts(diag, block);
         diag.getModel().endUpdate();