/*
* Copyright (c) 2004-2011 Marco Maccaferri 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:
* Marco Maccaferri - initial API and implementation
*/
package org.eclipsetrader.ui.internal.application;
import java.util.Hashtable;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.ICoolBarManager;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IStatusLineManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.action.ToolBarContributionItem;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.swt.SWT;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
import org.eclipse.ui.actions.ContributionItemFactory;
import org.eclipse.ui.actions.NewWizardDropDownAction;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.eclipsetrader.ui.internal.actions.NewWizardMenu;
import org.eclipsetrader.ui.internal.actions.OpenAction;
import org.eclipsetrader.ui.internal.actions.QuickMenuAction;
import org.eclipsetrader.ui.internal.actions.SettingsAction;
import org.osgi.framework.BundleContext;
public class TraderActionBarAdvisor extends ActionBarAdvisor {
private final IWorkbenchWindow window;
private IWorkbenchAction newWizardAction;
private NewWizardMenu newWizardMenu;
private QuickMenuAction newQuickMenu;
private IWorkbenchAction newWizardDropDownAction;
private IWorkbenchAction openAction;
private IWorkbenchAction saveAction;
private IWorkbenchAction saveAsAction;
private IWorkbenchAction saveAllAction;
private IWorkbenchAction printAction;
private IWorkbenchAction importResourcesAction;
private IWorkbenchAction exportResourcesAction;
private IWorkbenchAction propertiesAction;
private IWorkbenchAction quitAction;
private IWorkbenchAction cutAction;
private IWorkbenchAction copyAction;
private IWorkbenchAction pasteAction;
private IWorkbenchAction deleteAction;
private IWorkbenchAction settingsAction;
private IWorkbenchAction newWindowAction;
private IWorkbenchAction editActionSetsAction;
private IWorkbenchAction savePerspectiveAction;
private IWorkbenchAction resetPerspectiveAction;
private IWorkbenchAction closePerspAction;
private IWorkbenchAction closeAllPerspsAction;
private IWorkbenchAction helpContentsAction;
private IWorkbenchAction helpSearchAction;
private IWorkbenchAction dynamicHelpAction;
private IWorkbenchAction aboutAction;
private IWorkbenchAction openPreferencesAction;
public TraderActionBarAdvisor(IActionBarConfigurer configurer) {
super(configurer);
window = configurer.getWindowConfigurer().getWindow();
}
/* (non-Javadoc)
* @see org.eclipse.ui.application.ActionBarAdvisor#makeActions(org.eclipse.ui.IWorkbenchWindow)
*/
@Override
protected void makeActions(final IWorkbenchWindow window) {
newWizardAction = ActionFactory.NEW.create(window);
register(newWizardAction);
newWizardDropDownAction = NEW_WIZARD_DROP_DOWN.create(window);
register(newWizardDropDownAction);
openAction = new OpenAction(window);
register(openAction);
saveAction = ActionFactory.SAVE.create(window);
saveAction.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/etool16/save.png"));
saveAction.setDisabledImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/dtool16/save.png"));
register(saveAction);
saveAsAction = ActionFactory.SAVE_AS.create(window);
saveAsAction.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/etool16/save_as.png"));
saveAsAction.setDisabledImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/dtool16/save_as.png"));
register(saveAsAction);
saveAllAction = ActionFactory.SAVE_ALL.create(window);
saveAllAction.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/etool16/save_all.png"));
saveAllAction.setDisabledImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/dtool16/save_all.png"));
register(saveAllAction);
printAction = ActionFactory.PRINT.create(window);
printAction.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/etool16/print.png"));
printAction.setDisabledImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/dtool16/print.png"));
register(printAction);
importResourcesAction = ActionFactory.IMPORT.create(window);
register(importResourcesAction);
exportResourcesAction = ActionFactory.EXPORT.create(window);
register(exportResourcesAction);
propertiesAction = ActionFactory.PROPERTIES.create(window);
register(propertiesAction);
quitAction = ActionFactory.QUIT.create(window);
register(quitAction);
cutAction = ActionFactory.CUT.create(window);
register(cutAction);
copyAction = ActionFactory.COPY.create(window);
register(copyAction);
pasteAction = ActionFactory.PASTE.create(window);
register(pasteAction);
deleteAction = ActionFactory.DELETE.create(window);
register(deleteAction);
settingsAction = new SettingsAction(window);
register(settingsAction);
newWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(getWindow());
newWindowAction.setText("&New Window");
register(newWindowAction);
editActionSetsAction = ActionFactory.EDIT_ACTION_SETS.create(window);
register(editActionSetsAction);
savePerspectiveAction = ActionFactory.SAVE_PERSPECTIVE.create(window);
register(savePerspectiveAction);
resetPerspectiveAction = ActionFactory.RESET_PERSPECTIVE.create(window);
register(resetPerspectiveAction);
closePerspAction = ActionFactory.CLOSE_PERSPECTIVE.create(window);
register(closePerspAction);
closeAllPerspsAction = ActionFactory.CLOSE_ALL_PERSPECTIVES.create(window);
register(closeAllPerspsAction);
openPreferencesAction = ActionFactory.PREFERENCES.create(window);
register(openPreferencesAction);
helpContentsAction = ActionFactory.HELP_CONTENTS.create(window);
register(helpContentsAction);
helpSearchAction = ActionFactory.HELP_SEARCH.create(window);
register(helpSearchAction);
dynamicHelpAction = ActionFactory.DYNAMIC_HELP.create(window);
register(dynamicHelpAction);
aboutAction = ActionFactory.ABOUT.create(window);
register(aboutAction);
}
/* (non-Javadoc)
* @see org.eclipse.ui.application.ActionBarAdvisor#fillCoolBar(org.eclipse.jface.action.ICoolBarManager)
*/
@Override
protected void fillCoolBar(ICoolBarManager coolBar) {
coolBar.add(new GroupMarker(IWorkbenchActionConstants.GROUP_FILE));
{
IToolBarManager fileToolBar = new ToolBarManager(SWT.FLAT);
fileToolBar.add(new Separator(IWorkbenchActionConstants.NEW_GROUP));
fileToolBar.add(newWizardDropDownAction);
fileToolBar.add(new GroupMarker(IWorkbenchActionConstants.NEW_EXT));
fileToolBar.add(new GroupMarker(IWorkbenchActionConstants.SAVE_GROUP));
fileToolBar.add(saveAction);
fileToolBar.add(saveAllAction);
fileToolBar.add(new GroupMarker(IWorkbenchActionConstants.SAVE_EXT));
fileToolBar.add(printAction);
fileToolBar.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
// Add to the cool bar manager
coolBar.add(new ToolBarContributionItem(fileToolBar, IWorkbenchActionConstants.TOOLBAR_HELP));
}
coolBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
coolBar.add(new GroupMarker("group.nav"));
coolBar.add(new GroupMarker(IWorkbenchActionConstants.GROUP_EDITOR));
coolBar.add(new GroupMarker(IWorkbenchActionConstants.GROUP_HELP));
{ // Help group
IToolBarManager helpToolBar = new ToolBarManager(SWT.FLAT);
helpToolBar.add(new Separator(IWorkbenchActionConstants.GROUP_HELP));
// Add the group for applications to contribute
helpToolBar.add(new GroupMarker(IWorkbenchActionConstants.GROUP_APP));
// Add to the cool bar manager
coolBar.add(new ToolBarContributionItem(helpToolBar, IWorkbenchActionConstants.TOOLBAR_HELP));
}
}
@Override
protected void fillMenuBar(IMenuManager menuBar) {
menuBar.add(createFileMenu(menuBar));
menuBar.add(createEditMenu(menuBar));
menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
menuBar.add(createWindowMenu(menuBar));
menuBar.add(createHelpMenu(menuBar));
}
private MenuManager createFileMenu(IMenuManager menuBar) {
MenuManager menu = new MenuManager("&File", IWorkbenchActionConstants.M_FILE);
menu.add(new GroupMarker(IWorkbenchActionConstants.FILE_START));
{
String newId = ActionFactory.NEW.getId();
MenuManager newMenu = new MenuManager("&New", newId) {
@Override
public String getMenuText() {
String result = super.getMenuText();
if (newQuickMenu == null) {
return result;
}
String shortCut = newQuickMenu.getShortCutString();
if (shortCut == null) {
return result;
}
return result + "\t" + shortCut; //$NON-NLS-1$
}
};
newMenu.add(new Separator(newId));
this.newWizardMenu = new NewWizardMenu(getWindow());
newMenu.add(this.newWizardMenu);
newMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
menu.add(newMenu);
}
menu.add(new GroupMarker(IWorkbenchActionConstants.NEW_EXT));
menu.add(new Separator());
menu.add(saveAction);
menu.add(saveAsAction);
menu.add(saveAllAction);
menu.add(new Separator());
menu.add(printAction);
menu.add(new Separator());
menu.add(importResourcesAction);
menu.add(exportResourcesAction);
menu.add(new GroupMarker(IWorkbenchActionConstants.IMPORT_EXT));
menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
menu.add(new Separator(IWorkbenchActionConstants.FILE_END));
menu.add(propertiesAction);
menu.add(new Separator());
menu.add(quitAction);
return menu;
}
private MenuManager createEditMenu(IMenuManager menuBar) {
MenuManager menu = new MenuManager("&Edit", IWorkbenchActionConstants.M_EDIT);
menu.add(new GroupMarker(IWorkbenchActionConstants.EDIT_START));
menu.add(cutAction);
menu.add(copyAction);
menu.add(pasteAction);
menu.add(new Separator());
menu.add(deleteAction);
menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
menu.add(new Separator(IWorkbenchActionConstants.EDIT_END));
menu.add(settingsAction);
return menu;
}
private MenuManager createWindowMenu(IMenuManager menuBar) {
MenuManager menu = new MenuManager("&Window", IWorkbenchActionConstants.M_WINDOW);
menu.add(newWindowAction);
menu.add(new Separator());
addPerspectiveActions(menu);
menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
// See the comment for quit in createFileMenu
ActionContributionItem openPreferencesItem = new ActionContributionItem(openPreferencesAction);
openPreferencesItem.setVisible(!"carbon".equals(SWT.getPlatform())); //$NON-NLS-1$
menu.add(openPreferencesItem);
menu.add(ContributionItemFactory.OPEN_WINDOWS.create(getWindow()));
return menu;
}
private void addPerspectiveActions(MenuManager menu) {
MenuManager changePerspMenuMgr = new MenuManager("&Open Perspective", "openPerspective");
IContributionItem changePerspMenuItem = ContributionItemFactory.PERSPECTIVES_SHORTLIST.create(getWindow());
changePerspMenuMgr.add(changePerspMenuItem);
menu.add(changePerspMenuMgr);
MenuManager showViewMenuMgr = new MenuManager("Show &View", "showView");
IContributionItem showViewMenu = ContributionItemFactory.VIEWS_SHORTLIST.create(getWindow());
showViewMenuMgr.add(showViewMenu);
menu.add(showViewMenuMgr);
menu.add(new Separator());
menu.add(editActionSetsAction);
menu.add(savePerspectiveAction);
menu.add(resetPerspectiveAction);
menu.add(closePerspAction);
menu.add(closeAllPerspsAction);
}
private MenuManager createHelpMenu(IMenuManager menuBar) {
MenuManager menu = new MenuManager("&Help", IWorkbenchActionConstants.M_HELP);
menu.add(new GroupMarker("group.intro")); //$NON-NLS-1$
menu.add(new GroupMarker("group.intro.ext")); //$NON-NLS-1$
menu.add(new Separator("group.main")); //$NON-NLS-1$
menu.add(helpContentsAction);
menu.add(helpSearchAction);
menu.add(dynamicHelpAction);
menu.add(new Separator("group.assist")); //$NON-NLS-1$
menu.add(new GroupMarker(IWorkbenchActionConstants.HELP_START));
menu.add(new GroupMarker("group.main.ext")); //$NON-NLS-1$
menu.add(new GroupMarker("group.tutorials")); //$NON-NLS-1$
menu.add(new GroupMarker("group.tools")); //$NON-NLS-1$
menu.add(new GroupMarker("group.updates")); //$NON-NLS-1$
menu.add(new GroupMarker(IWorkbenchActionConstants.HELP_END));
menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
// about should always be at the bottom
menu.add(new Separator("group.about"));
ActionContributionItem aboutItem = new ActionContributionItem(aboutAction);
aboutItem.setVisible(!"carbon".equals(SWT.getPlatform()));
menu.add(aboutItem);
menu.add(new GroupMarker("group.about.ext"));
return menu;
}
private IWorkbenchWindow getWindow() {
return window;
}
public static final ActionFactory NEW_WIZARD_DROP_DOWN = new ActionFactory("newWizardDropDown") { //$NON-NLS-1$
@Override
public IWorkbenchAction create(IWorkbenchWindow window) {
if (window == null) {
throw new IllegalArgumentException();
}
IWorkbenchAction innerAction = ActionFactory.NEW.create(window);
innerAction.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/etool16/new_wizard.png"));
innerAction.setDisabledImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/dtool16/new_wizard.png"));
NewWizardMenu newWizardMenu = new NewWizardMenu(window);
IWorkbenchAction action = new NewWizardDropDownAction(window, innerAction, newWizardMenu);
action.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/etool16/new_wizard.png"));
action.setDisabledImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/dtool16/new_wizard.png"));
action.setId(getId());
return action;
}
};
/* (non-Javadoc)
* @see org.eclipse.ui.application.ActionBarAdvisor#fillStatusLine(org.eclipse.jface.action.IStatusLineManager)
*/
@Override
protected void fillStatusLine(IStatusLineManager statusLine) {
BundleContext context = Activator.getDefault().getBundle().getBundleContext();
context.registerService(new String[] {
IStatusLineManager.class.getName(),
}, statusLine, new Hashtable<String, Object>());
}
}