* SEP #107 implementation (xcosAddToolsMenu and xcosUpdateBlock) 24/5824/20
Clément DAVID [Mon, 13 Feb 2012 09:56:28 +0000 (10:56 +0100)]
Change-Id: Ieb1e56329ddc849c22baa966dc6d7b6fd3d4001a

SEP/INDEX
SEP/SEP_107_xcosAddToolsMenu.odt [new file with mode: 0644]
scilab/CHANGES_5.5.X
scilab/modules/xcos/help/en_US/scilab_utilities_functions/xcosAddToolsMenu.xml [new file with mode: 0644]
scilab/modules/xcos/help/en_US/scilab_utilities_functions/xcosUpdateBlock.xml [new file with mode: 0644]
scilab/modules/xcos/help/fr_FR/scilab_utilities_functions/xcosAddToolsMenu.xml [new file with mode: 0644]
scilab/modules/xcos/help/fr_FR/scilab_utilities_functions/xcosUpdateBlock.xml [new file with mode: 0644]
scilab/modules/xcos/src/java/org/scilab/modules/xcos/actions/ExternalAction.java

index 72bac39..36429c4 100644 (file)
--- a/SEP/INDEX
+++ b/SEP/INDEX
@@ -102,3 +102,4 @@ SEP #103: Localization : allow multiple domains and add addlocalizationdomain fu
 SEP #104: New optional output argument for routh_t (num)
 SEP #105: Three new optional output arguments to optim().
 SEP #106: Error control in function intc.
+SEP #107: Add an xcosAddToolsMenu and xcosUpdateBlock to ease external tools integration.
diff --git a/SEP/SEP_107_xcosAddToolsMenu.odt b/SEP/SEP_107_xcosAddToolsMenu.odt
new file mode 100644 (file)
index 0000000..c894a17
Binary files /dev/null and b/SEP/SEP_107_xcosAddToolsMenu.odt differ
index d1f3098..619b64f 100644 (file)
@@ -145,6 +145,8 @@ Xcos
 * API changed in the scicos_block4 interface: the uid value is not available
   inside the simulation function.
 
+* xcosAddToolsMenu added to let the user perform some actions on the graph.
+
 * Bug #7350 fixed - The I/O ports numbering of a superblock was not updated
                     when a new port was dropped.
 
diff --git a/scilab/modules/xcos/help/en_US/scilab_utilities_functions/xcosAddToolsMenu.xml b/scilab/modules/xcos/help/en_US/scilab_utilities_functions/xcosAddToolsMenu.xml
new file mode 100644 (file)
index 0000000..ec04b41
--- /dev/null
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2012 - Scilab Enterprises - Clément 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-en.txt
+ *
+ -->
+<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns3="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" version="5.0-subset Scilab" xml:id="xcosAddToolsMenu">
+  <refnamediv>
+    <refname>xcosAddToolsMenu</refname>
+    <refpurpose>Add a menu item into the Xcos "Tools" menu.</refpurpose>
+  </refnamediv>
+  <refsynopsisdiv>
+    <title>Calling Sequence</title>
+    <synopsis>xcosAddToolsMenu(label, command)</synopsis>
+  </refsynopsisdiv>
+  <refsection id="Module_xcosAddToolsMenu">
+    <title>Module</title>
+    <itemizedlist>
+      <listitem>
+        <para>
+          <link linkend="xcos">xcos</link>
+        </para>
+      </listitem>
+    </itemizedlist>
+  </refsection>
+  <refsection id="Description_xcosAddToolsMenu">
+    <title>Description</title>
+    <para>Add a menu into Xcos with a scilab command. The scilab command can assume that there is two variable on the current scilab context :</para>
+    <itemizedlist>
+      <listitem>
+        <para>
+          <emphasis role="bold">blk :</emphasis> The selected block. Variable does not exist if nothing is selected. The variable has a <link linkend="scicos_block">scicos_block</link> type.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          <emphasis role="bold">scs_m :</emphasis> The whole diagram. The variable has a <link linkend="scicos_diagram">scicos_diagram</link> type.
+        </para>
+      </listitem>
+    </itemizedlist>
+    <para>This function has been introduced in Scilab 5.4.0.</para>
+    <para>
+      <programlisting role="example"><![CDATA[
+xcosAddToolsMenu("print plop", "disp(''plop'')");
+xcosAddToolsMenu("print selected block", "disp(blk)");
+xcosAddToolsMenu("print diagram", "disp(scs_m)");
+
+// define a custom update function
+function myUpdateFunction(blk, scs_m)
+    execstr(''[ok, blk] = '' + blk.gui + ''(''''set'''', blk)'') ;
+    xcosUpdateBlock(blk) ;
+endfunction
+xcosAddToolsMenu("update block", "myUpdateFunction(blk, scs_m)");
+]]></programlisting>
+    </para>
+  </refsection>
+  <refsection id="SeeAlso_xcosAddToolsMenu">
+    <title>See Also</title>
+    <itemizedlist>
+      <listitem>
+        <para>
+          <link linkend="xcos">xcos</link>
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          <link linkend="xcosUpdateBlock">xcosUpdateBlock - Update a block instance</link>
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          <link linkend="scicos_block">scicos_block.</link>
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          <link linkend="scicos_diagram">scicos_diagram</link>
+        </para>
+      </listitem>
+    </itemizedlist>
+  </refsection>
+  <refsection id="Authors_xcosAddToolsMenu">
+    <title>Authors</title>
+    <para>
+      <emphasis role="bold">Clément David</emphasis> - Scilab Enterprises
+    </para>
+  </refsection>
+</refentry>
diff --git a/scilab/modules/xcos/help/en_US/scilab_utilities_functions/xcosUpdateBlock.xml b/scilab/modules/xcos/help/en_US/scilab_utilities_functions/xcosUpdateBlock.xml
new file mode 100644 (file)
index 0000000..fa4be88
--- /dev/null
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2012 - Scilab Enterprises - Clément 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-en.txt
+ *
+ -->
+<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns3="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" version="5.0-subset Scilab" xml:id="xcosUpdateBlock">
+  <refnamediv>
+    <refname>xcosUpdateBlock</refname>
+    <refpurpose>Update a block instance</refpurpose>
+  </refnamediv>
+  <refsynopsisdiv>
+    <title>Calling Sequence</title>
+    <synopsis>xcosUpdateBlock(blk)</synopsis>
+  </refsynopsisdiv>
+  <refsection id="Module_xcosUpdateBlock">
+    <title>Module</title>
+    <itemizedlist>
+      <listitem>
+        <para>
+          <link linkend="xcos">xcos</link>
+        </para>
+      </listitem>
+    </itemizedlist>
+  </refsection>
+  <refsection id="Description_xcosUpdateBlock">
+    <title>Description</title>
+    <para>Update a block on a currently opened diagram.</para>
+    <itemizedlist>
+      <listitem>
+        <para>
+          <emphasis role="bold">blk :</emphasis> The block to update. The variable has a <link linkend="scicos_block">scicos_block</link> type.
+        </para>
+      </listitem>
+    </itemizedlist>
+    <para>This function has been introduced in Scilab 5.4.0.</para>
+    <para>
+      <programlisting role="example"><![CDATA[
+function myExternalFunction(blk, scs_m)
+    execstr(''[ok, blk] = '' + blk.gui + ''(''''set'''', blk)'') ;
+    xcosUpdateBlock(blk) ;
+endfunction
+xcosAddToolsMenu("update block", "myExternalFunction(blk, scs_m)");
+]]></programlisting>
+    </para>
+  </refsection>
+  <refsection id="SeeAlso_xcosUpdateBlock">
+    <title>See Also</title>
+    <itemizedlist>
+      <listitem>
+        <para>
+          <link linkend="xcos">xcos</link>
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          <link linkend="xcosAddToolsMenu">xcosAddToolsMenu - Add a menu item into the Xcos "Tools" menu</link>
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          <link linkend="scicos_block">scicos_block.</link>
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          <link linkend="scicos_diagram">scicos_diagram</link>
+        </para>
+      </listitem>
+    </itemizedlist>
+  </refsection>
+  <refsection id="Authors_xcosUpdateBlock">
+    <title>Authors</title>
+    <para>
+      <emphasis role="bold">Clément David</emphasis> - Scilab Enterprises
+    </para>
+  </refsection>
+</refentry>
diff --git a/scilab/modules/xcos/help/fr_FR/scilab_utilities_functions/xcosAddToolsMenu.xml b/scilab/modules/xcos/help/fr_FR/scilab_utilities_functions/xcosAddToolsMenu.xml
new file mode 100644 (file)
index 0000000..40e2956
--- /dev/null
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2012 - Scilab Enterprises - Clément 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-en.txt
+ *
+ -->
+<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns3="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" version="5.0-subset Scilab" xml:id="xcosAddToolsMenu">
+  <refnamediv>
+    <refname>xcosAddToolsMenu</refname>
+    <refpurpose>Ajoute un menu au menu "Outils" d'Xcos.</refpurpose>
+  </refnamediv>
+  <refsynopsisdiv>
+    <title>Séquence d'appel</title>
+    <synopsis>xcosAddToolsMenu(label, command)</synopsis>
+  </refsynopsisdiv>
+  <refsection id="Module_xcosAddToolsMenu">
+    <title>Module</title>
+    <itemizedlist>
+      <listitem>
+        <para>
+          <link linkend="xcos">xcos</link>
+        </para>
+      </listitem>
+    </itemizedlist>
+  </refsection>
+  <refsection id="Description_xcosAddToolsMenu">
+    <title>Description</title>
+    <para>Ajoute un menu à Xcos qui exécute une commande scilab. La commande scilab peut utiliser deux variables définies dans le contexte scilab :</para>
+    <itemizedlist>
+      <listitem>
+        <para>
+          <emphasis role="bold">blk :</emphasis> Le bloc sélectionné. La variable n'existe pas si rien n'est sélectionné. La variable à le type <link linkend="scicos_block">scicos_block</link>.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          <emphasis role="bold">scs_m :</emphasis> Le diagramme complet. La variable à le type <link linkend="scicos_diagram">scicos_diagram</link>.
+        </para>
+      </listitem>
+    </itemizedlist>
+    <para>Cette fonction a été introduite en Scilab 5.4.0.</para>
+    <para>
+      <programlisting role="example"><![CDATA[
+xcosAddToolsMenu("affiche plop", "disp(''plop'')");
+xcosAddToolsMenu("affiche le bloc sélectionné", "disp(blk)");
+xcosAddToolsMenu("affiche le diagramme", "disp(scs_m)");
+
+// définition d'un fonction de mise à jour
+function myUpdateFunction(blk, scs_m)
+    execstr(''[ok, blk] = '' + blk.gui + ''(''''set'''', blk)'') ;
+    xcosUpdateBlock(blk) ;
+endfunction
+xcosAddToolsMenu("met à jour le block", "myUpdateFunction(blk, scs_m)");
+]]></programlisting>
+    </para>
+  </refsection>
+  <refsection id="SeeAlso_loadXcos">
+    <title>Voir aussi</title>
+    <itemizedlist>
+      <listitem>
+        <para>
+          <link linkend="xcos">xcos - Editeur de schéma-bloc et IHM pour le simulateur hybride</link>
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          <link linkend="scicos_block">scicos_block - Block type.</link>
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          <link linkend="scicos_diagram">scicos_diagram - Diagram type.</link>
+        </para>
+      </listitem>
+    </itemizedlist>
+  </refsection>
+  <refsection id="Authors_xcosAddToolsMenu">
+    <title>Authors</title>
+    <para>
+      <emphasis role="bold">Clément David</emphasis> - Scilab Enterprises
+    </para>
+  </refsection>
+</refentry>
diff --git a/scilab/modules/xcos/help/fr_FR/scilab_utilities_functions/xcosUpdateBlock.xml b/scilab/modules/xcos/help/fr_FR/scilab_utilities_functions/xcosUpdateBlock.xml
new file mode 100644 (file)
index 0000000..4cca7ef
--- /dev/null
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2012 - Scilab Enterprises - Clément 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-en.txt
+ *
+ -->
+<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns3="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" version="5.0-subset Scilab" xml:id="xcosUpdateBlock">
+  <refnamediv>
+    <refname>xcosUpdateBlock</refname>
+    <refpurpose>Met à jour un bloc.</refpurpose>
+  </refnamediv>
+  <refsynopsisdiv>
+    <title>Séquence d'appel</title>
+    <synopsis>xcosUpdateBlock(blk)</synopsis>
+  </refsynopsisdiv>
+  <refsection id="Module_xcosUpdateBlock">
+    <title>Module</title>
+    <itemizedlist>
+      <listitem>
+        <para>
+          <link linkend="xcos">xcos</link>
+        </para>
+      </listitem>
+    </itemizedlist>
+  </refsection>
+  <refsection id="Description_xcosUpdateBlock">
+    <title>Description</title>
+    <para>Met à jour un bloc dans un diagram ouvert</para>
+    <itemizedlist>
+      <listitem>
+        <para>
+          <emphasis role="bold">blk :</emphasis> Le bloc a mettre à jour. La variable à le type <link linkend="scicos_block">scicos_block</link>.
+        </para>
+      </listitem>
+    </itemizedlist>
+    <para>Cette fonction a été introduite en Scilab 5.4.0.</para>
+    <para>
+      <programlisting role="example"><![CDATA[
+function myExternalFunction(blk, scs_m)
+    execstr(''[ok, blk] = '' + blk.gui + ''(''''set'''', blk)'') ;
+    xcosUpdateBlock(blk) ;
+endfunction
+xcosAddToolsMenu("update block", "myExternalFunction(blk, scs_m)");
+]]></programlisting>
+    </para>
+  </refsection>
+  <refsection id="SeeAlso_loadXcos">
+    <title>Voir aussi</title>
+    <itemizedlist>
+      <listitem>
+        <para>
+          <link linkend="xcosAddToolsMenu">xcosAddToolsMenu - Ajoute un menu au menu "Outils" d'Xcos</link>
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          <link linkend="scicos_block">scicos_block - Block type.</link>
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          <link linkend="scicos_diagram">scicos_diagram - Diagram type.</link>
+        </para>
+      </listitem>
+    </itemizedlist>
+  </refsection>
+  <refsection id="Authors_xcosUpdateBlock">
+    <title>Authors</title>
+    <para>
+      <emphasis role="bold">Clément David</emphasis> - Scilab Enterprises
+    </para>
+  </refsection>
+</refentry>
index a35d3f4..34929e3 100644 (file)
@@ -86,9 +86,13 @@ public final class ExternalAction extends DefaultAction {
         final BasicBlock block;
         final ActionListener callback;
         try {
+            /*
+             * Export the whole diagram, to update all the sub-diagrams on demand.
+             */
+            handler.writeDiagram(graph.getRootDiagram());
 
             /*
-             * First export the selected block
+             * Then export the selected block
              */
             Object cell = graph.getSelectionCell();
             if (cell instanceof BasicBlock) {
@@ -99,11 +103,6 @@ public final class ExternalAction extends DefaultAction {
             }
 
             /*
-             * Export the whole diagram
-             */
-            handler.writeDiagram(graph.getRootDiagram());
-
-            /*
              * Import the updated block
              */
             if (block != null) {