* The deletion of variables from the Variable Browser is now possible. 83/11283/6
Sylvestre Ledru [Mon, 15 Apr 2013 16:48:09 +0000 (18:48 +0200)]
(right click or in the menubar)
  See bug #9447

Change-Id: I7c7e374425e915141d7ece469c5a2d248a2fbb53

scilab/CHANGES_5.5.X
scilab/modules/ui_data/src/java/org/scilab/modules/ui_data/utils/UiDataMessages.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/variablebrowser/actions/DeleteAction.java [new file with mode: 0644]

index 18508f5..73a5425 100644 (file)
@@ -28,6 +28,9 @@ BDF methods with direct and preconditioned Krylov linear solvers, from ODEPACK.
 * isnum has been redesigned in native code. Up to 130x performance
   improvements. See bug #10404
 
+* The deletion of variables from the Variable Browser is now possible.
+  See bug #9447
+
 
 
 Syntax changes
index b2ef2ec..a3dd201 100644 (file)
@@ -31,6 +31,7 @@ public final class UiDataMessages {
     /* File menu */
     public static final String FILE = Messages.gettext("File");
     public static final String CLOSE = Messages.gettext("Close");
+    public static final String DELETE = Messages.gettext("Delete");
     public static final String FILTER = Messages.gettext("Filter");
 
     public static final String SCILABVAR = Messages.gettext("Hide Scilab variables");
index 4579434..c05d842 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2010 - DIGITEO - Bruno JOFRET
  * Copyright (C) 2010 - DIGITEO - Vincent COUVERT
@@ -16,10 +16,15 @@ package org.scilab.modules.ui_data.variablebrowser;
 import static org.scilab.modules.action_binding.highlevel.ScilabInterpreterManagement.asynchronousScilabExec;
 
 import java.awt.Color;
+import java.awt.MouseInfo;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
+
+import javax.swing.ActionMap;
+import javax.swing.SwingUtilities;
+
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -36,6 +41,9 @@ import javax.swing.table.TableRowSorter;
 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.contextmenu.ContextMenu;
+import org.scilab.modules.gui.contextmenu.ScilabContextMenu;
 import org.scilab.modules.gui.checkboxmenuitem.CheckBoxMenuItem;
 import org.scilab.modules.gui.menu.Menu;
 import org.scilab.modules.gui.menu.ScilabMenu;
@@ -75,6 +83,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.variablebrowser.actions.CloseAction;
+import org.scilab.modules.ui_data.variablebrowser.actions.DeleteAction;
 import org.scilab.modules.ui_data.variablebrowser.actions.RefreshAction;
 import org.scilab.modules.ui_data.variablebrowser.rowfilter.VariableBrowserRowDataFilter;
 import org.scilab.modules.ui_data.variablebrowser.rowfilter.VariableBrowserRowTypeFilter;
@@ -136,6 +145,8 @@ public final class SwingScilabVariableBrowser extends SwingScilabTab implements
         ToolBar toolBar = ScilabToolBar.createToolBar();
         toolBar.add(RefreshAction.createButton(UiDataMessages.REFRESH));
         toolBar.addSeparator();
+        toolBar.add(DeleteAction.createButton(this, UiDataMessages.DELETE));
+        toolBar.addSeparator();
         toolBar.add(HelpAction.createButton(UiDataMessages.HELP));
         filteringButton = ScilabVarFilteringButtonAction.createButton("Show/hide Scilab variable");
         //        toolBar.add(filteringButton);
@@ -308,15 +319,22 @@ public final class SwingScilabVariableBrowser extends SwingScilabTab implements
          * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
          */
         public void mouseClicked(MouseEvent e) {
+
+            // Right click management
+            if ((e.getClickCount() == 1 && SwingUtilities.isRightMouseButton(e)) || e.isPopupTrigger()) {
+
+
+                int clickedRow = ((JTable) e.getSource()).rowAtPoint(e.getPoint());
+                // Does nothing if no variable selected
+                if (clickedRow != -1) {
+                    displayContextMenu();
+                }
+            }
+
             if (e.getClickCount() >= 2) {
                 int clickedRow = ((JTable) e.getSource()).rowAtPoint(e.getPoint());
                 if (clickedRow != -1) {
                     String variableName = ((JTable) e.getSource()).getValueAt(clickedRow, 1).toString();
-                    final ActionListener action = new ActionListener() {
-                        public void actionPerformed(ActionEvent e) {
-
-                        }
-                    };
 
                     String variableVisibility = ((JTable) e.getSource())
                                                 .getValueAt(((JTable) e.getSource()).getSelectedRow(), BrowseVar.VISIBILITY_COLUMN_INDEX).toString();
@@ -331,7 +349,7 @@ public final class SwingScilabVariableBrowser extends SwingScilabTab implements
                     }
 
                     try {
-                        asynchronousScilabExec(action,
+                        asynchronousScilabExec(null,
                                                "if exists(\"" + variableName + "\") == 1 then "
                                                + "  try "
                                                + "    editvar(\"" + variableName + "\"); "
@@ -387,6 +405,25 @@ public final class SwingScilabVariableBrowser extends SwingScilabTab implements
         public void mouseReleased(MouseEvent e) {
 
         }
+
+        /**
+         * Create and display the context menu
+         */
+        private void displayContextMenu() {
+            ContextMenu menu = ScilabContextMenu.createContextMenu();
+
+            DeleteAction delete = new DeleteAction(SwingScilabVariableBrowser.this);
+            menu.add(delete.createMenuItem());
+
+            menu.setVisible(true);
+
+            ((SwingScilabContextMenu) menu.getAsSimpleContextMenu()).setLocation(
+                MouseInfo.getPointerInfo().getLocation().x,
+                MouseInfo.getPointerInfo().getLocation().y);
+
+        }
+
+
     }
 
     /**
@@ -588,4 +625,13 @@ public final class SwingScilabVariableBrowser extends SwingScilabTab implements
     public SwingScilabTab getBrowserTab() {
         return this;
     }
+
+
+    /**
+     * Return the variable Browser Table
+     * @return The variable Browser Table
+     */
+    public JTable getTable() {
+        return table;
+    }
 }
diff --git a/scilab/modules/ui_data/src/java/org/scilab/modules/ui_data/variablebrowser/actions/DeleteAction.java b/scilab/modules/ui_data/src/java/org/scilab/modules/ui_data/variablebrowser/actions/DeleteAction.java
new file mode 100644 (file)
index 0000000..58c8aa9
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2010 - DIGITEO - Vincent COUVERT
+ * Copyright (C) 2013 - S/E - Sylvestre Ledru
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+package org.scilab.modules.ui_data.variablebrowser.actions;
+
+import org.scilab.modules.ui_data.variablebrowser.SwingScilabVariableBrowser;
+import java.lang.reflect.InvocationTargetException;
+import java.awt.event.ActionEvent;
+import javax.swing.ImageIcon;
+import javax.swing.KeyStroke;
+import java.awt.event.ActionEvent;
+import java.awt.event.MouseEvent;
+import java.awt.event.ActionListener;
+import javax.swing.JTable;
+
+import org.scilab.modules.ui_data.utils.UiDataMessages;
+
+import static org.scilab.modules.action_binding.highlevel.ScilabInterpreterManagement.asynchronousScilabExec;
+
+import org.scilab.modules.action_binding.highlevel.ScilabInterpreterManagement.InterpreterException;
+
+import org.scilab.modules.gui.bridge.pushbutton.SwingScilabPushButton;
+import org.scilab.modules.gui.bridge.menuitem.SwingScilabMenuItem;
+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.pushbutton.PushButton;
+import org.scilab.modules.gui.pushbutton.ScilabPushButton;
+import org.scilab.modules.gui.utils.ScilabSwingUtilities;
+
+/**
+ * Manage Delete Actions
+ * @author Vincent COUVERT
+ */
+public final class DeleteAction extends CommonCallBack {
+
+    private static final long serialVersionUID = 1L;
+
+    private static ImageIcon icon = new ImageIcon(ScilabSwingUtilities.findIcon("edit-delete"));
+
+    private static final char MNEMONIC = 'D';
+
+    private static final String KEY = "DELETE";
+    private static final String SUPPR = "Suppr";
+
+    private final SwingScilabVariableBrowser variableBrowser;
+
+    /**
+     * Constructor
+     */
+    public DeleteAction(SwingScilabVariableBrowser variableBrowser) {
+        super("");
+        this.variableBrowser = variableBrowser;
+    }
+
+    /**
+     * Create a button for a tool bar
+     * @param title tooltip for the button
+     * @return the button
+     */
+    public static PushButton createButton(SwingScilabVariableBrowser variableBrowser, String title) {
+        PushButton button = ScilabPushButton.createPushButton();
+        ((SwingScilabPushButton) button.getAsSimplePushButton()).addActionListener(new DeleteAction(variableBrowser));
+        button.setToolTipText(title);
+        ((SwingScilabPushButton) button.getAsSimplePushButton()).setIcon(icon);
+
+        return button;
+    }
+
+    /**
+     * Create the associated menu
+     * @return the menu
+     */
+    public MenuItem createMenuItem() {
+        MenuItem menuItem = ScilabMenuItem.createMenuItem();
+        menuItem.setText(UiDataMessages.DELETE + " '" + getSelectedVariable() + "'");
+        menuItem.setMnemonic(MNEMONIC);
+        menuItem.setCallback(this);
+        ((SwingScilabMenuItem) menuItem.getAsSimpleMenuItem()).setIcon(icon);
+        return menuItem;
+    }
+
+
+    /**
+     * Action!
+     * @see org.scilab.modules.gui.events.callback.CallBack#callBack()
+     */
+    @Override
+    public void callBack() {
+        try {
+            asynchronousScilabExec(null, "clear('" + getSelectedVariable() + "'); updatebrowsevar()");
+        } catch (InterpreterException e1) {
+            System.err.println("An error in the interpreter has been catched: " + e1.getLocalizedMessage());
+        }
+    }
+
+    private String getSelectedVariable() {
+
+        int clickedRow = variableBrowser.getTable().getSelectedRow();
+        // Does nothing if no variable selected
+        if (clickedRow != -1) {
+            return variableBrowser.getTable().getValueAt(clickedRow, 1).toString();
+        }
+        return "";
+    }
+}