* Bug #15284 fixed: Port names are not set to the corresponding I/O block labels. 60/20560/2
Clément DAVID [Wed, 26 Sep 2018 09:12:40 +0000 (11:12 +0200)]
This commit also fix some issues while editing the labels through the
EditFormat UI and through the graph text editor (double click on the
label to edit).

Change-Id: Ia59430129ab366817b9964ddc825efa59e490f52

scilab/CHANGES.md
scilab/modules/xcos/src/java/org/scilab/modules/xcos/Xcos.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/actions/EditFormatAction.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/sax/BlockHandler.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/sax/JGraphXHandler.java

index 3473b7e..3318784 100644 (file)
@@ -529,6 +529,7 @@ Known issues
 * [#15187](http://bugzilla.scilab.org/show_bug.cgi?id=15187): Super block diagram title (on the window bar) was not set.
 * [#15263](http://bugzilla.scilab.org/show_bug.cgi?id=15263): Assignments in an array of structures often overwrote some untargeted elements.
 * [#15279](http://bugzilla.scilab.org/show_bug.cgi?id=15279): `unique` could not be used on sets of complex numbers.
+* [#15284](http://bugzilla.scilab.org/show_bug.cgi?id=15284): Port names are not set to the corresponding I/O block labels.
 * [#15310](http://bugzilla.scilab.org/show_bug.cgi?id=15310): `isdef` considered void arguments as defined (regression)
 * [#15346](http://bugzilla.scilab.org/show_bug.cgi?id=15346): In an array of rationals, there was no way to address components with their linearized indices.
 * [#15404](http://bugzilla.scilab.org/show_bug.cgi?id=15404): `surf()` and `mesh()` did not allow to specify `foreground`, `facecolor`, `markforeground` and `markbackground` global properties colors as a predefined named color out of a list of the 9 main color names. Colors specifications as "#RRGGBB" hexa code or Colors indices in the color map were nor allowed.
index 15a82aa..3515342 100644 (file)
@@ -3,6 +3,7 @@
  * Copyright (C) 2009 - DIGITEO - Bruno JOFRET
  * Copyright (C) 2010 - DIGITEO - Clement DAVID
  * Copyright (C) 2011-2017 - Scilab Enterprises - Clement DAVID
+ * Copyright (C) 2017-2018 - ESI Group - Clement DAVID
  *
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
  *
@@ -22,7 +23,6 @@ import java.io.File;
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -54,7 +54,6 @@ import org.scilab.modules.gui.tabfactory.ScilabTabFactory;
 import org.scilab.modules.gui.utils.BarUpdater;
 import org.scilab.modules.gui.utils.ClosingOperationsManager;
 import org.scilab.modules.gui.utils.WindowsConfigurationManager;
-import org.scilab.modules.localization.Messages;
 import org.scilab.modules.xcos.actions.ExternalAction;
 import org.scilab.modules.xcos.actions.StopAction;
 import org.scilab.modules.xcos.configuration.ConfigurationManager;
@@ -75,6 +74,7 @@ import com.mxgraph.view.mxStylesheet;
 import javax.swing.Timer;
 import org.scilab.modules.commons.ScilabCommons;
 import org.scilab.modules.xcos.graph.model.ScicosObjectOwner;
+import org.scilab.modules.xcos.graph.model.XcosCell;
 import org.scilab.modules.xcos.graph.model.XcosGraphModel;
 
 /**
@@ -1051,20 +1051,30 @@ public final class Xcos {
 
     /**
      * Look for the parent diagram of the cell in the diagram hierarchy.
-     *
-     * @param cell
-     *            the cell to search for
+     * @param controller
+     *            the shared controller
+     * @param uid
+     *            the cell UID to search for
+     * @param kind
+     *            the cell Kind to search for
      * @return the associated diagram
      */
-    public static XcosDiagram findParent(Object cell) {
+    public static XcosDiagram findParent(JavaController controller, long uid, Kind kind) {
         final Xcos instance = getInstance();
 
+        long[] parent = {0};
+
+        // use parent / children model property
+        controller.getObjectProperty(uid, kind, ObjectProperties.PARENT_BLOCK, parent);
+        if (parent[0] == 0) {
+            controller.getObjectProperty(uid, kind, ObjectProperties.PARENT_DIAGRAM, parent);
+        }
+
         for (Collection<XcosDiagram> diags : instance.diagrams.values()) {
             for (XcosDiagram diag : diags) {
-                final mxGraphModel model = (mxGraphModel) diag.getModel();
+                final Object defaultParent = diag.getDefaultParent();
 
-                // use the O(1) lookup
-                if (cell instanceof mxICell && model.getCell(((mxICell) cell).getId()) != null) {
+                if (defaultParent instanceof XcosCell && ((XcosCell) defaultParent).getUID() == parent[0]) {
                     return diag;
                 }
             }
index 3275c68..869a297 100644 (file)
@@ -49,13 +49,21 @@ import org.scilab.modules.xcos.utils.XcosMessages;
 
 import com.mxgraph.model.mxCell;
 import com.mxgraph.model.mxGraphModel;
+import com.mxgraph.model.mxICell;
 import com.mxgraph.util.mxConstants;
 import com.mxgraph.util.mxEvent;
 import com.mxgraph.util.mxEventObject;
 import com.mxgraph.util.mxUtils;
-import javax.swing.AbstractAction;
-import org.scilab.modules.localization.Messages;
-import org.scilab.modules.xcos.block.BasicBlock;
+import java.util.List;
+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.Xcos;
+import org.scilab.modules.xcos.block.SuperBlock;
+import org.scilab.modules.xcos.block.io.ContextUpdate;
+import org.scilab.modules.xcos.graph.model.XcosCell;
+import org.scilab.modules.xcos.graph.model.XcosGraphModel;
 
 /**
  * Customize the block representation.
@@ -370,11 +378,47 @@ public final class EditFormatAction extends DefaultAction {
         }
         oneliner = str.toString();
 
+        //
+        // Update the cell value and cell identifier value (related annotation)
+        //
+
         graph.cellLabelChanged(cell, oneliner, false);
         graph.fireEvent(new mxEventObject(mxEvent.LABEL_CHANGED, "cell", cell, "value", text, "parent", cell.getParent()));
 
         graph.cellLabelChanged(identifier, text, false);
         graph.fireEvent(new mxEventObject(mxEvent.LABEL_CHANGED, "cell", identifier, "value", text, "parent", cell));
+
+        //
+        // Update the corresponding port if the block is an I/O block
+        //
+        if (cell instanceof ContextUpdate) {
+            JavaController controller = new JavaController();
+
+            VectorOfDouble ipar = new VectorOfDouble();
+            controller.getObjectProperty(((ContextUpdate) cell).getUID(), Kind.BLOCK, ObjectProperties.IPAR, ipar);
+            int portNumber = (int) (ipar.size() > 0 ? ipar.get(0) : 1);
+
+            XcosCell parent = (XcosCell) graph.getDefaultParent();
+            XcosDiagram parentGraph = Xcos.findParent(controller, parent.getUID(), parent.getKind());
+            if (parentGraph != null) {
+                String[] jgraphxID = {""};
+                controller.getObjectProperty(parent.getUID(), parent.getKind(), ObjectProperties.UID, jgraphxID);
+
+                XcosGraphModel parentModel = (XcosGraphModel) parentGraph.getModel();
+                Object superBlock = parentModel.getCell(jgraphxID[0]);
+                if (superBlock instanceof SuperBlock) {
+                    List<mxICell> ports = ContextUpdate.IOBlocks.getPorts((SuperBlock) superBlock, (Class<? extends ContextUpdate>) cell.getClass());
+
+                    if (ports.size() >= portNumber) {
+                        mxICell port = ports.get(portNumber - 1);
+                        parentGraph.cellLabelChanged(port, oneliner, false);
+                        parentGraph.fireEvent(new mxEventObject(mxEvent.LABEL_CHANGED, "cell", port, "value", text, "parent", superBlock));
+                    }
+                }
+
+            }
+
+        }
     }
 
     // CSON: NPathComplexity
@@ -522,7 +566,7 @@ public final class EditFormatAction extends DefaultAction {
         private javax.swing.JScrollPane jScrollPane1;
         private javax.swing.JTabbedPane mainTab;
         private javax.swing.JTextField labelArea;
-        private javax.swing.JTextArea textArea;
+        private javax.swing.JTextPane textArea;
         private javax.swing.JPanel textFormat;
 
         private javax.swing.JButton cancelButton;
@@ -696,13 +740,10 @@ public final class EditFormatAction extends DefaultAction {
             labelArea.setToolTipText(XcosMessages.ONELINE_DESCRIPTION_TOOLTIP);
 
             jScrollPane1 = new javax.swing.JScrollPane();
-            textArea = new javax.swing.JTextArea();
+            textArea = new javax.swing.JTextPane();
             textArea.setToolTipText(XcosMessages.MULTILINE_DESCRIPTION_TOOLTIP);
 
-            textArea.setColumns(TEXT_AREA_COLUMNS);
-            textArea.setRows(TEXT_AREA_ROWS);
-            textArea.setLineWrap(true);
-            textArea.setWrapStyleWord(true);
+            textArea.setContentType("text/html");
 
             cancelButton = new javax.swing.JButton(XcosMessages.CANCEL);
             okButton = new javax.swing.JButton(XcosMessages.OK);
@@ -843,7 +884,7 @@ public final class EditFormatAction extends DefaultAction {
                     graph.getModel().beginUpdate();
                     EditFormatAction.updateFromDialog(getDialog(), borderColorChooser.getColor(), backgroundColorChooser.getColor(),
                                                       (String) fontNameComboBox.getSelectedItem(), (Integer) fontSizeSpinner.getValue(), textColorChooser.getColor(),
-                                                      fontStyleBold.isSelected(), fontStyleItalic.isSelected(), labelArea.getText(), textArea.getText(), imagePath.getText());
+                                                      fontStyleBold.isSelected(), fontStyleItalic.isSelected(), labelArea.getText(), mxUtils.getBodyMarkup(textArea.getText(), false), imagePath.getText());
                     graph.getModel().endUpdate();
                     getDialog().dispose();
                 }
index 7acee5e..c802788 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2015-2015 - Scilab Enterprises - Clement DAVID
- * Copyright (C) 2017 - ESI Group - Clement DAVID
+ * Copyright (C) 2017-2018 - ESI Group - Clement DAVID
  *
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
  *
@@ -44,6 +44,8 @@ import org.scilab.modules.xcos.graph.model.BlockInterFunction;
 import org.scilab.modules.xcos.io.HandledElement;
 import org.xml.sax.Attributes;
 
+import com.mxgraph.util.mxUtils;
+
 class BlockHandler implements ScilabHandler {
     private static Pattern validCIdentifier = null;
 
@@ -76,6 +78,10 @@ class BlockHandler implements ScilabHandler {
         if (value != null && validCIdentifier.matcher(value).matches()) {
             saxHandler.controller.setObjectProperty(uid, kind, ObjectProperties.DESCRIPTION, value);
         }
+        if (value != null) {
+            // escape any html style / head
+            value = mxUtils.getBodyMarkup(value, false);
+        }
 
         String style = atts.getValue("style");
         if (style != null) {
index b753232..644133b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2015-2017 - Scilab Enterprises - Clement DAVID
- * Copyright (C) 2017 - ESI Group - Clement DAVID
+ * Copyright (C) 2017-2018 - ESI Group - Clement DAVID
  *
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
  *
@@ -24,6 +24,8 @@ import org.xml.sax.Attributes;
 
 import com.mxgraph.model.mxGeometry;
 import com.mxgraph.util.mxPoint;
+import com.mxgraph.util.mxUtils;
+
 import java.nio.DoubleBuffer;
 import java.nio.LongBuffer;
 import java.util.ArrayList;
@@ -184,7 +186,7 @@ class JGraphXHandler implements ScilabHandler {
         final long uid = saxHandler.controller.createObject(kind);
         String value = atts.getValue("value");
         if (value != null) {
-            saxHandler.controller.setObjectProperty(uid, kind, ObjectProperties.DESCRIPTION, value);
+            saxHandler.controller.setObjectProperty(uid, kind, ObjectProperties.DESCRIPTION, mxUtils.getBodyMarkup(value, false));
         }
         String style = atts.getValue("style");
         if (style != null) {