In browsevar, allows a user to plot the variable (already available in editvar). 53/11353/9
Sylvestre Ledru [Fri, 19 Apr 2013 11:00:00 +0000 (13:00 +0200)]
Change-Id: I353cc21f48d31faee4f3cd2556b1369f08986cdc

scilab/CHANGES_5.5.X
scilab/modules/gui/src/java/org/scilab/modules/gui/contextmenu/ScilabContextMenu.java
scilab/modules/ui_data/src/cpp/UpdateBrowseVar.cpp
scilab/modules/ui_data/src/java/org/scilab/modules/ui_data/BrowseVar.java
scilab/modules/ui_data/src/java/org/scilab/modules/ui_data/variablebrowser/SwingScilabVariableBrowser.java
scilab/modules/ui_data/src/java/org/scilab/modules/ui_data/variableeditor/actions/PlotAction.java
scilab/modules/ui_data/src/jni/BrowseVar.cpp
scilab/modules/ui_data/src/jni/BrowseVar.giws.xml
scilab/modules/ui_data/src/jni/BrowseVar.hxx

index fc9b681..c55957a 100644 (file)
@@ -31,6 +31,8 @@ BDF methods with direct and preconditioned Krylov linear solvers, from ODEPACK.
 * The deletion of variables from the Variable Browser is now possible.
   See bug #9447
 
+* In browsevar, allows a user to plot the variable (already available in
+  editvar).
 
 
 Syntax changes
index 9c86a58..236512e 100644 (file)
@@ -71,6 +71,7 @@ public class ScilabContextMenu extends ScilabWidget implements ContextMenu {
     public void add(Menu newMenu) {
         ScilabBridge.add(this, newMenu);
     }
+
     /**
      * Sets the text of a Scilab ContextMenu
      * @param newText the Text to set to the ContextMenu
index 95fd8d2..5d75b9a 100644 (file)
@@ -71,6 +71,10 @@ void UpdateBrowseVar(BOOL update)
     int *piAllVariableTypes = (int *)MALLOC((iLocalVariablesUsed + iGlobalVariablesUsed) * sizeof(int));
     int *piAllVariableIntegerTypes = (int *)MALLOC((iLocalVariablesUsed + iGlobalVariablesUsed) * sizeof(int));
     bool *piAllVariableFromUser = (bool *) MALLOC((iLocalVariablesUsed + iGlobalVariablesUsed) * sizeof(bool));
+    /* Necessary for the plots in the var browser */
+    int *piAllVariableNbRows = (int *)MALLOC((iLocalVariablesUsed + iGlobalVariablesUsed) * sizeof(int));
+    int *piAllVariableNbCols = (int *)MALLOC((iLocalVariablesUsed + iGlobalVariablesUsed) * sizeof(int));
+
     int nbRows, nbCols;
     char *sizeStr = NULL;
 
@@ -98,6 +102,8 @@ void UpdateBrowseVar(BOOL update)
         else
         {
             pstAllVariableSizes[i] = valueToDisplay(pstAllVariableNames[i], piAllVariableTypes[i], nbRows, nbCols);
+            piAllVariableNbRows[i] = nbRows;
+            piAllVariableNbCols[i] = nbCols;
         }
 
 
@@ -173,6 +179,9 @@ void UpdateBrowseVar(BOOL update)
         // Sizes of the variable
         getNamedVarDimension(pvApiCtx, pstAllVariableNames[i], &nbRows, &nbCols);
         pstAllVariableSizes[i] = valueToDisplay(pstAllVariableNames[i], piAllVariableTypes[i], nbRows, nbCols);
+        piAllVariableNbRows[i] = nbRows;
+        piAllVariableNbCols[i] = nbCols;
+
 
         // global / local ??
         pstAllVariableVisibility[i] = strdup("global");
@@ -208,6 +217,8 @@ void UpdateBrowseVar(BOOL update)
                                    piAllVariableIntegerTypes, iLocalVariablesUsed + iGlobalVariablesUsed,
                                    pstAllVariableListTypes, iLocalVariablesUsed + iGlobalVariablesUsed,
                                    pstAllVariableSizes, iLocalVariablesUsed + iGlobalVariablesUsed,
+                                   piAllVariableNbRows, iLocalVariablesUsed + iGlobalVariablesUsed,
+                                   piAllVariableNbCols, iLocalVariablesUsed + iGlobalVariablesUsed,
                                    pstAllVariableVisibility, iLocalVariablesUsed + iGlobalVariablesUsed,
                                    piAllVariableFromUser, iLocalVariablesUsed + iGlobalVariablesUsed);
 
@@ -240,6 +251,17 @@ void UpdateBrowseVar(BOOL update)
         piAllVariableIntegerTypes = NULL;
     }
 
+    if (piAllVariableNbRows)
+    {
+        FREE(piAllVariableNbRows);
+        piAllVariableNbRows = NULL;
+    }
+
+    if (piAllVariableNbCols)
+    {
+        FREE(piAllVariableNbCols);
+        piAllVariableNbCols = NULL;
+    }
 }
 
 /*--------------------------------------------------------------------------*/
@@ -324,39 +346,40 @@ static char * getListName(char * variableName)
     return tmpChar;
 }
 
-static char * valueToDisplay(char * variableName, int variableType, int nbRows, int nbCols) {
+static char * valueToDisplay(char * variableName, int variableType, int nbRows, int nbCols)
+{
     SciErr err;
 
 
-            // 4 is the dimension max to which display the content
-            if (nbRows * nbCols <= 4 && variableType == sci_matrix)
-            {
-                // Small double value, display it
-                double* pdblReal = (double *)malloc(((nbRows) * (nbCols)) * sizeof(double));
-                double* pdblImg = (double *)malloc(((nbRows) * (nbCols)) * sizeof(double));
-                BOOL isComplex = FALSE;
-
-                if (isNamedVarComplex(pvApiCtx, variableName))
-                {
-                    err = readNamedComplexMatrixOfDouble(pvApiCtx, variableName, &nbRows, &nbCols, pdblReal, pdblImg);
-                    isComplex = TRUE;
-                }
-                else
-                {
-                    err = readNamedMatrixOfDouble(pvApiCtx, variableName, &nbRows, &nbCols, pdblReal);
-                }
-
-
-                return strdup(formatMatrix(nbRows, nbCols, isComplex, pdblReal, pdblImg).c_str());
-            }
-            else
-            {
-                char *sizeStr = NULL;
-                // 11 =strlen("2147483647")+1 (1 for security)
-                sizeStr = (char *)MALLOC((11 + 11 + 1 + 1) * sizeof(char));
-                sprintf(sizeStr, "%dx%d", nbRows, nbCols);
-                return sizeStr;
-            }
+    // 4 is the dimension max to which display the content
+    if (nbRows * nbCols <= 4 && variableType == sci_matrix)
+    {
+        // Small double value, display it
+        double* pdblReal = (double *)malloc(((nbRows) * (nbCols)) * sizeof(double));
+        double* pdblImg = (double *)malloc(((nbRows) * (nbCols)) * sizeof(double));
+        BOOL isComplex = FALSE;
+
+        if (isNamedVarComplex(pvApiCtx, variableName))
+        {
+            err = readNamedComplexMatrixOfDouble(pvApiCtx, variableName, &nbRows, &nbCols, pdblReal, pdblImg);
+            isComplex = TRUE;
+        }
+        else
+        {
+            err = readNamedMatrixOfDouble(pvApiCtx, variableName, &nbRows, &nbCols, pdblReal);
+        }
+
+
+        return strdup(formatMatrix(nbRows, nbCols, isComplex, pdblReal, pdblImg).c_str());
+    }
+    else
+    {
+        char *sizeStr = NULL;
+        // 11 =strlen("2147483647")+1 (1 for security)
+        sizeStr = (char *)MALLOC((11 + 11 + 1 + 1) * sizeof(char));
+        sprintf(sizeStr, "%dx%d", nbRows, nbCols);
+        return sizeStr;
+    }
 }
 
 std::string formatMatrix(int nbRows, int nbCols, BOOL isComplex, double *pdblReal, double *pdblImg)
index a0976f4..93c94f6 100644 (file)
@@ -36,6 +36,8 @@ public class BrowseVar {
     public static final int BYTES_COLUMN_INDEX = 5;
     public static final int FROM_SCILAB_COLUMN_INDEX = 6;
     public static final int TYPE_COLUMN_INDEX = 7;
+    public static final int NB_ROWS_INDEX = 8;
+    public static final int NB_COLS_INDEX = 9;
 
     public static final String[] COLUMNNAMES = new String[] {"", /* Icon */
             Messages.gettext("Name"),
@@ -45,6 +47,8 @@ public class BrowseVar {
             Messages.gettext("Bytes"),
             Messages.gettext("User"),
             Messages.gettext("Type int value"),
+            "", /* nbrows */
+            "" /* nbcols */
                                                             };
 
     public static final int[] COLUMNSALIGNMENT = new int[] { -1, JLabel.LEFT, JLabel.RIGHT, JLabel.RIGHT, JLabel.RIGHT, JLabel.RIGHT, JLabel.RIGHT, JLabel.RIGHT};
@@ -129,7 +133,7 @@ public class BrowseVar {
      * @param dataVisibility : local or global variable
      * @param dataFromUser : Scilab data or user data
      */
-    public static void openVariableBrowser(boolean update, String[] dataNames, int[] dataBytes, int[] dataTypes, int[] dataIntegerTypes, String[] variableListTypes, String[] dataSizes, String[] dataVisibility, boolean[] dataFromUser) {
+    public static void openVariableBrowser(boolean update, String[] dataNames, int[] dataBytes, int[] dataTypes, int[] dataIntegerTypes, String[] variableListTypes, String[] dataSizes, int[] dataNbRows, int[] dataNbCols, String[] dataVisibility, boolean[] dataFromUser) {
         Object[][] data = new Object[dataNames.length][COLUMNNAMES.length];
         for (int i = 0; i < dataNames.length; ++i) {
             data[i][ICON_COLUMN_INDEX] = getIconFromType(dataTypes[i]);
@@ -148,6 +152,8 @@ public class BrowseVar {
             data[i][BYTES_COLUMN_INDEX] = dataBytes[i];
             data[i][FROM_SCILAB_COLUMN_INDEX] = dataFromUser[i]; /* Tag if it is a variable from the user or from Scilab (%pi, %eps, etc) */
             data[i][TYPE_COLUMN_INDEX] = dataTypes[i];
+            data[i][NB_ROWS_INDEX] = dataNbRows[i];
+            data[i][NB_COLS_INDEX] = dataNbCols[i];
         }
         ScilabVariableBrowser.getVariableBrowser(update, data);
     }
index e179924..256d982 100644 (file)
@@ -29,6 +29,7 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 
+import javax.swing.JMenu;
 import javax.swing.JScrollPane;
 import javax.swing.JTable;
 import javax.swing.ListSelectionModel;
@@ -42,6 +43,7 @@ import org.scilab.modules.action_binding.highlevel.ScilabInterpreterManagement;
 import org.scilab.modules.action_binding.highlevel.ScilabInterpreterManagement.InterpreterException;
 import org.scilab.modules.gui.bridge.tab.SwingScilabTab;
 import org.scilab.modules.gui.bridge.contextmenu.SwingScilabContextMenu;
+import org.scilab.modules.gui.bridge.menu.SwingScilabMenu;
 import org.scilab.modules.gui.contextmenu.ContextMenu;
 import org.scilab.modules.gui.contextmenu.ScilabContextMenu;
 import org.scilab.modules.gui.checkboxmenuitem.CheckBoxMenuItem;
@@ -83,6 +85,7 @@ import org.scilab.modules.ui_data.actions.UncompiledFunctionFilteringAction;
 import org.scilab.modules.ui_data.datatable.SwingTableModel;
 import org.scilab.modules.ui_data.utils.UiDataMessages;
 import org.scilab.modules.ui_data.variableeditor.actions.ExportToCsvAction;
+import org.scilab.modules.ui_data.variableeditor.actions.PlotAction;
 import org.scilab.modules.ui_data.variablebrowser.actions.CloseAction;
 import org.scilab.modules.ui_data.variablebrowser.actions.DeleteAction;
 import org.scilab.modules.ui_data.variablebrowser.actions.RefreshAction;
@@ -194,8 +197,15 @@ public final class SwingScilabVariableBrowser extends SwingScilabTab implements
         table.getColumnModel().getColumn(0).setPreferredWidth(30);
 
         /* Hide the columns. But keep it in memory for the tooltip */
-        TableColumn column = table.getColumnModel().getColumn(BrowseVar.TYPE_COLUMN_INDEX);
+        TableColumn column = table.getColumnModel().getColumn(BrowseVar.NB_COLS_INDEX);
+        table.removeColumn(column);
+
         /* The order to removing does matter since it changes the positions */
+
+        column = table.getColumnModel().getColumn(BrowseVar.NB_ROWS_INDEX);
+        table.removeColumn(column);
+
+        column = table.getColumnModel().getColumn(BrowseVar.TYPE_COLUMN_INDEX);
         table.removeColumn(column);
 
         column = table.getColumnModel().getColumn(BrowseVar.FROM_SCILAB_COLUMN_INDEX);
@@ -421,6 +431,22 @@ public final class SwingScilabVariableBrowser extends SwingScilabTab implements
 
             ExportToCsvAction csvExport = new ExportToCsvAction((SwingScilabTab)SwingScilabVariableBrowser.this, UiDataMessages.EXPORTCSV);
             menu.add(csvExport.createMenuItem(SwingScilabVariableBrowser.this, UiDataMessages.EXPORTCSV));
+
+            Menu menuPlot = ScilabMenu.createMenu();
+            menuPlot.setText(UiDataMessages.PLOTALL);
+            menuPlot.add(PlotAction.createMenuItem((SwingScilabTab)SwingScilabVariableBrowser.this, "plot2d", false));
+            menuPlot.add(PlotAction.createMenuItem((SwingScilabTab)SwingScilabVariableBrowser.this, "Matplot", false));
+            menuPlot.add(PlotAction.createMenuItem((SwingScilabTab)SwingScilabVariableBrowser.this, "grayplot", false));
+            menuPlot.add(PlotAction.createMenuItem((SwingScilabTab)SwingScilabVariableBrowser.this, "Sgrayplot", false));
+            menuPlot.add(PlotAction.createMenuItem((SwingScilabTab)SwingScilabVariableBrowser.this, "champ", false));
+            menuPlot.add(PlotAction.createMenuItem((SwingScilabTab)SwingScilabVariableBrowser.this, "histplot", false));
+            menuPlot.add(PlotAction.createMenuItem((SwingScilabTab)SwingScilabVariableBrowser.this, "mesh", false));
+            menuPlot.add(PlotAction.createMenuItem((SwingScilabTab)SwingScilabVariableBrowser.this, "surf", false));
+            menuPlot.add(PlotAction.createMenuItem((SwingScilabTab)SwingScilabVariableBrowser.this, "hist3d", false));
+            menuPlot.add(PlotAction.createMenuItem((SwingScilabTab)SwingScilabVariableBrowser.this, "contour2d", false));
+            menuPlot.add(PlotAction.createMenuItem((SwingScilabTab)SwingScilabVariableBrowser.this, "pie", false));
+            menu.add(menuPlot);
+
             menu.setVisible(true);
 
             ((SwingScilabContextMenu) menu.getAsSimpleContextMenu()).setLocation(
index d72aba3..82e251b 100644 (file)
@@ -20,6 +20,8 @@ import javax.swing.ImageIcon;
 import javax.swing.JPopupMenu;
 import javax.swing.JTable;
 
+import org.scilab.modules.types.ScilabTypeEnumDescription;
+import org.scilab.modules.gui.bridge.tab.SwingScilabTab;
 import org.scilab.modules.gui.bridge.menuitem.SwingScilabMenuItem;
 import org.scilab.modules.gui.bridge.pushbutton.SwingScilabPushButton;
 import org.scilab.modules.gui.events.callback.CommonCallBack;
@@ -28,9 +30,16 @@ import org.scilab.modules.gui.menuitem.ScilabMenuItem;
 import org.scilab.modules.gui.pushbutton.PushButton;
 import org.scilab.modules.gui.pushbutton.ScilabPushButton;
 import org.scilab.modules.gui.utils.ScilabSwingUtilities;
+import org.scilab.modules.ui_data.BrowseVar;
 import org.scilab.modules.ui_data.EditVar;
 import org.scilab.modules.ui_data.datatable.SwingEditvarTableModel;
 import org.scilab.modules.ui_data.variableeditor.SwingScilabVariableEditor;
+import org.scilab.modules.ui_data.variablebrowser.SwingScilabVariableBrowser;
+
+import static org.scilab.modules.action_binding.highlevel.ScilabInterpreterManagement.asynchronousScilabExec;
+
+import org.scilab.modules.action_binding.highlevel.ScilabInterpreterManagement.InterpreterException;
+
 
 /**
  * RefreshAction class
@@ -95,7 +104,7 @@ public final class PlotAction extends CommonCallBack {
 
     private static final String CREATE = "Create";
 
-    private final SwingScilabVariableEditor editor;
+    private final SwingScilabTab editor;
     private final int type;
     private final boolean onSelection;
 
@@ -104,7 +113,7 @@ public final class PlotAction extends CommonCallBack {
      * @param editor the editor
      * @param name the name of the action
      */
-    private PlotAction(SwingScilabVariableEditor editor, String name, boolean onSelection) {
+    public PlotAction(SwingScilabTab editor, String name, boolean onSelection) {
         super(name);
         this.editor = editor;
         this.type = map.get(name);
@@ -116,47 +125,71 @@ public final class PlotAction extends CommonCallBack {
      */
     @Override
     public void callBack() {
-        JTable table = editor.getCurrentTable();
-        SwingEditvarTableModel model = (SwingEditvarTableModel) table.getModel();
-        String datas = null;
+
+        String data = null;
         int rowC = 0;
         int colC = 0;
+        String modelType = null;
+        SwingEditvarTableModel model = null;
 
-        if (!onSelection) {
-            rowC = model.getScilabMatrixRowCount();
-            colC = model.getScilabMatrixColCount();
-            datas = model.getVarName();
-        } else {
-            int[] cols = table.getSelectedColumns();
-            int[] rows = table.getSelectedRows();
-            if (cols == null || cols.length == 0 || rows == null || rows.length == 0) {
+        if (editor instanceof SwingScilabVariableEditor) {
+            JTable table = ((SwingScilabVariableEditor)editor).getCurrentTable();
+            model = (SwingEditvarTableModel) table.getModel();
+            modelType = model.getType();
+
+            if (!onSelection) {
                 rowC = model.getScilabMatrixRowCount();
                 colC = model.getScilabMatrixColCount();
-                datas = model.getVarName();
+                data = model.getVarName();
             } else {
-                if (model.getType().equals(EditVar.STRING)) {
-                    return;
-                }
+                int[] cols = table.getSelectedColumns();
+                int[] rows = table.getSelectedRows();
+                if (cols == null || cols.length == 0 || rows == null || rows.length == 0) {
+                    rowC = model.getScilabMatrixRowCount();
+                    colC = model.getScilabMatrixColCount();
+                    data = model.getVarName();
+                } else {
+                    if (model.getType().equals(EditVar.STRING)) {
+                        return;
+                    }
 
-                int[] rowSize = new int[1];
-                int[] colSize = new int[1];
-                datas = model.getScilabSubMatrix(rows, cols, rowSize, colSize);
-                if (datas == null) {
-                    return;
+                    int[] rowSize = new int[1];
+                    int[] colSize = new int[1];
+                    data = model.getScilabSubMatrix(rows, cols, rowSize, colSize);
+                    if (data == null) {
+                        return;
+                    }
+                    rowC = rowSize[0];
+                    colC = colSize[0];
                 }
-                rowC = rowSize[0];
-                colC = colSize[0];
             }
+
+            if (!modelType.equals(EditVar.DOUBLE)) {
+                data = "double(" + data + ")";
+            }
+
+        } else {
+            // Variable Browser
+            int clickedRow = ((SwingScilabVariableBrowser)editor).getTable().getSelectedRow();
+
+            // Does nothing if no variable selected
+            if (clickedRow != -1) {
+                rowC = Integer.parseInt(((SwingScilabVariableBrowser)editor).getTable().getModel().getValueAt(clickedRow, BrowseVar.NB_ROWS_INDEX).toString());
+                colC = Integer.parseInt(((SwingScilabVariableBrowser)editor).getTable().getModel().getValueAt(clickedRow, BrowseVar.NB_COLS_INDEX).toString());
+                data = ((SwingScilabVariableBrowser)editor).getTable().getValueAt(clickedRow, BrowseVar.NAME_COLUMN_INDEX).toString();
+            }
+            int type = Integer.parseInt(((SwingScilabVariableBrowser)editor).getTable().getModel().getValueAt(clickedRow, BrowseVar.TYPE_COLUMN_INDEX).toString());
+
+            if (!ScilabTypeEnumDescription.getTypeDescriptionFromId(type).equals(EditVar.DOUBLE)) {
+                data = "double(" + data + ")";
+            }
+
         }
 
         if (rowC == 0 || colC == 0) {
             return;
         }
 
-        if (!model.getType().equals(EditVar.DOUBLE)) {
-            datas = "double(" + datas + ")";
-        }
-
         String com = COMMANDS[type];
         switch (type) {
             case 0:
@@ -166,25 +199,34 @@ public final class PlotAction extends CommonCallBack {
             case 7:
             case 8:
             case 10:
-                com = String.format(com, datas);
+                com = String.format(com, data);
                 break;
             case 2:
             case 3:
-                com = String.format(com, rowC, colC, datas);
+                com = String.format(com, rowC, colC, data);
                 break;
             case 4:
-                com = String.format(com, rowC, colC, datas, datas);
+                com = String.format(com, rowC, colC, data, data);
                 break;
             case 9:
                 if (rowC >= 2 && colC >= 2) {
-                    com = String.format(com, rowC, colC, datas);
+                    com = String.format(com, rowC, colC, data);
                 } else {
                     return;
                 }
                 break;
         }
+        if (editor instanceof SwingScilabVariableEditor) {
+            model.execCommand("clf();" + com);
+        } else {
+            // Browse var case
+            try {
+                asynchronousScilabExec(null, "clf();" + com);
+            } catch (InterpreterException e1) {
+                System.err.println("An error in the interpreter has been catched: " + e1.getLocalizedMessage());
+            }
 
-        model.execCommand("clf();" + com);
+        }
     }
 
     /**
@@ -193,7 +235,7 @@ public final class PlotAction extends CommonCallBack {
      * @param title tooltip for the button
      * @return the button
      */
-    public static PushButton createButton(SwingScilabVariableEditor editor, String title) {
+    public static PushButton createButton(SwingScilabTab editor, String title) {
         final PushButton button = ScilabPushButton.createPushButton();
         button.setToolTipText(title);
         ImageIcon imageIcon = new ImageIcon(ScilabSwingUtilities.findIcon("plot"));
@@ -242,7 +284,7 @@ public final class PlotAction extends CommonCallBack {
      * @param title the menu title
      * @return the menu item
      */
-    public static MenuItem createMenuItem(SwingScilabVariableEditor editor, String title, boolean onSelection) {
+    public static MenuItem createMenuItem(SwingScilabTab editor, String title, boolean onSelection) {
         MenuItem menu = ScilabMenuItem.createMenuItem();
         menu.setCallback(new PlotAction(editor, title, onSelection));
         menu.setText(title);
@@ -257,7 +299,7 @@ public final class PlotAction extends CommonCallBack {
      * @param title the menu title
      * @return the menu item
      */
-    public static SwingScilabMenuItem createJMenuItem(SwingScilabVariableEditor editor, String title, boolean onSelection) {
+    public static SwingScilabMenuItem createJMenuItem(SwingScilabTab editor, String title, boolean onSelection) {
         return (SwingScilabMenuItem) createMenuItem(editor, title, onSelection).getAsSimpleMenuItem();
     }
 }
index b403fc3..5cff69f 100644 (file)
@@ -104,7 +104,7 @@ throw GiwsException::JniObjectCreationException(curEnv, this->className());
 curEnv->DeleteLocalRef(localInstance);
 
                 /* Methods ID set to NULL */
-voidopenVariableBrowserjbooleanbooleanjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintjintArray_intintjintArray_intintjobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringjbooleanArray_booleanbooleanID=NULL;
+voidopenVariableBrowserjbooleanbooleanjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintjintArray_intintjintArray_intintjobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintjintArray_intintjobjectArray_java_lang_Stringjava_lang_StringjbooleanArray_booleanbooleanID=NULL;
 jbooleanisVariableBrowserOpenedID=NULL;
 voidcloseVariableBrowserID=NULL;
 
@@ -129,7 +129,7 @@ throw GiwsException::JniObjectCreationException(curEnv, this->className());
 throw GiwsException::JniObjectCreationException(curEnv, this->className());
         }
         /* Methods ID set to NULL */
-        voidopenVariableBrowserjbooleanbooleanjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintjintArray_intintjintArray_intintjobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringjbooleanArray_booleanbooleanID=NULL;
+        voidopenVariableBrowserjbooleanbooleanjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintjintArray_intintjintArray_intintjobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintjintArray_intintjobjectArray_java_lang_Stringjava_lang_StringjbooleanArray_booleanbooleanID=NULL;
 jbooleanisVariableBrowserOpenedID=NULL;
 voidcloseVariableBrowserID=NULL;
 
@@ -151,14 +151,14 @@ throw GiwsException::JniMonitorException(getCurrentEnv(), "BrowseVar");
 }
 // Method(s)
 
-void BrowseVar::openVariableBrowser (JavaVM * jvm_, bool update, char const* const* variableNames, int variableNamesSize, int const* variableBytes, int variableBytesSize, int const* variableTypes, int variableTypesSize, int const* variableIntegerTypes, int variableIntegerTypesSize, char const* const* variableListTypes, int variableListTypesSize, char const* const* variableSize, int variableSizeSize, char const* const* variableVisibility, int variableVisibilitySize, bool const* variableFromUser, int variableFromUserSize){
+void BrowseVar::openVariableBrowser (JavaVM * jvm_, bool update, char const* const* variableNames, int variableNamesSize, int const* variableBytes, int variableBytesSize, int const* variableTypes, int variableTypesSize, int const* variableIntegerTypes, int variableIntegerTypesSize, char const* const* variableListTypes, int variableListTypesSize, char const* const* variableSize, int variableSizeSize, int const* variableNbRows, int variableNbRowsSize, int const* variableNbCols, int variableNbColsSize, char const* const* variableVisibility, int variableVisibilitySize, bool const* variableFromUser, int variableFromUserSize){
 
 JNIEnv * curEnv = NULL;
 jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
 jclass cls = curEnv->FindClass( className().c_str() );
 
-jmethodID voidopenVariableBrowserjbooleanbooleanjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintjintArray_intintjintArray_intintjobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringjbooleanArray_booleanbooleanID = curEnv->GetStaticMethodID(cls, "openVariableBrowser", "(Z[Ljava/lang/String;[I[I[I[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Z)V" ) ;
-if (voidopenVariableBrowserjbooleanbooleanjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintjintArray_intintjintArray_intintjobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringjbooleanArray_booleanbooleanID == NULL) {
+jmethodID voidopenVariableBrowserjbooleanbooleanjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintjintArray_intintjintArray_intintjobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintjintArray_intintjobjectArray_java_lang_Stringjava_lang_StringjbooleanArray_booleanbooleanID = curEnv->GetStaticMethodID(cls, "openVariableBrowser", "(Z[Ljava/lang/String;[I[I[I[Ljava/lang/String;[Ljava/lang/String;[I[I[Ljava/lang/String;[Z)V" ) ;
+if (voidopenVariableBrowserjbooleanbooleanjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintjintArray_intintjintArray_intintjobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintjintArray_intintjobjectArray_java_lang_Stringjava_lang_StringjbooleanArray_booleanbooleanID == NULL) {
 throw GiwsException::JniMethodNotFoundException(curEnv, "openVariableBrowser");
 }
 
@@ -263,6 +263,28 @@ curEnv->SetObjectArrayElement( variableSize_, i, TempString);
 // avoid keeping reference on to many strings
 curEnv->DeleteLocalRef(TempString);
 }
+jintArray variableNbRows_ = curEnv->NewIntArray( variableNbRowsSize ) ;
+
+if (variableNbRows_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( variableNbRows_, 0, variableNbRowsSize, (jint*)(variableNbRows) ) ;
+
+
+jintArray variableNbCols_ = curEnv->NewIntArray( variableNbColsSize ) ;
+
+if (variableNbCols_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( variableNbCols_, 0, variableNbColsSize, (jint*)(variableNbCols) ) ;
+
+
 
 // create java array of strings.
 jobjectArray variableVisibility_ = curEnv->NewObjectArray( variableVisibilitySize, stringArrayClass, NULL);
@@ -288,7 +310,7 @@ curEnv->DeleteLocalRef(TempString);
 jbooleanArray variableFromUser_ = curEnv->NewBooleanArray( variableFromUserSize ) ;
 curEnv->SetBooleanArrayRegion( variableFromUser_, 0, variableFromUserSize, (jboolean*)variableFromUser ) ;
 
-                         curEnv->CallStaticVoidMethod(cls, voidopenVariableBrowserjbooleanbooleanjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintjintArray_intintjintArray_intintjobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringjbooleanArray_booleanbooleanID ,update_, variableNames_, variableBytes_, variableTypes_, variableIntegerTypes_, variableListTypes_, variableSize_, variableVisibility_, variableFromUser_);
+                         curEnv->CallStaticVoidMethod(cls, voidopenVariableBrowserjbooleanbooleanjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintjintArray_intintjintArray_intintjobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintjintArray_intintjobjectArray_java_lang_Stringjava_lang_StringjbooleanArray_booleanbooleanID ,update_, variableNames_, variableBytes_, variableTypes_, variableIntegerTypes_, variableListTypes_, variableSize_, variableNbRows_, variableNbCols_, variableVisibility_, variableFromUser_);
                         curEnv->DeleteLocalRef(stringArrayClass);
 curEnv->DeleteLocalRef(variableNames_);
 curEnv->DeleteLocalRef(variableBytes_);
@@ -296,6 +318,8 @@ curEnv->DeleteLocalRef(variableTypes_);
 curEnv->DeleteLocalRef(variableIntegerTypes_);
 curEnv->DeleteLocalRef(variableListTypes_);
 curEnv->DeleteLocalRef(variableSize_);
+curEnv->DeleteLocalRef(variableNbRows_);
+curEnv->DeleteLocalRef(variableNbCols_);
 curEnv->DeleteLocalRef(variableVisibility_);
 curEnv->DeleteLocalRef(variableFromUser_);
 curEnv->DeleteLocalRef(cls);
index fbdfc91..160c308 100644 (file)
@@ -9,6 +9,8 @@
             <parameter type="int[]" name="variableIntegerTypes"/>
             <parameter type="String[]" name="variableListTypes"/>
             <parameter type="String[]" name="variableSize"/>
+            <parameter type="int[]" name="variableNbRows"/>
+            <parameter type="int[]" name="variableNbCols"/>
             <parameter type="String[]" name="variableVisibility"/>
             <parameter type="boolean[]" name="variableFromUser"/>
         </method>
index c753a63..97ee7a0 100644 (file)
@@ -76,7 +76,7 @@ private:
 JavaVM * jvm;
 
 protected:
-jmethodID voidopenVariableBrowserjbooleanbooleanjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintjintArray_intintjintArray_intintjobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringjbooleanArray_booleanbooleanID; // cache method id
+jmethodID voidopenVariableBrowserjbooleanbooleanjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintjintArray_intintjintArray_intintjobjectArray_java_lang_Stringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintjintArray_intintjobjectArray_java_lang_Stringjava_lang_StringjbooleanArray_booleanbooleanID; // cache method id
 jclass stringArrayClass;
 jmethodID jbooleanisVariableBrowserOpenedID; // cache method id
 jmethodID voidcloseVariableBrowserID; // cache method id
@@ -139,7 +139,7 @@ void synchronize();
 void endSynchronize();
 
 // Methods
-static void openVariableBrowser(JavaVM * jvm_, bool update, char const* const* variableNames, int variableNamesSize, int const* variableBytes, int variableBytesSize, int const* variableTypes, int variableTypesSize, int const* variableIntegerTypes, int variableIntegerTypesSize, char const* const* variableListTypes, int variableListTypesSize, char const* const* variableSize, int variableSizeSize, char const* const* variableVisibility, int variableVisibilitySize, bool const* variableFromUser, int variableFromUserSize);
+static void openVariableBrowser(JavaVM * jvm_, bool update, char const* const* variableNames, int variableNamesSize, int const* variableBytes, int variableBytesSize, int const* variableTypes, int variableTypesSize, int const* variableIntegerTypes, int variableIntegerTypesSize, char const* const* variableListTypes, int variableListTypesSize, char const* const* variableSize, int variableSizeSize, int const* variableNbRows, int variableNbRowsSize, int const* variableNbCols, int variableNbColsSize, char const* const* variableVisibility, int variableVisibilitySize, bool const* variableFromUser, int variableFromUserSize);
 
 static bool isVariableBrowserOpened(JavaVM * jvm_);