Plug the export to CSV action in the variable Browser
[scilab.git] / scilab / modules / ui_data / src / java / org / scilab / modules / ui_data / variableeditor / actions / ExportToCsvAction.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2013 - S/E - Sylvestre Ledru
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 package org.scilab.modules.ui_data.variableeditor.actions;
14
15 import javax.swing.JTable;
16
17 import org.scilab.modules.commons.gui.ScilabKeyStroke;
18 import org.scilab.modules.gui.bridge.menuitem.SwingScilabMenuItem;
19 import org.scilab.modules.gui.bridge.tab.SwingScilabTab;
20 import org.scilab.modules.gui.events.callback.CommonCallBack;
21 import org.scilab.modules.gui.menuitem.MenuItem;
22 import org.scilab.modules.gui.menuitem.ScilabMenuItem;
23 import org.scilab.modules.gui.utils.ScilabSwingUtilities;
24 import org.scilab.modules.localization.Messages;
25 import org.scilab.modules.ui_data.UI_data;
26 import org.scilab.modules.ui_data.datatable.SwingEditvarTableModel;
27 import org.scilab.modules.ui_data.utils.UiDataMessages;
28 import org.scilab.modules.ui_data.variableeditor.SwingScilabVariableEditor;
29 import org.scilab.modules.ui_data.variablebrowser.SwingScilabVariableBrowser;
30 import org.scilab.modules.ui_data.BrowseVar;
31 import org.scilab.modules.types.ScilabTypeEnum;
32
33 import static org.scilab.modules.action_binding.highlevel.ScilabInterpreterManagement.asynchronousScilabExec;
34
35 import org.scilab.modules.action_binding.highlevel.ScilabInterpreterManagement.InterpreterException;
36 /**
37  * Export to Csv class
38  * @author Sylvestre Ledru
39  */
40 @SuppressWarnings(value = { "serial" })
41 public final class ExportToCsvAction extends CommonCallBack {
42
43     private static final String KEY = "OSSCKEY S";
44     private static final String CREATE = "Export to CSV";
45     private static final int GAP = 5;
46
47     private final SwingScilabTab editor;
48
49     /**
50      * Constructor
51      * @param editor the editor
52      * @param name the name of the action
53      */
54     public ExportToCsvAction(SwingScilabTab editor, String name) {
55         super(name);
56         this.editor = editor;
57     }
58
59     /**
60      * @param editor the editor
61      * @param table where to put the action
62      */
63     public static void registerAction(SwingScilabTab editor, JTable table) {
64         table.getActionMap().put(CREATE, new ExportToCsvAction(editor, CREATE));
65         table.getInputMap().put(ScilabKeyStroke.getKeyStroke(KEY), CREATE);
66     }
67
68     /**
69      * {@inheritDoc}
70      */
71     @Override
72     public void callBack() {
73         String scilabCommand = "__export__csv__=uiputfile();if __export__csv__<>'' then csvWrite(%s, __export__csv__);clear __export__csv__; end;";
74         if (editor instanceof SwingScilabVariableEditor) {
75             JTable table = ((SwingScilabVariableEditor)editor).getCurrentTable();
76             SwingEditvarTableModel model = (SwingEditvarTableModel) table.getModel();
77             model.execCommand(String.format(scilabCommand, model.getVarName()));
78         } else {
79             // Browse var
80             String variableName;
81             int clickedRow = ((SwingScilabVariableBrowser)editor).getTable().getSelectedRow();
82
83             // Does nothing if no variable selected
84             if (clickedRow != -1) {
85                 variableName = ((SwingScilabVariableBrowser)editor).getTable().getValueAt(clickedRow, BrowseVar.NAME_COLUMN_INDEX).toString();
86                 int varType = Integer.parseInt(((SwingScilabVariableBrowser)editor).getTable().getModel().getValueAt(clickedRow, BrowseVar.TYPE_COLUMN_INDEX).toString());
87
88                 try {
89                     // The export is only available for double (complex or not) and strings
90                     if (varType == ScilabTypeEnum.sci_matrix.swigValue() || varType == ScilabTypeEnum.sci_strings.swigValue()) {
91                         asynchronousScilabExec(null, String.format(scilabCommand, variableName));
92                     } else {
93                         asynchronousScilabExec(null, "messagebox('" + Messages.gettext("Type not supported for this operation") + "')");
94                     }
95                 } catch (InterpreterException e1) {
96                     System.err.println("An error in the interpreter has been catched: " + e1.getLocalizedMessage());
97                 }
98
99             }
100         }
101     }
102
103     /**
104      * Create a menu item
105      * @param editor the associated editor
106      * @param title the menu title
107      * @return the menu item
108      */
109     public static MenuItem createMenuItem(SwingScilabTab editor, String title) {
110         MenuItem menu = ScilabMenuItem.createMenuItem();
111         menu.setCallback(new ExportToCsvAction(editor, title));
112         menu.setText(title);
113         ((SwingScilabMenuItem) menu.getAsSimpleMenuItem()).setAccelerator(ScilabKeyStroke.getKeyStroke(KEY));
114
115         return menu;
116     }
117
118     /**
119      * Create a menu item as a SwingScilabMenuItem
120      * @param editor the associated editor
121      * @param title the menu title
122      * @return the menu item
123      */
124     public static SwingScilabMenuItem createJMenuItem(SwingScilabTab editor, String title) {
125         return (SwingScilabMenuItem) createMenuItem(editor, title).getAsSimpleMenuItem();
126     }
127
128 }