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