//------------------------------------------------------------------------------ // Copyright (c) 2005, 2007 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 implementation //------------------------------------------------------------------------------ package org.eclipse.epf.rcp.ui; import org.eclipse.epf.authoring.ui.AuthoringUIHelpContexts; import org.eclipse.epf.authoring.ui.views.ViewHelper; import org.eclipse.epf.library.LibraryService; import org.eclipse.epf.rcp.ui.actions.NewWizardMenu; import org.eclipse.epf.rcp.ui.actions.UIActionFactory; import org.eclipse.epf.rcp.ui.actions.UIOpenPerspectiveDialogAction; import org.eclipse.jface.action.Action; 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.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.ActionFactory; import org.eclipse.ui.actions.ContributionItemFactory; import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction; import org.eclipse.ui.application.ActionBarAdvisor; import org.eclipse.ui.application.IActionBarConfigurer; import org.eclipse.ui.ide.IDEActionFactory; import org.eclipse.ui.ide.IIDEActionConstants; import org.eclipse.ui.internal.provisional.application.IActionBarConfigurer2; /** * Creates, adds and disposes the actions added to a workbench window. * * @author Kelvin Low * @author Bingxue Xu * @author Phong Nguyen Le * @author Jinhua Xi * @since 1.0 */ public class MainActionBarAdvisor extends ActionBarAdvisor { // All actions should be created in makeActions and referenced in the // fill methods. This ensures that the actions aren't recreated // when fillActionBars is called with FILL_PROXY. // File actions. protected IWorkbenchAction newAction; protected IWorkbenchAction closeAction; protected IWorkbenchAction closeAllAction; protected IWorkbenchAction saveAction; protected IWorkbenchAction saveAsAction; protected IWorkbenchAction saveAllAction; protected IWorkbenchAction revertAction; protected IWorkbenchAction moveAction; protected IWorkbenchAction renameAction; protected IWorkbenchAction refreshAction; protected IWorkbenchAction importAction; protected IWorkbenchAction exportAction; protected IWorkbenchAction propertiesAction; protected IWorkbenchAction exitAction; // Edit actions. protected IWorkbenchAction openElementAction; protected IWorkbenchAction undoAction; protected IWorkbenchAction redoAction; protected IWorkbenchAction cutAction; protected IWorkbenchAction copyAction; protected IWorkbenchAction pasteAction; protected IWorkbenchAction deleteAction; protected IWorkbenchAction selectAllAction; protected IWorkbenchAction findAction; // Navigate actions. protected IWorkbenchAction goIntoAction; protected IWorkbenchAction nextAction; protected IWorkbenchAction previousAction; protected IWorkbenchAction backAction; protected IWorkbenchAction forwardAction; // Window actions. protected IWorkbenchAction openNewWindowAction; protected IWorkbenchAction openPerspectiveDialogAction; protected IWorkbenchAction customizePerspectiveAction; protected IWorkbenchAction savePerspectiveAction; protected IWorkbenchAction resetPerspectiveAction; protected IWorkbenchAction closePerspectiveAction; protected IWorkbenchAction closeAllPerspectiveAction; protected IWorkbenchAction preferencesAction; // Window navigation actions. protected IWorkbenchAction nextEditorAction; protected IWorkbenchAction previousEditorAction; protected IWorkbenchAction nextPartAction; protected IWorkbenchAction previousPartAction; protected IWorkbenchAction nextPerspectiveAction; protected IWorkbenchAction previousPerspectiveAction; // Help actions. protected IWorkbenchAction welcomeAction; protected IWorkbenchAction helpContentsAction; protected IWorkbenchAction aboutAction; protected IWorkbenchAction newWizardDropDownAction; protected IWorkbenchAction lockToolBarAction; protected IWorkbenchAction editActionSetAction; protected MenuManager mainHelpMenu; protected MenuManager mainFileMenu; protected MenuManager internalMenu; protected IWorkbenchWindow window; /** * Creates a new instance. * * @param configurer * the action bar configurer */ public MainActionBarAdvisor(IActionBarConfigurer configurer) { super(configurer); window = configurer.getWindowConfigurer().getWindow(); } /** * Getd the workbench window. * * @return the workbench window */ public IWorkbenchWindow getWindow() { return window; } /** * @see org.eclipse.ui.application.ActionBarAdvisor#makeActions(final * IWorkbenchWindow window) */ protected void makeActions(final IWorkbenchWindow window) { if (PlatformUI.getWorkbench().isClosing()) return; // Creates the actions and registers them. Registering is needed to // ensure that key bindings work. The corresponding commands key // bindings are defined in the plugin.xml file. Registering also // provides automatic disposal of the actions when the window is closed. newAction = ActionFactory.NEW.create(window); register(newAction); closeAction = ActionFactory.CLOSE.create(window); register(closeAction); closeAllAction = ActionFactory.CLOSE_ALL.create(window); register(closeAllAction); saveAction = ActionFactory.SAVE.create(window); register(saveAction); saveAsAction = ActionFactory.SAVE_AS.create(window); register(saveAsAction); saveAllAction = ActionFactory.SAVE_ALL.create(window); register(saveAllAction); revertAction = ActionFactory.REVERT.create(window); register(revertAction); moveAction = ActionFactory.MOVE.create(window); register(moveAction); renameAction = ActionFactory.RENAME.create(window); register(renameAction); refreshAction = ActionFactory.REFRESH.create(window); register(refreshAction); importAction = UIActionFactory.UI_IMPORT.create(window); PlatformUI.getWorkbench().getHelpSystem().setHelp(importAction, AuthoringUIHelpContexts.FILE_IMPORT_CONTEXT); register(importAction); exportAction = UIActionFactory.UI_EXPORT.create(window); PlatformUI.getWorkbench().getHelpSystem().setHelp(exportAction, AuthoringUIHelpContexts.FILE_EXPORT_CONTEXT); register(exportAction); propertiesAction = ActionFactory.PROPERTIES.create(window); register(propertiesAction); exitAction = ActionFactory.QUIT.create(window); register(exitAction); openElementAction = UIActionFactory.OPEN_ELEMENT.create(window); register(openElementAction); undoAction = ActionFactory.UNDO.create(window); register(undoAction); redoAction = ActionFactory.REDO.create(window); register(redoAction); 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); selectAllAction = ActionFactory.SELECT_ALL.create(window); register(selectAllAction); findAction = ActionFactory.FIND.create(window); register(findAction); goIntoAction = ActionFactory.GO_INTO.create(window); register(goIntoAction); nextAction = ActionFactory.NEXT.create(window); register(nextAction); previousAction = ActionFactory.PREVIOUS.create(window); register(previousAction); backAction = ActionFactory.BACK.create(window); register(backAction); forwardAction = ActionFactory.FORWARD.create(window); register(forwardAction); openNewWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(window); register(openNewWindowAction); nextEditorAction = ActionFactory.NEXT_EDITOR.create(window); register(nextEditorAction); previousEditorAction = ActionFactory.PREVIOUS_EDITOR.create(window); register(previousEditorAction); nextPartAction = ActionFactory.NEXT_PART.create(window); register(nextPartAction); previousPartAction = ActionFactory.PREVIOUS_PART.create(window); register(previousPartAction); nextPerspectiveAction = ActionFactory.NEXT_PERSPECTIVE.create(window); register(nextPerspectiveAction); previousPerspectiveAction = ActionFactory.PREVIOUS_PERSPECTIVE .create(window); register(previousPerspectiveAction); openPerspectiveDialogAction = createTNGOpenPerspectiveDialogAction(window); openPerspectiveDialogAction.setText(RCPUIResources.otherMenuItem_text); register(openPerspectiveDialogAction); customizePerspectiveAction = ActionFactory.EDIT_ACTION_SETS .create(window); register(customizePerspectiveAction); savePerspectiveAction = ActionFactory.SAVE_PERSPECTIVE.create(window); register(savePerspectiveAction); resetPerspectiveAction = ActionFactory.RESET_PERSPECTIVE.create(window); register(resetPerspectiveAction); closePerspectiveAction = ActionFactory.CLOSE_PERSPECTIVE.create(window); register(closePerspectiveAction); closeAllPerspectiveAction = ActionFactory.CLOSE_ALL_PERSPECTIVES .create(window); register(closeAllPerspectiveAction); preferencesAction = ActionFactory.PREFERENCES.create(window); register(preferencesAction); welcomeAction = UIActionFactory.SHOW_INTRO.create(window); register(welcomeAction); ImageDescriptor imgDes = RCPUIPlugin.getDefault().getImageDescriptor( "full/obj16/product.gif"); //$NON-NLS-1$ welcomeAction.setImageDescriptor(imgDes); helpContentsAction = ActionFactory.HELP_CONTENTS.create(window); register(helpContentsAction); aboutAction = ActionFactory.ABOUT.create(window); register(aboutAction); // FIXME! Filter out Project... from the drop-down menu. newWizardDropDownAction = IDEActionFactory.NEW_WIZARD_DROP_DOWN .create(window); register(newWizardDropDownAction); lockToolBarAction = ActionFactory.LOCK_TOOL_BAR.create(window); register(lockToolBarAction); editActionSetAction = ActionFactory.EDIT_ACTION_SETS.create(window); register(editActionSetAction); } /** * @see org.eclipse.ui.application.ActionBarAdvisor#fillMenuBar(IMenuManager * menuBar) */ protected void fillMenuBar(IMenuManager menuBar) { if (PlatformUI.getWorkbench().isClosing()) return; mainFileMenu = createFileMenu(menuBar); menuBar.add(mainFileMenu); menuBar.add(createEditMenu(menuBar)); IMenuManager navManager = createNavigateMenu(menuBar); menuBar.add(navManager); navManager.setVisible(false); menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); menuBar.add(createWindowMenu(menuBar)); mainHelpMenu = createHelpMenu(menuBar); menuBar.add(mainHelpMenu); } /** * Gets the File menu manager. */ public MenuManager getFileMenuManager() { return mainFileMenu; } /** * Gets the Help menu manager. */ public MenuManager getHelpMenuManager() { return mainHelpMenu; } /** * @see org.eclipse.ui.application.ActionBarAdvisor#fillCoolBar(ICoolBarManager * coolBar) */ protected void fillCoolBar(ICoolBarManager coolBar) { if (PlatformUI.getWorkbench().isClosing()) return; coolBar.add(createFileToolbar(coolBar)); } /** * Creates the File menu. */ protected MenuManager createFileMenu(IMenuManager menuBar) { MenuManager fileMenu = new MenuManager( RCPUIResources.fileMenuItem_text, IWorkbenchActionConstants.M_FILE); fileMenu.add(new GroupMarker(IWorkbenchActionConstants.FILE_START)); // Create the New sub menu, using the same id for it as the New action. String newText = RCPUIResources.fileNewMenuItem_text; String newId = ActionFactory.NEW.getId(); MenuManager newMenu = new MenuManager(newText, newId) { public String getMenuText() { return super.getMenuText(); } }; newMenu.add(new Separator(newId)); newMenu.add(new NewWizardMenu(getWindow(), null)); newMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); fileMenu.add(newMenu); fileMenu.add(new GroupMarker(IWorkbenchActionConstants.NEW_EXT)); //Alex: The below comment out code has nothing with UI, but adding confuse. //The real open menu come from /org.eclipse.epf.library.ui/plugin.xml // // MenuManager openSubMenu = new MenuManager( // RCPUIResources.fileOpenMenuItem_text, // IWorkbenchActionConstants.OPEN_EXT); // openSubMenu // .add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); // openSubMenu.add(new Separator()); // fileMenu.add(openSubMenu); // fileMenu.add(new Separator()); fileMenu.add(closeAction); fileMenu.add(closeAllAction); fileMenu.add(new Separator()); fileMenu.add(saveAction); fileMenu.add(saveAsAction); fileMenu.add(saveAllAction); fileMenu.add(revertAction); fileMenu.add(new Separator()); fileMenu.add(moveAction); fileMenu.add(renameAction); fileMenu.add(refreshAction); fileMenu.add(new Separator()); fileMenu.add(new GroupMarker("udt")); //$NON-NLS-1$ fileMenu.add(new Separator()); fileMenu.add(new GroupMarker("report")); //$NON-NLS-1$ fileMenu.add(new Separator()); fileMenu.add(importAction); fileMenu.add(exportAction); fileMenu.add(new Separator()); fileMenu.add(propertiesAction); fileMenu.add(new Separator()); fileMenu.add(exitAction); fileMenu.add(new GroupMarker(IWorkbenchActionConstants.FILE_END)); return fileMenu; } /** * Creates the Edit menu. */ protected MenuManager createEditMenu(IMenuManager menuBar) { MenuManager editMenu = new MenuManager( RCPUIResources.editMenuItem_text, IWorkbenchActionConstants.M_EDIT); editMenu.add(new GroupMarker(IWorkbenchActionConstants.EDIT_START)); editMenu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); editMenu.add(new Separator()); editMenu.add(new GroupMarker("opengroup")); //$NON-NLS-1$ editMenu.add(openElementAction); editMenu.add(cutAction); editMenu.add(copyAction); editMenu.add(pasteAction); editMenu.add(new Separator()); editMenu.add(deleteAction); editMenu.add(selectAllAction); editMenu.add(new Separator()); editMenu.add(findAction); editMenu.add(new GroupMarker(IWorkbenchActionConstants.EDIT_END)); return editMenu; } /** * Creates the Navigate menu. */ protected MenuManager createNavigateMenu(IMenuManager menuBar) { MenuManager navMenu = new MenuManager( RCPUIResources.navigateMenuItem_text, IWorkbenchActionConstants.M_NAVIGATE); navMenu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); navMenu.add(goIntoAction); navMenu.add(new Separator()); navMenu.add(nextAction); navMenu.add(previousAction); navMenu.add(new Separator()); navMenu.add(backAction); navMenu.add(forwardAction); navMenu.add(new GroupMarker(IWorkbenchActionConstants.WB_END)); return navMenu; } /** * Creates the Window menu. */ protected MenuManager createWindowMenu(IMenuManager menuBar) { MenuManager windowMenu = new MenuManager( RCPUIResources.windowMenuItem_text, IWorkbenchActionConstants.M_WINDOW); windowMenu.add(new GroupMarker(IWorkbenchActionConstants.WB_START)); windowMenu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); MenuManager changePerspMenuMgr = new MenuManager( RCPUIResources.windowOpenPerspectiveMenuItem_text, "openPerspective"); //$NON-NLS-1$ IContributionItem changePerspMenuItem = ContributionItemFactory.PERSPECTIVES_SHORTLIST .create(getWindow()); changePerspMenuMgr.add(changePerspMenuItem); windowMenu.add(changePerspMenuMgr); MenuManager showViewMenuMgr = new MenuManager( RCPUIResources.windowShowViewMenuItem_text, "showView"); //$NON-NLS-1$ IContributionItem showViewMenu = ContributionItemFactory.VIEWS_SHORTLIST .create(getWindow()); showViewMenuMgr.add(showViewMenu); windowMenu.add(showViewMenuMgr); windowMenu.add(new Separator()); windowMenu.add(customizePerspectiveAction); windowMenu.add(savePerspectiveAction); windowMenu.add(resetPerspectiveAction); windowMenu.add(closePerspectiveAction); windowMenu.add(closeAllPerspectiveAction); windowMenu.add(new Separator()); windowMenu.add(preferencesAction); windowMenu.add(new GroupMarker(IWorkbenchActionConstants.WB_END)); return windowMenu; } protected void createInternalMenu(final IMenuManager helpMmenu) { internalMenu = new MenuManager( RCPUIResources.mainActionBarAdvisor_Diagnosis, ""); //$NON-NLS-1$ internalMenu.add(new Action( RCPUIResources.mainActionBarAdvisor_HealthCheck) { public void run() { ViewHelper.checkLibraryHealth(LibraryService.getInstance().getCurrentMethodLibrary()); } }); } /** * Creates the Help menu. */ protected MenuManager createHelpMenu(IMenuManager menuBar) { MenuManager helpMmenu = new MenuManager( RCPUIResources.helpMenuItem_text, IWorkbenchActionConstants.M_HELP); helpMmenu.add(new GroupMarker(IWorkbenchActionConstants.HELP_START)); helpMmenu.add(welcomeAction); helpMmenu.add(new Separator()); helpMmenu.add(helpContentsAction); helpMmenu.add(new GroupMarker("group.help")); //$NON-NLS-1$ helpMmenu.add(new Separator()); helpMmenu.add(new GroupMarker("group.assist")); //$NON-NLS-1$ helpMmenu.add(new Separator()); helpMmenu.add(new GroupMarker("group.tools")); //$NON-NLS-1$ helpMmenu.add(new Separator()); helpMmenu.add(new GroupMarker("group.updates")); //$NON-NLS-1$ // Menu items for internal tool helpMmenu.add(new Separator()); helpMmenu.add(new GroupMarker("group.internal")); //$NON-NLS-1$ createInternalMenu(helpMmenu); helpMmenu.add(new Separator()); helpMmenu.add(aboutAction); helpMmenu.add(new GroupMarker(IWorkbenchActionConstants.HELP_END)); return helpMmenu; } /** * Creates the File toolbar. */ protected IToolBarManager createFileToolbar(ICoolBarManager coolBar) { IActionBarConfigurer2 actionBarConfigurer = (IActionBarConfigurer2) getActionBarConfigurer(); IMenuManager popUpMenu = new MenuManager(); popUpMenu.add(new ActionContributionItem(lockToolBarAction)); popUpMenu.add(new ActionContributionItem(editActionSetAction)); coolBar.setContextMenuManager(popUpMenu); coolBar.add(new GroupMarker(IIDEActionConstants.GROUP_FILE)); IToolBarManager fileToolBar = actionBarConfigurer .createToolBarManager(); 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(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); return fileToolBar; } /** * Create a custom open perspective dialog * * @param window * @return */ protected IWorkbenchAction createTNGOpenPerspectiveDialogAction( IWorkbenchWindow window) { if (window == null) { throw new IllegalArgumentException(); } IWorkbenchAction action = new UIOpenPerspectiveDialogAction(window); action.setId("openPerspectiveDialog"); //$NON-NLS-1$ return action; } }