Xcos: xcosPalGenerateAllIcons did not works with user palette 37/12637/2
Clément DAVID [Mon, 23 Sep 2013 14:51:02 +0000 (16:51 +0200)]
This regression was introduced by a40a924533dd3d9198fbaba22c81944220ddc9a4

Change-Id: Idd43b92e882a72f4ff83c6e456eb41dbd72a636a

14 files changed:
scilab/modules/xcos/Makefile.am
scilab/modules/xcos/Makefile.in
scilab/modules/xcos/includes/gw_xcos.h
scilab/modules/xcos/macros/xcosPalGenerateAllIcons.sci
scilab/modules/xcos/sci_gateway/c/gw_xcos.c
scilab/modules/xcos/sci_gateway/cpp/sci_xcosPalGet.cpp [new file with mode: 0644]
scilab/modules/xcos/sci_gateway/xcos_gateway.xml
scilab/modules/xcos/src/c/xcos.vcxproj
scilab/modules/xcos/src/c/xcos.vcxproj.filters
scilab/modules/xcos/src/java/org/scilab/modules/xcos/palette/Palette.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/palette/PreLoadedElement.java
scilab/modules/xcos/src/jni/Palette.cpp
scilab/modules/xcos/src/jni/Palette.giws.xml
scilab/modules/xcos/src/jni/Palette.hxx

index a384531..cb91c78 100644 (file)
@@ -65,6 +65,7 @@ GATEWAY_CXX_SOURCES = \
        sci_gateway/cpp/sci_xcosPalEnable.cpp \
        sci_gateway/cpp/sci_xcosPalDisable.cpp \
        sci_gateway/cpp/sci_xcosPalGenerateIcon.cpp \
+       sci_gateway/cpp/sci_xcosPalGet.cpp \
        sci_gateway/cpp/sci_xcosConfigureXmlFile.cpp \
        sci_gateway/cpp/sci_xcosAddToolsMenu.cpp \
        sci_gateway/cpp/sci_xcosUpdateBlock.cpp \
index c410d0c..68e1fdd 100644 (file)
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.13.3 from Makefile.am.
+# Makefile.in generated by automake 1.14 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994-2013 Free Software Foundation, Inc.
@@ -198,6 +198,7 @@ am__objects_4 = libscixcos_la-sci_Xcos.lo \
        libscixcos_la-sci_xcosPalEnable.lo \
        libscixcos_la-sci_xcosPalDisable.lo \
        libscixcos_la-sci_xcosPalGenerateIcon.lo \
+       libscixcos_la-sci_xcosPalGet.lo \
        libscixcos_la-sci_xcosConfigureXmlFile.lo \
        libscixcos_la-sci_xcosAddToolsMenu.lo \
        libscixcos_la-sci_xcosUpdateBlock.lo \
@@ -606,6 +607,7 @@ GATEWAY_CXX_SOURCES = \
        sci_gateway/cpp/sci_xcosPalEnable.cpp \
        sci_gateway/cpp/sci_xcosPalDisable.cpp \
        sci_gateway/cpp/sci_xcosPalGenerateIcon.cpp \
+       sci_gateway/cpp/sci_xcosPalGet.cpp \
        sci_gateway/cpp/sci_xcosConfigureXmlFile.cpp \
        sci_gateway/cpp/sci_xcosAddToolsMenu.cpp \
        sci_gateway/cpp/sci_xcosUpdateBlock.cpp \
@@ -1143,6 +1145,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixcos_la-sci_xcosPalDisable.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixcos_la-sci_xcosPalEnable.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixcos_la-sci_xcosPalGenerateIcon.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixcos_la-sci_xcosPalGet.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixcos_la-sci_xcosPalLoad.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixcos_la-sci_xcosPalMove.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixcos_la-sci_xcosSimulationStarted.Plo@am__quote@
@@ -1309,6 +1312,13 @@ libscixcos_la-sci_xcosPalGenerateIcon.lo: sci_gateway/cpp/sci_xcosPalGenerateIco
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixcos_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscixcos_la-sci_xcosPalGenerateIcon.lo `test -f 'sci_gateway/cpp/sci_xcosPalGenerateIcon.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_xcosPalGenerateIcon.cpp
 
+libscixcos_la-sci_xcosPalGet.lo: sci_gateway/cpp/sci_xcosPalGet.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixcos_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscixcos_la-sci_xcosPalGet.lo -MD -MP -MF $(DEPDIR)/libscixcos_la-sci_xcosPalGet.Tpo -c -o libscixcos_la-sci_xcosPalGet.lo `test -f 'sci_gateway/cpp/sci_xcosPalGet.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_xcosPalGet.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libscixcos_la-sci_xcosPalGet.Tpo $(DEPDIR)/libscixcos_la-sci_xcosPalGet.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='sci_gateway/cpp/sci_xcosPalGet.cpp' object='libscixcos_la-sci_xcosPalGet.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixcos_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscixcos_la-sci_xcosPalGet.lo `test -f 'sci_gateway/cpp/sci_xcosPalGet.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_xcosPalGet.cpp
+
 libscixcos_la-sci_xcosConfigureXmlFile.lo: sci_gateway/cpp/sci_xcosConfigureXmlFile.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixcos_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscixcos_la-sci_xcosConfigureXmlFile.lo -MD -MP -MF $(DEPDIR)/libscixcos_la-sci_xcosConfigureXmlFile.Tpo -c -o libscixcos_la-sci_xcosConfigureXmlFile.lo `test -f 'sci_gateway/cpp/sci_xcosConfigureXmlFile.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_xcosConfigureXmlFile.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libscixcos_la-sci_xcosConfigureXmlFile.Tpo $(DEPDIR)/libscixcos_la-sci_xcosConfigureXmlFile.Plo
index fc04ff8..f455178 100644 (file)
@@ -38,6 +38,7 @@ int sci_xcosAddToolsMenu(char *fname, unsigned long l);
 int sci_xcosUpdateBlock(char *fname, unsigned long l);
 int sci_loadXcos(char *fname, unsigned long l);
 int sci_xcosSimulationStarted(char *fname, unsigned long l);
+int sci_xcosPalGet(char *fname, unsigned long l);
 
 /*--------------------------------------------------------------------------*/
 /**
index 8c2b780..5675458 100644 (file)
@@ -26,25 +26,16 @@ function blocks = xcosPalGenerateAllIcons(path)
     end
 
     // 3. check the argument validity
-    queryStr = strcat("node[@name=''"+path+"'']", "/")
-    doc=xmlRead("SCI/modules/xcos/etc/palettes.xml");
-    q=xmlXPath(doc.root, queryStr + "//block");
+    xcosPalGet(path); // will push a 'pal' mlist
 
-    if (length(q) <= 0) then
+    if size(pal.blockNames, "*") <= 0 then
         error(sprintf(gettext("%s: Wrong value for input argument #%d: No block found.\n"), "xcosPalGenerateAllIcons" ,1));
     end
 
     blocks = [];
-    for i=1:length(q)
-        name = q(i).attributes.name;
-        xmlPath = q(i).children(1).attributes;
-
-        // define the icon path
-        iconPath = "";
-        if isdef(xmlPath.variable) then
-            iconPath = evstr(xmlPath.variable);
-        end
-        iconPath = iconPath + xmlPath.path;
+    for i=1:size(pal.blockNames, "*")
+        name = pal.blockNames(i);
+        iconPath = pal.icons(i);
 
         // load the block
         execstr("blk="+name+"(''define'');");
@@ -59,6 +50,4 @@ function blocks = xcosPalGenerateAllIcons(path)
 
         blocks($+1) = name;
     end
-
-    xmlDelete(doc);
 endfunction
index beee769..8dfefca 100644 (file)
@@ -43,6 +43,7 @@ static gw_generic_table Tab[] =
     {sci_xcosUpdateBlock, "xcosUpdateBlock"},
     {sci_loadXcos, "loadXcos"},
     {sci_xcosSimulationStarted, "xcosSimulationStarted"},
+    {sci_xcosPalGet, "xcosPalGet"},
 };
 
 /*--------------------------------------------------------------------------*/
diff --git a/scilab/modules/xcos/sci_gateway/cpp/sci_xcosPalGet.cpp b/scilab/modules/xcos/sci_gateway/cpp/sci_xcosPalGet.cpp
new file mode 100644 (file)
index 0000000..0140991
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) Scilab Enterprises - 2013 - 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.1-en.txt
+ *
+ */
+
+#include "Palette.hxx"
+#include "GiwsException.hxx"
+#include "xcosUtilities.hxx"
+
+extern "C"
+{
+#include "gw_xcos.h"
+#include "api_scilab.h"
+#include "localization.h"
+#include "Scierror.h"
+#include "MALLOC.h"
+#include "getScilabJavaVM.h"
+}
+
+using namespace org_scilab_modules_xcos_palette;
+
+int sci_xcosPalGet(char *fname, unsigned long fname_len)
+{
+    CheckRhs(1, 1);
+    CheckLhs(0, 1);
+
+    int lenCategory = 0;
+    char **category = NULL;
+
+    /* category setup */
+    if (readVectorString(pvApiCtx, 1, &category, &lenCategory, fname))
+    {
+        return 0;
+    }
+
+    /* Call the java implementation */
+    try
+    {
+        Palette::get(getScilabJavaVM(), category, lenCategory);
+    }
+    catch (GiwsException::JniCallMethodException &exception)
+    {
+        Scierror(999, "%s: %s\n", fname, exception.getJavaDescription().c_str());
+        return 0;
+    }
+    catch (GiwsException::JniException &exception)
+    {
+        Scierror(999, "%s: %s\n", fname, exception.whatStr().c_str());
+        return 0;
+    }
+
+    PutLhsVar();
+    return 0;
+}
+
index ebca3e3..bb2251c 100644 (file)
@@ -37,4 +37,5 @@
     <PRIMITIVE gatewayId="64" primitiveId="14" primitiveName="xcosUpdateBlock"/>
     <PRIMITIVE gatewayId="64" primitiveId="15" primitiveName="loadXcos"/>
     <PRIMITIVE gatewayId="64" primitiveId="16" primitiveName="xcosSimulationStarted"/>
+    <PRIMITIVE gatewayId="64" primitiveId="17" primitiveName="xcosPalGet"/>
 </GATEWAY>
index ac957e2..688db65 100644 (file)
     <ClCompile Include="..\..\sci_gateway\cpp\sci_xcosPalGenerateIcon.cpp" />
     <ClCompile Include="..\..\sci_gateway\cpp\sci_xcosPalLoad.cpp" />
     <ClCompile Include="..\..\sci_gateway\cpp\sci_xcosPalMove.cpp" />
+    <ClCompile Include="..\..\sci_gateway\cpp\sci_xcosPalGet.cpp" />
     <ClCompile Include="..\..\sci_gateway\cpp\sci_xcosAddToolsMenu.cpp" />
     <ClCompile Include="..\..\sci_gateway\cpp\sci_xcosUpdateBlock.cpp" />
     <ClCompile Include="..\..\sci_gateway\cpp\sci_loadXcos.cpp" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
-</Project>
\ No newline at end of file
+</Project>
index d734e89..67fe8fe 100644 (file)
@@ -71,6 +71,9 @@
     <ClCompile Include="..\..\sci_gateway\cpp\sci_xcosPalMove.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\sci_gateway\cpp\sci_xcosPalGet.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
     <ClCompile Include="..\jni\Xcos.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
index 9967b63..b6f7993 100644 (file)
@@ -19,25 +19,35 @@ import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Deque;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import javax.imageio.ImageIO;
 import javax.swing.SwingUtilities;
+import javax.swing.tree.TreeNode;
 
+import org.apache.xmlgraphics.image.loader.impl.PreloaderBMP;
 import org.scilab.modules.graph.utils.ScilabExported;
 import org.scilab.modules.javasci.JavasciException;
 import org.scilab.modules.javasci.Scilab;
 import org.scilab.modules.localization.Messages;
+import org.scilab.modules.types.ScilabDouble;
+import org.scilab.modules.types.ScilabList;
+import org.scilab.modules.types.ScilabMList;
 import org.scilab.modules.types.ScilabTList;
+import org.scilab.modules.types.ScilabType;
 import org.scilab.modules.xcos.Xcos;
 import org.scilab.modules.xcos.block.BasicBlock;
 import org.scilab.modules.xcos.graph.XcosDiagram;
 import org.scilab.modules.xcos.io.scicos.ScicosFormatException;
 import org.scilab.modules.xcos.io.scicos.ScilabDirectHandler;
 import org.scilab.modules.xcos.palette.model.Category;
+import org.scilab.modules.xcos.palette.model.Custom;
 import org.scilab.modules.xcos.palette.model.PaletteBlock;
 import org.scilab.modules.xcos.palette.model.PaletteNode;
 import org.scilab.modules.xcos.palette.model.PreLoaded;
@@ -254,6 +264,80 @@ public final class Palette {
     }
 
     /**
+     * Push a block list into Scilab.
+     *
+     * The block list is pushed into a "pal" variable, a pseudo palette.
+     *
+     * @param path the path used to export the palette tree
+     * @throws JavasciException on pushing error
+     * @throws InterruptedException on wait error
+     * @throws InvocationTargetException on palette creation
+     */
+    @ScilabExported(module = XCOS, filename = PALETTE_GIWS_XML)
+    public static void get(final String[] path) throws JavasciException, InvocationTargetException, InterruptedException {
+        SwingUtilities.invokeAndWait(new Runnable() {
+            @Override
+            public void run() {
+                PaletteNode root = getPathNode(path, false);
+
+                /*
+                 * Create a pseudo palette
+                 */
+                final PreLoaded pal;
+                if (root instanceof PreLoaded) {
+                    pal = (PreLoaded) root;
+                } else if (root instanceof Category) {
+                    LinkedList<Category> stash = new LinkedList<Category>();
+                    stash.add((Category) root);
+
+                    pal = new PreLoaded();
+                    pal.setName(root.getName());
+                    pal.getBlock().addAll(list(stash, pal));
+                } else {
+                    pal = null;
+                }
+
+
+                /*
+                 * Encode the pseudo-palette into a ScilabType
+                 */
+                final ScilabType element;
+                if (pal != null) {
+                    final PreLoadedElement encoder = new PreLoadedElement();
+                    element = encoder.encode(pal, null);
+                } else {
+                    element = new ScilabDouble();
+                }
+
+                try {
+                    Scilab.putInCurrentScilabSession("pal", element);
+                } catch (JavasciException e) {
+                    throw new RuntimeException(e);
+                }
+
+            }
+        });
+    }
+
+    private static List<PaletteBlock> list(Deque<Category> stash, PreLoaded pal) {
+        final ArrayList<PaletteBlock> blocks = new ArrayList<PaletteBlock>();
+        while (!stash.isEmpty()) {
+            final Category c = stash.pop();
+            for (PaletteNode n : c.getNode()) {
+                if (n instanceof Category) {
+                    stash.add((Category) n);
+                } else if (n instanceof PreLoaded) {
+                    final PreLoaded p = (PreLoaded) n;
+                    blocks.addAll(p.getBlock());
+                }
+
+            }
+
+        }
+        return blocks;
+    }
+
+    /**
      * Add a category into the palette manager
      *
      * @param name
index 03d51bf..a36a492 100644 (file)
@@ -15,12 +15,19 @@ package org.scilab.modules.xcos.palette;
 import static java.util.Arrays.asList;
 
 import java.io.File;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
 
 import org.scilab.modules.action_binding.highlevel.ScilabInterpreterManagement;
+import org.scilab.modules.graph.utils.StyleMap;
+import org.scilab.modules.types.ScilabList;
+import org.scilab.modules.types.ScilabMList;
 import org.scilab.modules.types.ScilabString;
 import org.scilab.modules.types.ScilabTList;
 import org.scilab.modules.types.ScilabType;
+import org.scilab.modules.xcos.Xcos;
 import org.scilab.modules.xcos.io.scicos.AbstractElement;
 import org.scilab.modules.xcos.io.scicos.ScicosFormatException;
 import org.scilab.modules.xcos.io.scicos.ScicosFormatException.WrongElementException;
@@ -31,6 +38,8 @@ import org.scilab.modules.xcos.palette.model.PaletteBlock;
 import org.scilab.modules.xcos.palette.model.PreLoaded;
 import org.scilab.modules.xcos.palette.model.VariablePath;
 
+import com.mxgraph.view.mxStylesheet;
+
 /**
  * Decode a palette into a {@link PreLoaded} palette.
  */
@@ -207,7 +216,7 @@ public class PreLoadedElement extends AbstractElement<PreLoaded> {
     }
 
     /**
-     * Not implemented yet, always return null.
+     * Encode the Preload as a palette
      *
      * @param from
      *            the source
@@ -218,9 +227,61 @@ public class PreLoadedElement extends AbstractElement<PreLoaded> {
      *      org.scilab.modules.types.ScilabType)
      */
     @Override
-    @Deprecated
     public ScilabType encode(PreLoaded from, ScilabType element) {
-        return null;
+        data = (ScilabTList) element;
+
+        int field = 0;
+
+        if (data == null) {
+            data = allocateElement();
+        }
+
+        field++;
+        data.set(field, new ScilabString(from.getName()));
+
+        final List<PaletteBlock> blocks = from.getBlock();
+        final String[][] blockNames = new String[blocks.size()][1];
+        final String[][] icons = new String[blocks.size()][1];
+        final String[][] styles = new String[blocks.size()][1];
+
+        final Map<String, Map<String, Object>> styleMap = Xcos.getInstance().getStyleSheet().getStyles();
+        for (int i = 0; i < blocks.size(); i++) {
+            final PaletteBlock current = blocks.get(i);
+            blockNames[i][0] = current.getName();
+            icons[i][0] = current.getIcon().getEvaluatedPath();
+            final StringBuilder str = new StringBuilder();
+            final Map<String, Object> m = styleMap.get(current.getName());
+            if (m != null) {
+                for (Entry<String, Object> e : m.entrySet()) {
+                    str.append(e.getKey()).append('=').append(e.getValue()).append(';');
+                }
+            }
+            styles[i][0] = str.toString();
+        }
+
+        field++;
+        data.set(field, new ScilabString(blockNames));
+
+        field++;
+        data.set(field, new ScilabString(icons));
+
+        field++;
+        data.set(field, new ScilabString(styles));
+
+        return data;
     }
 
+    /**
+     * Allocate a new element
+     *
+     * @return the new element
+     */
+    private ScilabTList allocateElement() {
+        ScilabTList data = new ScilabTList(DATA_FIELD_NAMES.toArray(new String[DATA_FIELD_NAMES.size()]));
+        data.add(new ScilabString()); // name
+        data.add(new ScilabString()); // blockNames
+        data.add(new ScilabString()); // icons
+        data.add(new ScilabString()); // style
+        return data;
+    }
 }
index d0c22bc..444fc9a 100644 (file)
@@ -1,6 +1,6 @@
 #include "Palette.hxx"
-/* Generated by GIWS (version 2.0.1) with command:
-giws --disable-return-size-array --output-dir D:\git\debug\similan\scilab\modules\xcos\src\jni\ --throws-exception-on-error --description-file Palette.giws.xml 
+/* Generated by GIWS (version 2.0.2) with command:
+giws --disable-return-size-array --output-dir . --throws-exception-on-error --description-file Palette.giws.xml 
 */
 /*
 
@@ -10,16 +10,16 @@ This software is a computer program whose purpose is to hide the complexity
 of accessing Java objects/methods from C++ code.
 
 This software is governed by the CeCILL-B license under French law and
-abiding by the rules of distribution of free software.  You can  use, 
+abiding by the rules of distribution of free software.  You can  use,
 modify and/ or redistribute the software under the terms of the CeCILL-B
 license as circulated by CEA, CNRS and INRIA at the following URL
-"http://www.cecill.info". 
+"http://www.cecill.info".
 
 As a counterpart to the access to the source code and  rights to copy,
 modify and redistribute granted by the license, users are provided only
 with a limited warranty  and the software's author,  the holder of the
 economic rights,  and the successive licensors  have only  limited
-liability. 
+liability.
 
 In this respect, the user's attention is drawn to the risks associated
 with loading,  using,  modifying and/or developing or reproducing the
@@ -28,9 +28,9 @@ that may mean  that it is complicated to manipulate,  and  that  also
 therefore means  that it is reserved for developers  and  experienced
 professionals having in-depth computer knowledge. Users are therefore
 encouraged to load and test the software's suitability as regards their
-requirements in conditions enabling the security of their systems and/or 
-data to be ensured and,  more generally, to use and operate it in the 
-same conditions as regards security. 
+requirements in conditions enabling the security of their systems and/or
+data to be ensured and,  more generally, to use and operate it in the
+same conditions as regards security.
 
 The fact that you are presently reading this means that you have had
 knowledge of the CeCILL-B license and that you accept its terms.
@@ -55,7 +55,6 @@ return curEnv;
 Palette::~Palette() {
 JNIEnv * curEnv = NULL;
 this->jvm->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
-
 curEnv->DeleteGlobalRef(this->instance);
 curEnv->DeleteGlobalRef(this->instanceClass);
 curEnv->DeleteGlobalRef(this->stringArrayClass);}
@@ -111,6 +110,7 @@ voidremovejobjectArray_java_lang_Stringjava_lang_StringID=NULL;
 voidenablejobjectArray_java_lang_Stringjava_lang_StringjbooleanbooleanID=NULL;
 voidmovejobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringID=NULL;
 voidgeneratePaletteIconjstringjava_lang_StringID=NULL;
+voidgetjobjectArray_java_lang_Stringjava_lang_StringID=NULL;
 
 
 }
@@ -140,6 +140,7 @@ voidremovejobjectArray_java_lang_Stringjava_lang_StringID=NULL;
 voidenablejobjectArray_java_lang_Stringjava_lang_StringjbooleanbooleanID=NULL;
 voidmovejobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringID=NULL;
 voidgeneratePaletteIconjstringjava_lang_StringID=NULL;
+voidgetjobjectArray_java_lang_Stringjava_lang_StringID=NULL;
 
 
 }
@@ -164,6 +165,9 @@ void Palette::loadPal (JavaVM * jvm_, char const* name, char const* const* categ
 JNIEnv * curEnv = NULL;
 jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
 jclass cls = curEnv->FindClass( className().c_str() );
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
 
 jmethodID voidloadPaljstringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringID = curEnv->GetStaticMethodID(cls, "loadPal", "(Ljava/lang/String;[Ljava/lang/String;)V" ) ;
 if (voidloadPaljstringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringID == NULL) {
@@ -196,7 +200,7 @@ throw GiwsException::JniBadAllocException(curEnv);
 
 curEnv->SetObjectArrayElement( category_, i, TempString);
 
-// avoid keeping reference on to many strings
+// avoid keeping reference on too many strings
 curEnv->DeleteLocalRef(TempString);
 }
                          curEnv->CallStaticVoidMethod(cls, voidloadPaljstringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringID ,name_, category_);
@@ -214,6 +218,9 @@ void Palette::loadPal (JavaVM * jvm_, char const* name){
 JNIEnv * curEnv = NULL;
 jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
 jclass cls = curEnv->FindClass( className().c_str() );
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
 
 jmethodID voidloadPaljstringjava_lang_StringID = curEnv->GetStaticMethodID(cls, "loadPal", "(Ljava/lang/String;)V" ) ;
 if (voidloadPaljstringjava_lang_StringID == NULL) {
@@ -240,6 +247,9 @@ void Palette::addCategory (JavaVM * jvm_, char const* const* name, int nameSize,
 JNIEnv * curEnv = NULL;
 jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
 jclass cls = curEnv->FindClass( className().c_str() );
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
 
 jmethodID voidaddCategoryjobjectArray_java_lang_Stringjava_lang_StringjbooleanbooleanID = curEnv->GetStaticMethodID(cls, "addCategory", "([Ljava/lang/String;Z)V" ) ;
 if (voidaddCategoryjobjectArray_java_lang_Stringjava_lang_StringjbooleanbooleanID == NULL) {
@@ -265,7 +275,7 @@ throw GiwsException::JniBadAllocException(curEnv);
 
 curEnv->SetObjectArrayElement( name_, i, TempString);
 
-// avoid keeping reference on to many strings
+// avoid keeping reference on too many strings
 curEnv->DeleteLocalRef(TempString);
 }
 jboolean visible_ = (static_cast<bool>(visible) ? JNI_TRUE : JNI_FALSE);
@@ -284,6 +294,9 @@ void Palette::remove (JavaVM * jvm_, char const* const* name, int nameSize){
 JNIEnv * curEnv = NULL;
 jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
 jclass cls = curEnv->FindClass( className().c_str() );
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
 
 jmethodID voidremovejobjectArray_java_lang_Stringjava_lang_StringID = curEnv->GetStaticMethodID(cls, "remove", "([Ljava/lang/String;)V" ) ;
 if (voidremovejobjectArray_java_lang_Stringjava_lang_StringID == NULL) {
@@ -309,7 +322,7 @@ throw GiwsException::JniBadAllocException(curEnv);
 
 curEnv->SetObjectArrayElement( name_, i, TempString);
 
-// avoid keeping reference on to many strings
+// avoid keeping reference on too many strings
 curEnv->DeleteLocalRef(TempString);
 }
                          curEnv->CallStaticVoidMethod(cls, voidremovejobjectArray_java_lang_Stringjava_lang_StringID ,name_);
@@ -326,6 +339,9 @@ void Palette::enable (JavaVM * jvm_, char const* const* name, int nameSize, bool
 JNIEnv * curEnv = NULL;
 jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
 jclass cls = curEnv->FindClass( className().c_str() );
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
 
 jmethodID voidenablejobjectArray_java_lang_Stringjava_lang_StringjbooleanbooleanID = curEnv->GetStaticMethodID(cls, "enable", "([Ljava/lang/String;Z)V" ) ;
 if (voidenablejobjectArray_java_lang_Stringjava_lang_StringjbooleanbooleanID == NULL) {
@@ -351,7 +367,7 @@ throw GiwsException::JniBadAllocException(curEnv);
 
 curEnv->SetObjectArrayElement( name_, i, TempString);
 
-// avoid keeping reference on to many strings
+// avoid keeping reference on too many strings
 curEnv->DeleteLocalRef(TempString);
 }
 jboolean status_ = (static_cast<bool>(status) ? JNI_TRUE : JNI_FALSE);
@@ -370,6 +386,9 @@ void Palette::move (JavaVM * jvm_, char const* const* source, int sourceSize, ch
 JNIEnv * curEnv = NULL;
 jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
 jclass cls = curEnv->FindClass( className().c_str() );
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
 
 jmethodID voidmovejobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringID = curEnv->GetStaticMethodID(cls, "move", "([Ljava/lang/String;[Ljava/lang/String;)V" ) ;
 if (voidmovejobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringID == NULL) {
@@ -395,7 +414,7 @@ throw GiwsException::JniBadAllocException(curEnv);
 
 curEnv->SetObjectArrayElement( source_, i, TempString);
 
-// avoid keeping reference on to many strings
+// avoid keeping reference on too many strings
 curEnv->DeleteLocalRef(TempString);
 }
 
@@ -417,7 +436,7 @@ throw GiwsException::JniBadAllocException(curEnv);
 
 curEnv->SetObjectArrayElement( target_, i, TempString);
 
-// avoid keeping reference on to many strings
+// avoid keeping reference on too many strings
 curEnv->DeleteLocalRef(TempString);
 }
                          curEnv->CallStaticVoidMethod(cls, voidmovejobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringID ,source_, target_);
@@ -435,6 +454,9 @@ void Palette::generatePaletteIcon (JavaVM * jvm_, char const* iconPath){
 JNIEnv * curEnv = NULL;
 jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
 jclass cls = curEnv->FindClass( className().c_str() );
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
 
 jmethodID voidgeneratePaletteIconjstringjava_lang_StringID = curEnv->GetStaticMethodID(cls, "generatePaletteIcon", "(Ljava/lang/String;)V" ) ;
 if (voidgeneratePaletteIconjstringjava_lang_StringID == NULL) {
@@ -456,4 +478,49 @@ throw GiwsException::JniCallMethodException(curEnv);
 }
 }
 
+void Palette::get (JavaVM * jvm_, char const* const* path, int pathSize){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = curEnv->FindClass( className().c_str() );
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+jmethodID voidgetjobjectArray_java_lang_Stringjava_lang_StringID = curEnv->GetStaticMethodID(cls, "get", "([Ljava/lang/String;)V" ) ;
+if (voidgetjobjectArray_java_lang_Stringjava_lang_StringID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "get");
+}
+jclass stringArrayClass = curEnv->FindClass("java/lang/String");
+
+// create java array of strings.
+jobjectArray path_ = curEnv->NewObjectArray( pathSize, stringArrayClass, NULL);
+if (path_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+// convert each char * to java strings and fill the java array.
+for ( int i = 0; i < pathSize; i++)
+{
+jstring TempString = curEnv->NewStringUTF( path[i] );
+if (TempString == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetObjectArrayElement( path_, i, TempString);
+
+// avoid keeping reference on too many strings
+curEnv->DeleteLocalRef(TempString);
+}
+                         curEnv->CallStaticVoidMethod(cls, voidgetjobjectArray_java_lang_Stringjava_lang_StringID ,path_);
+                        curEnv->DeleteLocalRef(stringArrayClass);
+curEnv->DeleteLocalRef(path_);
+curEnv->DeleteLocalRef(cls);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+}
+
 }
index d3d82fd..a3a39f9 100644 (file)
@@ -25,5 +25,8 @@
         <method name="generatePaletteIcon" returnType="void" modifier="static">
             <parameter name="iconPath" type="String"/>
         </method>
+        <method name="get" returnType="void" modifier="static">
+            <parameter name="path" type="String[]"/>
+        </method>
     </object>
 </package>
index 75570c0..3c2c3ac 100644 (file)
@@ -1,5 +1,5 @@
-/* Generated by GIWS (version 2.0.1) with command:
-giws --disable-return-size-array --output-dir D:\git\debug\similan\scilab\modules\xcos\src\jni\ --throws-exception-on-error --description-file Palette.giws.xml 
+/* Generated by GIWS (version 2.0.2) with command:
+giws --disable-return-size-array --output-dir . --throws-exception-on-error --description-file Palette.giws.xml 
 */
 /*
 
@@ -9,16 +9,16 @@ This software is a computer program whose purpose is to hide the complexity
 of accessing Java objects/methods from C++ code.
 
 This software is governed by the CeCILL-B license under French law and
-abiding by the rules of distribution of free software.  You can  use, 
+abiding by the rules of distribution of free software.  You can  use,
 modify and/ or redistribute the software under the terms of the CeCILL-B
 license as circulated by CEA, CNRS and INRIA at the following URL
-"http://www.cecill.info". 
+"http://www.cecill.info".
 
 As a counterpart to the access to the source code and  rights to copy,
 modify and redistribute granted by the license, users are provided only
 with a limited warranty  and the software's author,  the holder of the
 economic rights,  and the successive licensors  have only  limited
-liability. 
+liability.
 
 In this respect, the user's attention is drawn to the risks associated
 with loading,  using,  modifying and/or developing or reproducing the
@@ -27,9 +27,9 @@ that may mean  that it is complicated to manipulate,  and  that  also
 therefore means  that it is reserved for developers  and  experienced
 professionals having in-depth computer knowledge. Users are therefore
 encouraged to load and test the software's suitability as regards their
-requirements in conditions enabling the security of their systems and/or 
-data to be ensured and,  more generally, to use and operate it in the 
-same conditions as regards security. 
+requirements in conditions enabling the security of their systems and/or
+data to be ensured and,  more generally, to use and operate it in the
+same conditions as regards security.
 
 The fact that you are presently reading this means that you have had
 knowledge of the CeCILL-B license and that you accept its terms.
@@ -84,6 +84,7 @@ jmethodID voidremovejobjectArray_java_lang_Stringjava_lang_StringID; // cache me
 jmethodID voidenablejobjectArray_java_lang_Stringjava_lang_StringjbooleanbooleanID; // cache method id
 jmethodID voidmovejobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringID; // cache method id
 jmethodID voidgeneratePaletteIconjstringjava_lang_StringID; // cache method id
+jmethodID voidgetjobjectArray_java_lang_Stringjava_lang_StringID; // cache method id
 
 
 
@@ -157,6 +158,8 @@ static void move(JavaVM * jvm_, char const* const* source, int sourceSize, char
 
 static void generatePaletteIcon(JavaVM * jvm_, char const* iconPath);
 
+static void get(JavaVM * jvm_, char const* const* path, int pathSize);
+
 
                         /**
                         * Get class name to use for static methods