Plug the export to CSV action in the variable Browser 33/11333/3
Sylvestre Ledru [Fri, 19 Apr 2013 08:47:10 +0000 (10:47 +0200)]
Change-Id: Iae6c1bccdb3e1d6c11b1d0e4a15b14b1700f70ac

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/ExportToCsvAction.java

index c05d842..e179924 100644 (file)
@@ -82,6 +82,7 @@ import org.scilab.modules.ui_data.actions.TListFilteringAction;
 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.variablebrowser.actions.CloseAction;
 import org.scilab.modules.ui_data.variablebrowser.actions.DeleteAction;
 import org.scilab.modules.ui_data.variablebrowser.actions.RefreshAction;
@@ -219,6 +220,9 @@ public final class SwingScilabVariableBrowser extends SwingScilabTab implements
             align(table, columnsName[i], aligment[i]);
         }
 
+        // Plug the shortcuts
+        ExportToCsvAction.registerAction(this, table);
+
         JScrollPane scrollPane = new JScrollPane(table);
         setContentPane(scrollPane);
         WindowsConfigurationManager.restorationFinished(this);
@@ -334,7 +338,7 @@ public final class SwingScilabVariableBrowser extends SwingScilabTab implements
             if (e.getClickCount() >= 2) {
                 int clickedRow = ((JTable) e.getSource()).rowAtPoint(e.getPoint());
                 if (clickedRow != -1) {
-                    String variableName = ((JTable) e.getSource()).getValueAt(clickedRow, 1).toString();
+                    String variableName = table.getValueAt(clickedRow, BrowseVar.NAME_COLUMN_INDEX).toString();
 
                     String variableVisibility = ((JTable) e.getSource())
                                                 .getValueAt(((JTable) e.getSource()).getSelectedRow(), BrowseVar.VISIBILITY_COLUMN_INDEX).toString();
@@ -415,6 +419,8 @@ public final class SwingScilabVariableBrowser extends SwingScilabTab implements
             DeleteAction delete = new DeleteAction(SwingScilabVariableBrowser.this);
             menu.add(delete.createMenuItem());
 
+            ExportToCsvAction csvExport = new ExportToCsvAction((SwingScilabTab)SwingScilabVariableBrowser.this, UiDataMessages.EXPORTCSV);
+            menu.add(csvExport.createMenuItem(SwingScilabVariableBrowser.this, UiDataMessages.EXPORTCSV));
             menu.setVisible(true);
 
             ((SwingScilabContextMenu) menu.getAsSimpleContextMenu()).setLocation(
index 2d65a56..85bffcb 100644 (file)
@@ -16,15 +16,23 @@ import javax.swing.JTable;
 
 import org.scilab.modules.commons.gui.ScilabKeyStroke;
 import org.scilab.modules.gui.bridge.menuitem.SwingScilabMenuItem;
+import org.scilab.modules.gui.bridge.tab.SwingScilabTab;
 import org.scilab.modules.gui.events.callback.CommonCallBack;
 import org.scilab.modules.gui.menuitem.MenuItem;
 import org.scilab.modules.gui.menuitem.ScilabMenuItem;
 import org.scilab.modules.gui.utils.ScilabSwingUtilities;
+import org.scilab.modules.localization.Messages;
 import org.scilab.modules.ui_data.UI_data;
 import org.scilab.modules.ui_data.datatable.SwingEditvarTableModel;
 import org.scilab.modules.ui_data.utils.UiDataMessages;
 import org.scilab.modules.ui_data.variableeditor.SwingScilabVariableEditor;
+import org.scilab.modules.ui_data.variablebrowser.SwingScilabVariableBrowser;
+import org.scilab.modules.ui_data.BrowseVar;
+import org.scilab.modules.types.ScilabTypeEnum;
 
+import static org.scilab.modules.action_binding.highlevel.ScilabInterpreterManagement.asynchronousScilabExec;
+
+import org.scilab.modules.action_binding.highlevel.ScilabInterpreterManagement.InterpreterException;
 /**
  * Export to Csv class
  * @author Sylvestre Ledru
@@ -36,14 +44,14 @@ public final class ExportToCsvAction extends CommonCallBack {
     private static final String CREATE = "Export to CSV";
     private static final int GAP = 5;
 
-    private final SwingScilabVariableEditor editor;
+    private final SwingScilabTab editor;
 
     /**
      * Constructor
      * @param editor the editor
      * @param name the name of the action
      */
-    private ExportToCsvAction(SwingScilabVariableEditor editor, String name) {
+    public ExportToCsvAction(SwingScilabTab editor, String name) {
         super(name);
         this.editor = editor;
     }
@@ -52,7 +60,7 @@ public final class ExportToCsvAction extends CommonCallBack {
      * @param editor the editor
      * @param table where to put the action
      */
-    public static void registerAction(SwingScilabVariableEditor editor, JTable table) {
+    public static void registerAction(SwingScilabTab editor, JTable table) {
         table.getActionMap().put(CREATE, new ExportToCsvAction(editor, CREATE));
         table.getInputMap().put(ScilabKeyStroke.getKeyStroke(KEY), CREATE);
     }
@@ -62,9 +70,34 @@ public final class ExportToCsvAction extends CommonCallBack {
      */
     @Override
     public void callBack() {
-        JTable table = editor.getCurrentTable();
-        SwingEditvarTableModel model = (SwingEditvarTableModel) table.getModel();
-        model.execCommand("__export__csv__=uiputfile();if __export__csv__<>'' then csvWrite(" + model.getVarName() + ", __export__csv__);clear __export__csv__; end;");
+        String scilabCommand = "__export__csv__=uiputfile();if __export__csv__<>'' then csvWrite(%s, __export__csv__);clear __export__csv__; end;";
+        if (editor instanceof SwingScilabVariableEditor) {
+            JTable table = ((SwingScilabVariableEditor)editor).getCurrentTable();
+            SwingEditvarTableModel model = (SwingEditvarTableModel) table.getModel();
+            model.execCommand(String.format(scilabCommand, model.getVarName()));
+        } else {
+            // Browse var
+            String variableName;
+            int clickedRow = ((SwingScilabVariableBrowser)editor).getTable().getSelectedRow();
+
+            // Does nothing if no variable selected
+            if (clickedRow != -1) {
+                variableName = ((SwingScilabVariableBrowser)editor).getTable().getValueAt(clickedRow, BrowseVar.NAME_COLUMN_INDEX).toString();
+                int varType = Integer.parseInt(((SwingScilabVariableBrowser)editor).getTable().getModel().getValueAt(clickedRow, BrowseVar.TYPE_COLUMN_INDEX).toString());
+
+                try {
+                    // The export is only available for double (complex or not) and strings
+                    if (varType == ScilabTypeEnum.sci_matrix.swigValue() || varType == ScilabTypeEnum.sci_strings.swigValue()) {
+                        asynchronousScilabExec(null, String.format(scilabCommand, variableName));
+                    } else {
+                        asynchronousScilabExec(null, "messagebox('" + Messages.gettext("Type not supported for this operation") + "')");
+                    }
+                } catch (InterpreterException e1) {
+                    System.err.println("An error in the interpreter has been catched: " + e1.getLocalizedMessage());
+                }
+
+            }
+        }
     }
 
     /**
@@ -73,7 +106,7 @@ public final class ExportToCsvAction extends CommonCallBack {
      * @param title the menu title
      * @return the menu item
      */
-    public static MenuItem createMenuItem(SwingScilabVariableEditor editor, String title) {
+    public static MenuItem createMenuItem(SwingScilabTab editor, String title) {
         MenuItem menu = ScilabMenuItem.createMenuItem();
         menu.setCallback(new ExportToCsvAction(editor, title));
         menu.setText(title);
@@ -88,7 +121,8 @@ public final class ExportToCsvAction extends CommonCallBack {
      * @param title the menu title
      * @return the menu item
      */
-    public static SwingScilabMenuItem createJMenuItem(SwingScilabVariableEditor editor, String title) {
+    public static SwingScilabMenuItem createJMenuItem(SwingScilabTab editor, String title) {
         return (SwingScilabMenuItem) createMenuItem(editor, title).getAsSimpleMenuItem();
     }
+
 }