fixed NPE
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / view / bookmark / BookmarkViewActionGroup.java
index 3af90bd..2cd661c 100644 (file)
@@ -3,10 +3,10 @@ package com.quantum.view.bookmark;
 import java.util.Iterator;
 
 import com.quantum.ImageStore;
+import com.quantum.Messages;
 import com.quantum.actions.AddToQuickListAction;
 import com.quantum.actions.ConnectAction;
 import com.quantum.actions.DeleteAllRowsAction;
-import com.quantum.actions.DeleteBookmarkAction;
 import com.quantum.actions.DisconnectAction;
 import com.quantum.actions.NewBookmarkAction;
 import com.quantum.actions.NextSequenceAction;
@@ -20,12 +20,19 @@ import com.quantum.model.Bookmark;
 import com.quantum.util.versioning.VersioningHelper;
 
 import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
 import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuCreator;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.IToolBarManager;
 import org.eclipse.jface.action.Separator;
 import org.eclipse.jface.viewers.ISelectionProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.events.MenuAdapter;
+import org.eclipse.swt.events.MenuEvent;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
 import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.IViewPart;
 import org.eclipse.ui.IWorkbenchActionConstants;
@@ -36,19 +43,52 @@ import org.eclipse.ui.actions.SelectionProviderAction;
 import org.eclipse.ui.dialogs.PropertyDialogAction;
 
 /**
- * @author BC
+ * This class manages the list of actions for the bookmark view.
+ * 
+ * @author BC Holmes
  */
 public class BookmarkViewActionGroup extends ActionGroup 
     implements BookmarkClipboard {
+       
+       class SQLAction extends Action implements IMenuCreator {
+               public SQLAction() {
+                       setText(Messages.getString(BookmarkViewActionGroup.class, "sqlAction.text"));
+                       setMenuCreator(this);
+               }
+               public void dispose() {
+               }
+               public Menu getMenu(Control parent) {
+                       return null;
+               }
+               public Menu getMenu(Menu parent) {
+                       Menu menu = new Menu(parent);
+                       /**
+                        * Add listener to repopulate the menu each time
+                        * it is shown because the list of bookmarks may have changed.
+                        */
+                       menu.addMenuListener(new MenuAdapter() {
+                               public void menuShown(MenuEvent event) {
+                                       Menu menu = (Menu) event.widget;
+                                       MenuItem[] items = menu.getItems();
+                                       for (int i=0; i < items.length; i++) {
+                                               items[i].dispose();
+                                       }
+                                       fillSQLMenu(menu);
+                               }
+                       });
+                       return menu;
+               }
+       }
         
     private Bookmark bookmarkClipboard;
     
     private Action newBookmarkAction;
+    private Action sqlAction;
     
     // bookmark node actions
     private SelectionListenerAction connectAction;
     private SelectionListenerAction disconnectAction;
-    private SelectionListenerAction deleteBookmarkAction;
+    private SelectionListenerAction deleteAction;
 
     // Query node actions
     private SelectionListenerAction openQueryAction;
@@ -62,6 +102,9 @@ public class BookmarkViewActionGroup extends ActionGroup
     private SelectionListenerAction nextSequenceAction;
     private SelectionListenerAction previousSequenceAction;
     
+
+    private SelectionListenerAction dropAction;
+    
     
     // other actions
     private SelectionListenerAction refreshAction;
@@ -87,7 +130,8 @@ public class BookmarkViewActionGroup extends ActionGroup
         // bookmark actions
         this.connectAction = new ConnectAction(this.viewPart);
         this.disconnectAction = new DisconnectAction(this.viewPart);
-        this.deleteBookmarkAction = new DeleteBookmarkAction(this.viewPart);
+        
+        this.sqlAction = new SQLAction();
 
         // entity actions
         this.previousSequenceAction = new PrevSequenceAction(this.viewPart);
@@ -104,16 +148,22 @@ public class BookmarkViewActionGroup extends ActionGroup
         this.renameAction = new RenameAction(this.viewPart);
         this.copyAction = new CopyAction(this.viewPart, this, selectionProvider);
         this.pasteAction = new PasteAction(this.viewPart, this, selectionProvider);
+        this.deleteAction = new DeleteAction(this.viewPart, selectionProvider);
         this.exportAction = VersioningHelper.createExportResourcesAction(
                        this.viewPart.getViewSite().getWorkbenchWindow());
         this.exportAction.setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.EXPORT));
         
+        this.dropAction = new DropEntityAction(this.viewPart);
+        
         this.propertiesAction = new PropertyDialogAction(
             this.viewPart.getSite().getShell(), selectionProvider);
     }
 
     
     /**
+     * Add all the appropriate actions to the popup menu. This method is 
+     * called whenever someone right-clicks on an object in the bookmark view.
+     * 
      * @see org.eclipse.ui.actions.ActionGroup#fillContextMenu(org.eclipse.jface.action.IMenuManager)
      */
     public void fillContextMenu(IMenuManager menu) {
@@ -133,7 +183,7 @@ public class BookmarkViewActionGroup extends ActionGroup
         // TODO: paste needs to change enablement whenever something is added
         //       to the clipboard
         addToMenu(menu, this.pasteAction);
-        addToMenu(menu, this.deleteBookmarkAction);
+        addToMenu(menu, this.deleteAction);
 
         if (getStructuredSelection().size() == 1 && 
             isEverySelectionInstanceof(BookmarkNode.class)) {
@@ -143,7 +193,7 @@ public class BookmarkViewActionGroup extends ActionGroup
 
         menu.add(new Separator());
 
-        // NOTE: In Eclipse 3.0.0 M6, Export is no longer a sub-class of 
+        // NOTE: In Eclipse 3.0, Export is no longer a sub-class of 
         //       SelectionListenerAction.
         if (this.exportAction != null) {
                this.exportAction.selectionChanged(getStructuredSelection());
@@ -178,6 +228,11 @@ public class BookmarkViewActionGroup extends ActionGroup
             
             addToMenu(menu, this.addToQuickListAction);
             addToMenu(menu, this.removeFromQuickListAction);
+            
+            if (getStructuredSelection().size() == 1) {
+               menu.add(new Separator());
+               menu.add(this.sqlAction);
+            }
         }
         
         if (getStructuredSelection().size() == 1) {
@@ -190,7 +245,19 @@ public class BookmarkViewActionGroup extends ActionGroup
         if (getStructuredSelection().size() == 1) {
             addToMenu(menu, this.propertiesAction);
         }
-        
+    }
+    
+    protected void fillSQLMenu(Menu parent) {
+        if (getStructuredSelection().size() > 0 && 
+                isEverySelectionInstanceof(EntityNode.class)) {
+               addToMenu(parent, this.dropAction);
+        }
+    }
+
+    private void addToMenu(Menu menu, SelectionListenerAction action) {
+        action.selectionChanged(getStructuredSelection());
+               ActionContributionItem item = new ActionContributionItem(action);
+               item.fill(menu, -1);
     }
     
     private void addToMenu(IMenuManager menu, SelectionListenerAction action) {
@@ -244,6 +311,7 @@ public class BookmarkViewActionGroup extends ActionGroup
         toolBar.add(this.newBookmarkAction);
         
         actionBars.setGlobalActionHandler(IWorkbenchActionConstants.COPY, this.copyAction);
+        actionBars.setGlobalActionHandler(IWorkbenchActionConstants.DELETE, this.deleteAction);
     }