* Bug 15876 fixed: now struct and cells are reported native in browsevar
[scilab.git] / scilab / modules / ui_data / src / java / org / scilab / modules / ui_data / variablebrowser / SwingScilabVariableBrowser.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2010 - DIGITEO - Bruno JOFRET
4  * Copyright (C) 2010 - DIGITEO - Vincent COUVERT
5  * Copyright (C) 2011 - Calixte DENIZET
6  *
7  * Copyright (C) 2012 - 2016 - Scilab Enterprises
8  *
9  * This file is hereby licensed under the terms of the GNU GPL v2.0,
10  * pursuant to article 5.3.4 of the CeCILL v.2.1.
11  * This file was originally licensed under the terms of the CeCILL v2.1,
12  * and continues to be available under such terms.
13  * For more information, see the COPYING file which you should have received
14  * along with this program.
15  *
16  */
17 package org.scilab.modules.ui_data.variablebrowser;
18
19 import static org.scilab.modules.action_binding.highlevel.ScilabInterpreterManagement.asynchronousScilabExec;
20
21 import java.awt.Color;
22 import java.awt.MouseInfo;
23 import java.awt.event.MouseEvent;
24 import java.awt.event.MouseListener;
25 import java.util.ArrayList;
26 import java.util.HashSet;
27 import java.util.List;
28
29 import javax.swing.JButton;
30 import javax.swing.JScrollPane;
31 import javax.swing.JTable;
32 import javax.swing.ListSelectionModel;
33 import javax.swing.RowFilter;
34 import javax.swing.SwingUtilities;
35 import javax.swing.table.DefaultTableCellRenderer;
36 import javax.swing.table.TableColumn;
37 import javax.swing.table.TableModel;
38 import javax.swing.table.TableRowSorter;
39
40 import org.scilab.modules.action_binding.highlevel.ScilabInterpreterManagement;
41 import org.scilab.modules.action_binding.highlevel.ScilabInterpreterManagement.InterpreterException;
42 import org.scilab.modules.gui.bridge.tab.SwingScilabDockablePanel;
43 import org.scilab.modules.gui.bridge.toolbar.SwingScilabToolBar;
44 import org.scilab.modules.gui.bridge.contextmenu.SwingScilabContextMenu;
45 import org.scilab.modules.gui.contextmenu.ContextMenu;
46 import org.scilab.modules.gui.contextmenu.ScilabContextMenu;
47 import org.scilab.modules.gui.checkboxmenuitem.CheckBoxMenuItem;
48 import org.scilab.modules.gui.menu.Menu;
49 import org.scilab.modules.gui.menu.ScilabMenu;
50 import org.scilab.modules.gui.menubar.MenuBar;
51 import org.scilab.modules.gui.menubar.ScilabMenuBar;
52 import org.scilab.modules.gui.messagebox.ScilabModalDialog;
53 import org.scilab.modules.gui.messagebox.ScilabModalDialog.IconType;
54 import org.scilab.modules.gui.textbox.TextBox;
55 import org.scilab.modules.gui.toolbar.ScilabToolBar;
56 import org.scilab.modules.gui.toolbar.ToolBar;
57 import org.scilab.modules.gui.utils.WindowsConfigurationManager;
58 import org.scilab.modules.localization.Messages;
59 import org.scilab.modules.types.ScilabTypeEnum;
60 import org.scilab.modules.ui_data.BrowseVar;
61 import org.scilab.modules.ui_data.actions.BooleanFilteringAction;
62 import org.scilab.modules.ui_data.actions.CompiledFunctionFilteringAction;
63 import org.scilab.modules.ui_data.actions.DoubleFilteringAction;
64 import org.scilab.modules.ui_data.actions.FunctionLibFilteringAction;
65 import org.scilab.modules.ui_data.actions.GraphicHandlesFilteringAction;
66 import org.scilab.modules.ui_data.actions.HelpAction;
67 import org.scilab.modules.ui_data.actions.ImplicitPolynomialFilteringAction;
68 import org.scilab.modules.ui_data.actions.IntegerFilteringAction;
69 import org.scilab.modules.ui_data.actions.IntrinsicFunctionFilteringAction;
70 import org.scilab.modules.ui_data.actions.ListFilteringAction;
71 import org.scilab.modules.ui_data.actions.MListFilteringAction;
72 import org.scilab.modules.ui_data.actions.MatlabSparseFilteringAction;
73 import org.scilab.modules.ui_data.actions.PointerFilteringAction;
74 import org.scilab.modules.ui_data.actions.PolynomialFilteringAction;
75 import org.scilab.modules.ui_data.actions.ScilabVarFilteringAction;
76 import org.scilab.modules.ui_data.actions.ScilabVarFilteringButtonAction;
77 import org.scilab.modules.ui_data.actions.SparseBoolFilteringAction;
78 import org.scilab.modules.ui_data.actions.SparseFilteringAction;
79 import org.scilab.modules.ui_data.actions.StringFilteringAction;
80 import org.scilab.modules.ui_data.actions.TListFilteringAction;
81 import org.scilab.modules.ui_data.datatable.SwingTableModel;
82 import org.scilab.modules.ui_data.utils.UiDataMessages;
83 import org.scilab.modules.ui_data.variableeditor.actions.ExportToCsvAction;
84 import org.scilab.modules.ui_data.variableeditor.actions.PlotAction;
85 import org.scilab.modules.ui_data.variablebrowser.actions.CloseAction;
86 import org.scilab.modules.ui_data.variablebrowser.actions.DeleteAction;
87 import org.scilab.modules.ui_data.variablebrowser.actions.ModifyAction;
88 import org.scilab.modules.ui_data.variablebrowser.actions.RefreshAction;
89 import org.scilab.modules.ui_data.variablebrowser.rowfilter.VariableBrowserRowDataFilter;
90 import org.scilab.modules.ui_data.variablebrowser.rowfilter.VariableBrowserRowTypeFilter;
91
92 /**
93  * Swing implementation of Scilab Variable browser
94  * uses JTable
95  */
96 public final class SwingScilabVariableBrowser extends SwingScilabDockablePanel implements SimpleVariableBrowser {
97
98     public static final String VARBROWSERUUID = "3b649047-6a71-4998-bd8e-00d367a4793c";
99
100     private static final long serialVersionUID = 2169382559550113917L;
101
102     private SwingTableModel<Object> dataModel;
103     private JTable table;
104
105     private MenuBar menuBar;
106     private Menu fileMenu;
107     private Menu helpMenu;
108     private Menu filterMenu;
109     private CheckBoxMenuItem filterDoubleCheckBox;
110     private CheckBoxMenuItem filterPolynomialCheckBox;
111     private CheckBoxMenuItem filterScilabVarCheckBox;
112     private CheckBoxMenuItem filterBooleanCheckBox;
113     private CheckBoxMenuItem filterSparseCheckBox;
114     private CheckBoxMenuItem filterSparseBoolCheckBox;
115     private CheckBoxMenuItem filterIntegerCheckBox;
116     private CheckBoxMenuItem filterGraphicHandlesCheckBox;
117     private CheckBoxMenuItem filterStringCheckBox;
118     private CheckBoxMenuItem filtercompiledFuncCheckBox;
119     private CheckBoxMenuItem filterFunctionLibCheckBox;
120     private CheckBoxMenuItem filterListCheckBox;
121     private CheckBoxMenuItem filterTListCheckBox;
122     private CheckBoxMenuItem filterMListCheckBox;
123     private CheckBoxMenuItem filterPointerCheckBox;
124     private CheckBoxMenuItem filterIntrinsicFunctionCheckBox;
125     private CheckBoxMenuItem filterMatlabSparseCheckBox;
126     private CheckBoxMenuItem filterImplicitPolynomialCheckBox;
127     private JButton filteringButton;
128
129     private boolean isSetData = false;
130
131     private TableRowSorter < ? > rowSorter;
132
133     /**
134      * Create a JTable with data Model.
135      * @param columnsName : Titles of JTable columns.
136      */
137     public SwingScilabVariableBrowser(String[] columnsName, int[] aligment) {
138         super(UiDataMessages.VARIABLE_BROWSER, VARBROWSERUUID);
139
140         setAssociatedXMLIDForHelp("browsevar");
141
142         buildMenuBar();
143         addMenuBar(menuBar);
144
145         ToolBar toolBar = ScilabToolBar.createToolBar();
146         SwingScilabToolBar stb = (SwingScilabToolBar) toolBar.getAsSimpleToolBar();
147         stb.add(RefreshAction.createButton(UiDataMessages.REFRESH));
148         stb.addSeparator();
149         stb.add(ModifyAction.createButton(this, UiDataMessages.MODIFY));
150         stb.add(DeleteAction.createButton(this, UiDataMessages.DELETE));
151         stb.addSeparator();
152         stb.add(HelpAction.createButton(UiDataMessages.HELP));
153         filteringButton = ScilabVarFilteringButtonAction.createButton("Show/hide Scilab variable");
154         //        toolBar.add(filteringButton);
155         addToolBar(toolBar);
156
157         dataModel = new SwingTableModel<Object>(columnsName);
158
159         table = new JTable(dataModel) {
160             //Implement table cell tool tips.
161             public String getToolTipText(MouseEvent e) {
162                 String tip = null;
163                 TableModel model = ((JTable) e.getSource()).getModel();
164                 java.awt.Point p = e.getPoint();
165                 int rowIndex = rowAtPoint(p);
166
167                 if (rowIndex >= 0) {
168                     rowIndex = convertRowIndexToModel(rowIndex);
169                     int colIndex = columnAtPoint(p);
170                     if (colIndex == BrowseVar.TYPE_DESC_COLUMN_INDEX) { /* Scilab type */
171                         try {
172                             tip = Messages.gettext("Scilab type:") + " " + model.getValueAt(rowIndex, BrowseVar.TYPE_COLUMN_INDEX).toString();
173                         } catch (IllegalArgumentException exception) {
174                             /* If the type is not known/managed, don't crash */
175                         }
176                     } else {
177
178                         if (colIndex == BrowseVar.SIZE_COLUMN_INDEX) {
179                             /* Use the getModel() method because the
180                              * column 5 has been removed from display
181                              * but still exist in the model */
182                             tip = Messages.gettext("Bytes:") + " " + model.getValueAt(rowIndex, BrowseVar.BYTES_COLUMN_INDEX).toString();
183                         }
184                     }
185                 }
186                 return tip;
187             }
188         };
189
190         table.setFillsViewportHeight(true);
191         table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
192         table.setAutoCreateRowSorter(true);
193
194         /* Size of the icon column */
195         table.getColumnModel().getColumn(0).setPreferredWidth(30);
196
197         /* Hide the columns. But keep it in memory for the tooltip */
198         TableColumn column = table.getColumnModel().getColumn(BrowseVar.NB_COLS_INDEX);
199         table.removeColumn(column);
200
201         /* The order to removing does matter since it changes the positions */
202
203         column = table.getColumnModel().getColumn(BrowseVar.NB_ROWS_INDEX);
204         table.removeColumn(column);
205
206         column = table.getColumnModel().getColumn(BrowseVar.TYPE_COLUMN_INDEX);
207         table.removeColumn(column);
208
209         column = table.getColumnModel().getColumn(BrowseVar.FROM_SCILAB_COLUMN_INDEX);
210         table.removeColumn(column);
211
212         column = table.getColumnModel().getColumn(BrowseVar.BYTES_COLUMN_INDEX);
213         table.removeColumn(column);
214
215         table.addMouseListener(new BrowseVarMouseListener());
216         // Mouse selection mode
217         table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
218         table.setCellSelectionEnabled(true);
219
220         table.setBackground(Color.WHITE);
221         if (table.getGridColor().equals(Color.WHITE)) {
222             table.setGridColor(new Color(128, 128, 128));
223         }
224         table.setShowHorizontalLines(true);
225         table.setShowVerticalLines(true);
226
227         for (int i = 0; i < aligment.length; i++) {
228             align(table, columnsName[i], aligment[i]);
229         }
230
231         // Plug the shortcuts
232         ExportToCsvAction.registerAction(this, table);
233
234         JScrollPane scrollPane = new JScrollPane(table);
235         setContentPane(scrollPane);
236         WindowsConfigurationManager.restorationFinished(this);
237     }
238
239     /**
240      * {@inheritDoc}
241      */
242     public void addInfoBar(TextBox infoBarToAdd) {
243         setInfoBar(infoBarToAdd);
244     }
245
246     /**
247      * {@inheritDoc}
248      */
249     public void addMenuBar(MenuBar menuBarToAdd) {
250         setMenuBar(menuBarToAdd);
251     }
252
253     /**
254      * {@inheritDoc}
255      */
256     public void addToolBar(ToolBar toolBarToAdd) {
257         setToolBar(toolBarToAdd);
258     }
259
260     /**
261      * {@inheritDoc}
262      */
263     public void setColumnNames(String[] columnNames) {
264         dataModel.setColumnNames(columnNames);
265     }
266
267     /**
268      * {@inheritDoc}
269      */
270     public void setData(Object[][] data) {
271         isSetData = true;
272         dataModel.setData(data);
273         rowSorter = new TableRowSorter<TableModel>(dataModel);
274         this.updateRowFiltering();
275     }
276
277     private static void align(JTable table, String name, int alignment) {
278         if (alignment != -1) {
279             DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
280             renderer.setHorizontalAlignment(alignment);
281             try {
282                 TableColumn col = table.getColumn(name);
283                 if (col != null) {
284                     col.setCellRenderer(renderer);
285                 }
286             } catch (IllegalArgumentException e) { }
287         }
288     }
289
290     /**
291      * Update the display after filtering
292      * @see org.scilab.modules.ui_data.variablebrowser.SimpleVariableBrowser#updateRowFiltering()
293      */
294     public void updateRowFiltering() {
295         if (isSetData == false) { /* If the pull of the data has not been done, do it (please) */
296             try {
297                 ScilabInterpreterManagement.synchronousScilabExec("browsevar");
298                 isSetData = true;
299             } catch (InterpreterException e) {
300                 System.err.println(e);
301             }
302         }
303         VariableBrowserRowTypeFilter rowTypeFilter = new VariableBrowserRowTypeFilter(getFilteredTypeValues());
304         VariableBrowserRowDataFilter rowDataFilter = new VariableBrowserRowDataFilter(getFilteredDataValues());
305
306         List<RowFilter<Object, Object>> filters = new ArrayList<RowFilter<Object, Object>>();
307         RowFilter<Object, Object> compoundRowFilter = null;
308         filters.add(rowTypeFilter);
309         filters.add(rowDataFilter);
310         compoundRowFilter = RowFilter.andFilter(filters);
311
312         rowSorter.setRowFilter(compoundRowFilter);
313         table.setRowSorter(rowSorter);
314     }
315
316     /**
317      * MouseListener inner class
318      */
319     private class BrowseVarMouseListener implements MouseListener {
320
321         /**
322          * Contructor
323          */
324         public BrowseVarMouseListener() {
325
326         }
327
328         /**
329          * Mouse CLICKED event handling
330          * @param e the event
331          * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
332          */
333         public void mouseClicked(MouseEvent e) {
334
335             // Right click management
336             if ((e.getClickCount() == 1 && SwingUtilities.isRightMouseButton(e)) || e.isPopupTrigger()) {
337
338
339                 int clickedRow = ((JTable) e.getSource()).rowAtPoint(e.getPoint());
340                 // Does nothing if no variable selected
341                 if (clickedRow != -1) {
342                     // Right click ? We force the selection of the current row
343                     table.setRowSelectionInterval(clickedRow, clickedRow);
344                     table.setEditingRow(clickedRow);
345
346                     displayContextMenu();
347                 }
348             }
349
350             if (e.getClickCount() >= 2) {
351                 int clickedRow = ((JTable) e.getSource()).rowAtPoint(e.getPoint());
352                 if (clickedRow != -1) {
353                     String variableName = table.getValueAt(clickedRow, BrowseVar.NAME_COLUMN_INDEX).toString();
354
355                     String variableVisibility = ((JTable) e.getSource())
356                                                 .getValueAt(((JTable) e.getSource()).getSelectedRow(), BrowseVar.VISIBILITY_COLUMN_INDEX).toString();
357                     SwingScilabVariableBrowser.this.startEditVar(variableVisibility, variableName);
358                 }
359             }
360         }
361
362         /**
363          * Mouse ENTERED event handling
364          * @param e the event
365          * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
366          */
367         public void mouseEntered(MouseEvent e) {
368         }
369
370         /**
371          * Mouse EXITED event handling
372          * @param e the event
373          * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
374          */
375         public void mouseExited(MouseEvent e) {
376         }
377
378         /**
379          * Mouse PRESSED event handling
380          * @param e the event
381          * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
382          */
383         public void mousePressed(MouseEvent e) {
384         }
385
386         /**
387          * Mouse RELEASED event handling
388          * @param e the event
389          * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
390          */
391         public void mouseReleased(MouseEvent e) {
392
393         }
394
395         /**
396          * Create and display the context menu
397          */
398         private void displayContextMenu() {
399             ContextMenu menu = ScilabContextMenu.createContextMenu();
400             ModifyAction modify = new ModifyAction(SwingScilabVariableBrowser.this);
401             menu.add(modify.createMenuItem());
402
403             DeleteAction delete = new DeleteAction(SwingScilabVariableBrowser.this);
404             menu.add(delete.createMenuItem());
405
406             menu.add(ExportToCsvAction.createMenuItem(SwingScilabVariableBrowser.this, UiDataMessages.EXPORTCSV));
407
408             Menu menuPlot = ScilabMenu.createMenu();
409             menuPlot.setText(UiDataMessages.PLOTALL);
410             menuPlot.add(PlotAction.createMenuItem((SwingScilabDockablePanel)SwingScilabVariableBrowser.this, "plot2d", false));
411             menuPlot.add(PlotAction.createMenuItem((SwingScilabDockablePanel)SwingScilabVariableBrowser.this, "Matplot", false));
412             menuPlot.add(PlotAction.createMenuItem((SwingScilabDockablePanel)SwingScilabVariableBrowser.this, "grayplot", false));
413             menuPlot.add(PlotAction.createMenuItem((SwingScilabDockablePanel)SwingScilabVariableBrowser.this, "Sgrayplot", false));
414             menuPlot.add(PlotAction.createMenuItem((SwingScilabDockablePanel)SwingScilabVariableBrowser.this, "champ", false));
415             menuPlot.add(PlotAction.createMenuItem((SwingScilabDockablePanel)SwingScilabVariableBrowser.this, "histplot", false));
416             menuPlot.add(PlotAction.createMenuItem((SwingScilabDockablePanel)SwingScilabVariableBrowser.this, "mesh", false));
417             menuPlot.add(PlotAction.createMenuItem((SwingScilabDockablePanel)SwingScilabVariableBrowser.this, "surf", false));
418             menuPlot.add(PlotAction.createMenuItem((SwingScilabDockablePanel)SwingScilabVariableBrowser.this, "hist3d", false));
419             menuPlot.add(PlotAction.createMenuItem((SwingScilabDockablePanel)SwingScilabVariableBrowser.this, "contour2d", false));
420             menuPlot.add(PlotAction.createMenuItem((SwingScilabDockablePanel)SwingScilabVariableBrowser.this, "pie", false));
421             menu.add(menuPlot);
422
423             menu.setVisible(true);
424
425             ((SwingScilabContextMenu) menu.getAsSimpleContextMenu()).setLocation(
426                 MouseInfo.getPointerInfo().getLocation().x,
427                 MouseInfo.getPointerInfo().getLocation().y);
428
429         }
430
431
432     }
433
434     /**
435      * Creates the menuBar
436      */
437     public void buildMenuBar() {
438         menuBar = ScilabMenuBar.createMenuBar();
439
440         fileMenu = ScilabMenu.createMenu();
441         fileMenu.setText(UiDataMessages.FILE);
442         fileMenu.setMnemonic('F');
443         fileMenu.add(RefreshAction.createMenuItem(UiDataMessages.REFRESH));
444         fileMenu.addSeparator();
445         fileMenu.add(CloseAction.createMenu());
446
447         menuBar.add(fileMenu);
448
449         filterMenu = ScilabMenu.createMenu();
450         filterMenu.setText(UiDataMessages.FILTER);
451         filterMenu.setMnemonic('I');
452
453         filterScilabVarCheckBox = ScilabVarFilteringAction.createCheckBoxMenu();
454         filterScilabVarCheckBox.setChecked(true);
455         filterMenu.add(filterScilabVarCheckBox);
456
457         filterMenu.addSeparator();
458
459         filterBooleanCheckBox = BooleanFilteringAction.createCheckBoxMenu();
460         filterBooleanCheckBox.setChecked(true);
461         filterMenu.add(filterBooleanCheckBox);
462
463         filterDoubleCheckBox = DoubleFilteringAction.createCheckBoxMenu();
464         filterDoubleCheckBox.setChecked(true);
465         filterMenu.add(filterDoubleCheckBox);
466
467         filterPolynomialCheckBox = PolynomialFilteringAction.createCheckBoxMenu();
468         filterPolynomialCheckBox.setChecked(true);
469         filterMenu.add(filterPolynomialCheckBox);
470
471         filterFunctionLibCheckBox = FunctionLibFilteringAction.createCheckBoxMenu();
472         filterMenu.add(filterFunctionLibCheckBox);
473
474         filterStringCheckBox = StringFilteringAction.createCheckBoxMenu();
475         filterStringCheckBox.setChecked(true);
476         filterMenu.add(filterStringCheckBox);
477
478         filterSparseCheckBox = SparseFilteringAction.createCheckBoxMenu();
479         filterSparseCheckBox.setChecked(true);
480         filterMenu.add(filterSparseCheckBox);
481
482         filterSparseBoolCheckBox = SparseBoolFilteringAction.createCheckBoxMenu();
483         filterSparseBoolCheckBox.setChecked(true);
484         filterMenu.add(filterSparseBoolCheckBox);
485
486         filterIntegerCheckBox = IntegerFilteringAction.createCheckBoxMenu();
487         filterIntegerCheckBox.setChecked(true);
488         filterMenu.add(filterIntegerCheckBox);
489
490         filterGraphicHandlesCheckBox = GraphicHandlesFilteringAction.createCheckBoxMenu();
491         filterGraphicHandlesCheckBox.setChecked(true);
492         filterMenu.add(filterGraphicHandlesCheckBox);
493
494         filtercompiledFuncCheckBox = CompiledFunctionFilteringAction.createCheckBoxMenu();
495         filterMenu.add(filtercompiledFuncCheckBox);
496
497         filterListCheckBox = ListFilteringAction.createCheckBoxMenu();
498         filterListCheckBox.setChecked(true);
499         filterMenu.add(filterListCheckBox);
500
501         filterTListCheckBox = TListFilteringAction.createCheckBoxMenu();
502         filterTListCheckBox.setChecked(true);
503         filterMenu.add(filterTListCheckBox);
504
505         filterMListCheckBox = MListFilteringAction.createCheckBoxMenu();
506         filterMListCheckBox.setChecked(true);
507         filterMenu.add(filterMListCheckBox);
508
509         filterPointerCheckBox = PointerFilteringAction.createCheckBoxMenu();
510         filterPointerCheckBox.setChecked(true);
511         filterMenu.add(filterPointerCheckBox);
512
513         filterIntrinsicFunctionCheckBox = IntrinsicFunctionFilteringAction.createCheckBoxMenu();
514         filterMenu.add(filterIntrinsicFunctionCheckBox);
515
516         filterMatlabSparseCheckBox = MatlabSparseFilteringAction.createCheckBoxMenu();
517         filterMenu.add(filterMatlabSparseCheckBox);
518
519         filterImplicitPolynomialCheckBox = ImplicitPolynomialFilteringAction.createCheckBoxMenu();
520         filterMenu.add(filterImplicitPolynomialCheckBox);
521
522         menuBar.add(filterMenu);
523
524         helpMenu = ScilabMenu.createMenu();
525         helpMenu.setText("?");
526         helpMenu.setMnemonic('?');
527         helpMenu.add(HelpAction.createMenuItem(UiDataMessages.HELP));
528         menuBar.add(helpMenu);
529     }
530
531
532     /**
533      * Filter management of data (Scilab or user data)
534      * @return the set of filtered values
535      */
536     public boolean getFilteredDataValues() {
537         return filterScilabVarCheckBox.isChecked();
538
539     }
540
541     /**
542      * Filter management of type
543      * @return the set of filtered values
544      */
545     public HashSet<ScilabTypeEnum> getFilteredTypeValues() {
546         HashSet<ScilabTypeEnum> filteredValues = new HashSet<ScilabTypeEnum>();
547         // TODO to replace later by something which smells less
548         if (!filterBooleanCheckBox.isChecked()) {
549             filteredValues.add(ScilabTypeEnum.sci_boolean);
550         }
551
552         if (!filterDoubleCheckBox.isChecked()) {
553             filteredValues.add(ScilabTypeEnum.sci_matrix);
554         }
555
556         if (!filterFunctionLibCheckBox.isChecked()) {
557             filteredValues.add(ScilabTypeEnum.sci_lib);
558         }
559
560         if (!filterStringCheckBox.isChecked()) {
561             filteredValues.add(ScilabTypeEnum.sci_strings);
562         }
563
564         if (!filterPolynomialCheckBox.isChecked()) {
565             filteredValues.add(ScilabTypeEnum.sci_poly);
566         }
567
568         if (!filterSparseCheckBox.isChecked()) {
569             filteredValues.add(ScilabTypeEnum.sci_sparse);
570         }
571
572         if (!filterSparseBoolCheckBox.isChecked()) {
573             filteredValues.add(ScilabTypeEnum.sci_boolean_sparse);
574         }
575
576         if (!filterIntegerCheckBox.isChecked()) {
577             filteredValues.add(ScilabTypeEnum.sci_ints);
578         }
579
580         if (!filterGraphicHandlesCheckBox.isChecked()) {
581             filteredValues.add(ScilabTypeEnum.sci_handles);
582         }
583
584         if (!filtercompiledFuncCheckBox.isChecked()) {
585             filteredValues.add(ScilabTypeEnum.sci_c_function);
586         }
587
588         if (!filterListCheckBox.isChecked()) {
589             filteredValues.add(ScilabTypeEnum.sci_list);
590         }
591
592         if (!filterTListCheckBox.isChecked()) {
593             filteredValues.add(ScilabTypeEnum.sci_tlist);
594         }
595
596         if (!filterMListCheckBox.isChecked()) {
597             filteredValues.add(ScilabTypeEnum.sci_mlist);
598         }
599
600         if (!filterPointerCheckBox.isChecked()) {
601             filteredValues.add(ScilabTypeEnum.sci_pointer);
602         }
603
604         if (!filterIntrinsicFunctionCheckBox.isChecked()) {
605             filteredValues.add(ScilabTypeEnum.sci_intrinsic_function);
606         }
607
608         if (!filterMatlabSparseCheckBox.isChecked()) {
609             filteredValues.add(ScilabTypeEnum.sci_matlab_sparse);
610         }
611
612         if (!filterImplicitPolynomialCheckBox.isChecked()) {
613             filteredValues.add(ScilabTypeEnum.sci_implicit_poly);
614         }
615
616         return filteredValues;
617     }
618
619     /**
620      * Get this browser as a Tab object
621      * @return the tab
622      */
623     public SwingScilabDockablePanel getBrowserTab() {
624         return this;
625     }
626
627
628     /**
629      * Return the variable Browser Table
630      * @return The variable Browser Table
631      */
632     public JTable getTable() {
633         return table;
634     }
635
636     /**
637      * Start the variable editor
638      *
639      * @param variableVisibility the visibility of the variable
640      * @param variableName The variable name
641      */
642     public void startEditVar(String variableVisibility, String variableName) {
643         // Global variables are not editable yet
644         if (variableVisibility.equals("global")) {
645             ScilabModalDialog.show(getBrowserTab(),
646                                    UiDataMessages.GLOBAL_NOT_EDITABLE,
647                                    UiDataMessages.VARIABLE_EDITOR,
648                                    IconType.ERROR_ICON);
649             return;
650         }
651
652         try {
653             asynchronousScilabExec(null,
654                                    "if exists(\"" + variableName + "\") == 1 then "
655                                    + "  try "
656                                    + "    editvar(\"" + variableName + "\"); "
657                                    + "  catch "
658                                    + "    messagebox(\"Variables of type \"\"\" + typeof ("
659                                    + variableName + ") + \"\"\" can not be edited.\""
660                                    + ",\"" + UiDataMessages.VARIABLE_EDITOR + "\", \"error\", \"modal\");"
661                                    + "    clear ans;"   // clear return value of messagebox
662                                    + "  end "
663                                    + "else "
664                                    + "  messagebox(\"Variable \"\""
665                                    + variableName + "\"\" no more exists.\""
666                                    + ",\"" + UiDataMessages.VARIABLE_EDITOR + "\", \"error\", \"modal\");"
667                                    + "  clear ans;"  // clear return value of messagebox
668                                    + "  browsevar();" // Reload browsevar to remove cleared variables
669                                    + "end");
670         } catch (InterpreterException e1) {
671             System.err.println("An error in the interpreter has been catched: " + e1.getLocalizedMessage());
672         }
673     }
674
675 }