intial source from http://www.sf.net/projects/wdte
[phpeclipse.git] / net.sourceforge.phpeclipse.webbrowser / src / net / sourceforge / phpeclipse / webbrowser / internal / SwitchBrowserWorkbenchAction.java
diff --git a/net.sourceforge.phpeclipse.webbrowser/src/net/sourceforge/phpeclipse/webbrowser/internal/SwitchBrowserWorkbenchAction.java b/net.sourceforge.phpeclipse.webbrowser/src/net/sourceforge/phpeclipse/webbrowser/internal/SwitchBrowserWorkbenchAction.java
new file mode 100644 (file)
index 0000000..7b93cea
--- /dev/null
@@ -0,0 +1,138 @@
+/**
+ * Copyright (c) 2003 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ *    IBM - Initial API and implementation
+ */
+package net.sourceforge.phpeclipse.webbrowser.internal;
+
+import java.util.Iterator;
+
+import net.sourceforge.phpeclipse.webbrowser.IWebBrowser;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+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.*;
+/**
+ * Action to open the Web broswer.
+ */
+public class SwitchBrowserWorkbenchAction implements IWorkbenchWindowPulldownDelegate2 {
+       /**
+        * The menu created by this action
+        */
+       private Menu fMenu;
+               
+       protected boolean recreateMenu = false;
+
+       /**
+        * SwitchBrowserWorkbenchAction constructor comment.
+        */
+       public SwitchBrowserWorkbenchAction() {
+               super();
+       }
+
+       public void dispose() {
+               setMenu(null);
+       }
+       
+       /**
+        * Sets this action's drop-down menu, disposing the previous menu.
+        * 
+        * @param menu the new menu
+        */
+       private void setMenu(Menu menu) {
+               if (fMenu != null) {
+                       fMenu.dispose();
+               }
+               fMenu = menu;
+       }
+
+       public void init(IWorkbenchWindow window) { }
+       
+       /**
+        * Adds the given action to the specified menu with an accelerator specified
+        * by the given number.
+        * 
+        * @param menu the menu to add the action to
+        * @param action the action to add
+        * @param accelerator the number that should appear as an accelerator
+        */
+       protected void addToMenu(Menu menu, IAction action, int accelerator) {
+               StringBuffer label= new StringBuffer();
+               if (accelerator >= 0 && accelerator < 10) {
+                       //add the numerical accelerator
+                       label.append('&');
+                       label.append(accelerator);
+                       label.append(' ');
+               }
+               label.append(action.getText());
+               action.setText(label.toString());
+               ActionContributionItem item= new ActionContributionItem(action);
+               item.fill(menu, -1);
+       }
+       
+       /**
+        * Fills the drop-down menu with favorites and launch history,
+        * launch shortcuts, and an action to open the launch configuration dialog.
+        *
+        * @param menu the menu to fill
+        */
+       protected void fillMenu(Menu menu) {
+               IWebBrowser current = BrowserManager.getInstance().getCurrentWebBrowser();
+               Iterator iterator = BrowserManager.getInstance().getWebBrowsers().iterator();
+               int i = 0;
+               while (iterator.hasNext()) {
+                       IWebBrowser browser = (IWebBrowser) iterator.next();
+                       addToMenu(menu, new SwitchDefaultBrowserAction(browser, browser.equals(current)), i++);
+               }
+       }
+
+       /**
+        * Creates the menu for the action
+        */
+       private void initMenu() {
+               // Add listener to repopulate the menu each time
+               // it is shown because of dynamic history list
+               fMenu.addMenuListener(new MenuAdapter() {
+                       public void menuShown(MenuEvent e) {
+                               //if (recreateMenu) {
+                                       Menu m = (Menu) e.widget;
+                                       MenuItem[] items = m.getItems();
+                                       for (int i = 0; i < items.length; i++) {
+                                               items[i].dispose();
+                                       }
+                                       fillMenu(m);
+                                       recreateMenu = false;
+                               //}
+                       }
+               });
+       }
+
+       public void selectionChanged(IAction action, ISelection selection) { }
+       
+       public void run(IAction action) { }
+
+       public Menu getMenu(Menu parent) {
+               setMenu(new Menu(parent));
+               //fillMenu(fMenu);
+               initMenu();
+               return fMenu;
+       }
+
+       public Menu getMenu(Control parent) {
+               setMenu(new Menu(parent));
+               //fillMenu(fMenu);
+               initMenu();
+               return fMenu;
+       }
+}
\ No newline at end of file