blob: 10f0f623c8f15cc19ca74d9cd37ec69edc03a528 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - Initial API and implementation
*******************************************************************************/
package org.eclipse.wst.server.ui.internal.webbrowser;
import java.util.Iterator;
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.*;
import org.eclipse.ui.internal.browser.BrowserManager;
import org.eclipse.ui.internal.browser.IBrowserDescriptor;
import org.eclipse.ui.internal.browser.WebBrowserPreference;
import org.eclipse.ui.internal.browser.WebBrowserUtil;
/**
* 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) {
// do nothing
}
/**
* 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) {
int i = 0;
if (WebBrowserUtil.canUseInternalWebBrowser()) {
addToMenu(menu, new SwitchDefaultBrowserAction(null, WebBrowserPreference.getBrowserChoice() == WebBrowserPreference.INTERNAL, null), i++);
}
IBrowserDescriptor current = BrowserManager.getInstance().getCurrentWebBrowser();
BrowserManager browserManager = BrowserManager.getInstance();
Iterator iterator = browserManager.getWebBrowsers().iterator();
while (iterator.hasNext()) {
IBrowserDescriptor browser = (IBrowserDescriptor) iterator.next();
addToMenu(menu, new SwitchDefaultBrowserAction(browser, WebBrowserPreference.getBrowserChoice() != WebBrowserPreference.INTERNAL && browser.equals(current), browserManager), 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) {
// do nothing
}
public void run(IAction action) {
// do nothing
}
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;
}
}