/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.start.gui.internal; import java.io.IOException; import java.util.Properties; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.core.runtime.IExtension; import org.eclipse.jface.action.GroupMarker; 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.action.ToolBarContributionItem; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.swt.SWT; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchCommandConstants; 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.NewWizardMenu; 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.WorkbenchPlugin; import org.eclipse.ui.internal.actions.CommandAction; import org.eclipse.ui.internal.registry.ActionSetRegistry; import org.eclipse.ui.internal.registry.IActionSetDescriptor; import de.rcenvironment.core.gui.resources.api.ImageManager; import de.rcenvironment.core.gui.resources.api.StandardImages; import de.rcenvironment.core.start.Application; /** * This class advises the creation of the action bar of the {@link Application}. * * @author Christian Weiss */ @SuppressWarnings("restriction") public class ApplicationActionBarAdvisor extends ActionBarAdvisor { private static final Log LOGGER = LogFactory.getLog(ApplicationActionBarAdvisor.class); /** File -> New wizard menu. */ private NewWizardMenu newWizardMenu; /** File -> Close action. */ private IWorkbenchAction closeAction; /** File -> Close All action. */ private IWorkbenchAction closeAllAction; /** File -> Save action. */ private IWorkbenchAction saveAction; /** File -> Save As action. */ private IWorkbenchAction saveAsAction; /** File -> Save All action. */ private IWorkbenchAction saveAllAction; /** File -> Rename action. */ // private IWorkbenchAction renameAction; /** File -> Refresh action. */ private IWorkbenchAction refreshAction; /** File -> Print action. */ private IWorkbenchAction printAction; /** File -> Switch Workspace. */ // private IWorkbenchAction switchWorkspaceAction; /** File -> Restart. */ private CommandAction restartAction; /** File -> Import action. */ private IWorkbenchAction importAction; /** File -> Export action. */ private IWorkbenchAction exportAction; /** File -> Properties action. */ private IWorkbenchAction propertiesAction; /** File -> Exit action. */ private IWorkbenchAction exitAction; /** Edit -> Undo action. */ private IWorkbenchAction undoAction; /** Edit -> Redo action. */ private IWorkbenchAction redoAction; /** Edit -> Cut action. */ private IWorkbenchAction cutAction; /** Edit -> Copy action. */ private IWorkbenchAction copyAction; /** Edit -> Paste action. */ private IWorkbenchAction pasteAction; /** Edit -> Delete action. */ private IWorkbenchAction deleteAction; /** Edit -> Select All action. */ private IWorkbenchAction selectAllAction; /** Edit -> Find/Replace action. */ private IWorkbenchAction findReplaceAction; /** Windows -> New Window action. */ private IWorkbenchAction newWorkbenchWindowAction; /** Windows -> New Editor action. */ private IWorkbenchAction newEditorWindowAction; /** Windows -> Customize Perspective... action. */ private IWorkbenchAction editActionSetAction; /** Windows -> Save Perspective As... action. */ private IWorkbenchAction savePerspectiveAction; /** Windows -> Reset Perspective... action. */ private IWorkbenchAction resetPerspectiveAction; /** Windows -> Close Perspective action. */ private IWorkbenchAction closePerspectiveAction; /** Windows -> Close All Perspectives action. */ private IWorkbenchAction closeAllPerspectivesAction; /** Windows -> Preferences action. */ private IWorkbenchAction preferenceAction; /** Action which opens the system menu. */ private IWorkbenchAction showPartPaneMenuAction; /** Action which opens the view's menu. */ private IWorkbenchAction showViewMenuAction; /** Action which maximizes the current view part. */ private IWorkbenchAction maximizePartAction; /** Action which minimizes the current view part. */ private IWorkbenchAction minimizePartAction; /** Action which activates the top-level editor. */ private IWorkbenchAction activateEditorAction; /** Action which activates the next editor. */ private IWorkbenchAction nextEditorAction; /** Action which activates the previous editor. */ private IWorkbenchAction prevEditorAction; /** Action which switches to an open editor. */ private IWorkbenchAction switchToEditorAction; /** Action which opens the quick switch menu. */ private IWorkbenchAction openEditorDropDownAction; /** Action which activates the next part in a perspective. */ private IWorkbenchAction nextPartAction; /** Action which activates the previous part in a perspective. */ private IWorkbenchAction prevPartAction; /** Action which switches to the next perspective. */ private IWorkbenchAction nextPerspectiveAction; /** Action which switches to the previous perspective. */ private IWorkbenchAction prevPerspectiveAction; /** Help -> Help Contents action. */ private IWorkbenchAction helpAction; /** Help -> Dynamic Help action. */ private IWorkbenchAction dynamicHelpAction; /** Help -> About action. */ private IWorkbenchAction aboutAction; /** New wizard drop down action. */ private IWorkbenchAction newWizardDropDownAction; private IWorkbenchWindow workbenchWindow; public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) { super(configurer); } @Override protected void makeActions(IWorkbenchWindow window) { this.workbenchWindow = window; newWizardMenu = new NewWizardMenu(window); 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); // renameAction = ActionFactory.RENAME.create(window); // register(renameAction); refreshAction = ActionFactory.REFRESH.create(window); register(refreshAction); printAction = ActionFactory.PRINT.create(window); register(printAction); // switchWorkspaceAction = IDEActionFactory.OPEN_WORKSPACE.create(window); // register(switchWorkspaceAction); restartAction = new CommandAction(window, IWorkbenchCommandConstants.FILE_RESTART); restartAction.setId("restart"); restartAction.setText("Restart"); register(restartAction); importAction = ActionFactory.IMPORT.create(window); register(importAction); exportAction = ActionFactory.EXPORT.create(window); register(exportAction); propertiesAction = ActionFactory.PROPERTIES.create(window); register(propertiesAction); exitAction = ActionFactory.QUIT.create(window); register(exitAction); // Edit 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); deleteAction.setImageDescriptor(ImageManager.getInstance().getImageDescriptor(StandardImages.DELETE_16)); register(deleteAction); selectAllAction = ActionFactory.SELECT_ALL.create(window); register(selectAllAction); findReplaceAction = ActionFactory.FIND.create(window); register(findReplaceAction); // Windows menu newWorkbenchWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(window); newWorkbenchWindowAction.setText("&New Window"); register(newWorkbenchWindowAction); newEditorWindowAction = ActionFactory.NEW_EDITOR.create(window); register(newEditorWindowAction); editActionSetAction = ActionFactory.EDIT_ACTION_SETS.create(window); register(editActionSetAction); savePerspectiveAction = ActionFactory.SAVE_PERSPECTIVE.create(window); register(savePerspectiveAction); resetPerspectiveAction = ActionFactory.RESET_PERSPECTIVE.create(window); register(resetPerspectiveAction); closePerspectiveAction = ActionFactory.CLOSE_PERSPECTIVE.create(window); register(closePerspectiveAction); closeAllPerspectivesAction = ActionFactory.CLOSE_ALL_PERSPECTIVES.create(window); register(closeAllPerspectivesAction); showPartPaneMenuAction = ActionFactory.SHOW_PART_PANE_MENU.create(window); register(showPartPaneMenuAction); showViewMenuAction = ActionFactory.SHOW_VIEW_MENU.create(window); register(showViewMenuAction); maximizePartAction = ActionFactory.MAXIMIZE.create(window); register(maximizePartAction); minimizePartAction = ActionFactory.MINIMIZE.create(window); register(minimizePartAction); activateEditorAction = ActionFactory.ACTIVATE_EDITOR.create(window); register(activateEditorAction); nextEditorAction = ActionFactory.NEXT_EDITOR.create(window); register(nextEditorAction); prevEditorAction = ActionFactory.PREVIOUS_EDITOR.create(window); register(prevEditorAction); ActionFactory.linkCycleActionPair(nextEditorAction, prevEditorAction); switchToEditorAction = ActionFactory.SHOW_OPEN_EDITORS.create(window); register(switchToEditorAction); openEditorDropDownAction = ActionFactory.SHOW_WORKBOOK_EDITORS.create(window); register(openEditorDropDownAction); nextPartAction = ActionFactory.NEXT_PART.create(window); register(nextPartAction); prevPartAction = ActionFactory.PREVIOUS_PART.create(window); register(prevPartAction); ActionFactory.linkCycleActionPair(nextPartAction, prevPartAction); nextPerspectiveAction = ActionFactory.NEXT_PERSPECTIVE.create(window); register(nextPerspectiveAction); prevPerspectiveAction = ActionFactory.PREVIOUS_PERSPECTIVE.create(window); register(prevPerspectiveAction); ActionFactory.linkCycleActionPair(nextPerspectiveAction, prevPerspectiveAction); preferenceAction = ActionFactory.PREFERENCES.create(window); register(preferenceAction); // Help helpAction = ActionFactory.HELP_CONTENTS.create(window); register(helpAction); dynamicHelpAction = ActionFactory.DYNAMIC_HELP.create(window); register(dynamicHelpAction); aboutAction = ActionFactory.ABOUT.create(window); aboutAction.setImageDescriptor(ImageManager.getInstance().getImageDescriptor(StandardImages.RCE_LOGO_16)); register(aboutAction); // Cool bar actions newWizardDropDownAction = IDEActionFactory.NEW_WIZARD_DROP_DOWN.create(window); register(newWizardDropDownAction); // remove unwanted stuff (foreign contributions) from the GUI removeUnwanted(); } private void removeUnwanted() { final Properties unwanted = new Properties(); try { unwanted.load(ApplicationActionBarAdvisor.class.getResourceAsStream("unwanted.properties")); } catch (IOException e) { LOGGER.error("Failed to remove unwanted elements from UI:", e); return; } // remove unwanted action sets final String actionSetsValue = unwanted.getProperty("org.eclipse.ui.actionSets"); if (actionSetsValue != null && !actionSetsValue.trim().isEmpty()) { final String[] actionSets = actionSetsValue.split(","); ActionSetRegistry actionSetRegistry = WorkbenchPlugin.getDefault().getActionSetRegistry(); for (final String actionSetId : actionSets) { IActionSetDescriptor actionSetDescriptor = actionSetRegistry.findActionSet(actionSetId.trim()); if (actionSetDescriptor != null) { IExtension ext = actionSetDescriptor.getConfigurationElement().getDeclaringExtension(); actionSetRegistry.removeExtension(ext, new Object[] { actionSetDescriptor }); } } } } @Override protected void fillMenuBar(IMenuManager menuBar) { // File -> New submenu final String newId = ActionFactory.NEW.getId(); MenuManager newMenu = new MenuManager("New", newId); newMenu.add(new Separator(newId)); newMenu.add(newWizardMenu); newMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); // File MenuManager fileMenu = new MenuManager("&File", IWorkbenchActionConstants.M_FILE); fileMenu.add(newMenu); fileMenu.add(new GroupMarker(IWorkbenchActionConstants.NEW_EXT)); fileMenu.add(new Separator()); fileMenu.add(closeAction); fileMenu.add(closeAllAction); fileMenu.add(new GroupMarker(IWorkbenchActionConstants.CLOSE_EXT)); 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 GroupMarker(IWorkbenchActionConstants.SAVE_EXT)); fileMenu.add(new Separator()); // fileMenu.add(printAction); // fileMenu.add(new GroupMarker(IWorkbenchActionConstants.PRINT_EXT)); // fileMenu.add(new Separator()); fileMenu.add(new Separator()); // fileMenu.add(switchWorkspaceAction); fileMenu.add(restartAction); fileMenu.add(new Separator()); fileMenu.add(new GroupMarker(IWorkbenchActionConstants.IMPORT_EXT)); fileMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); fileMenu.add(new Separator()); fileMenu.add(propertiesAction); fileMenu.add(ContributionItemFactory.REOPEN_EDITORS.create(workbenchWindow)); fileMenu.add(new GroupMarker(IWorkbenchActionConstants.MRU)); fileMenu.add(new Separator()); fileMenu.add(exitAction); fileMenu.add(new GroupMarker(IWorkbenchActionConstants.FILE_END)); // add to main menu menuBar.add(fileMenu); // Edit MenuManager editMenu = new MenuManager("&Edit", IWorkbenchActionConstants.M_EDIT); editMenu.add(new GroupMarker(IWorkbenchActionConstants.EDIT_START)); editMenu.add(undoAction); editMenu.add(redoAction); fileMenu.add(new GroupMarker(IWorkbenchActionConstants.UNDO_EXT)); editMenu.add(new Separator()); editMenu.add(cutAction); editMenu.add(copyAction); editMenu.add(pasteAction); fileMenu.add(new GroupMarker(IWorkbenchActionConstants.CUT_EXT)); editMenu.add(new Separator()); editMenu.add(deleteAction); editMenu.add(new Separator()); editMenu.add(selectAllAction); editMenu.add(new Separator()); editMenu.add(findReplaceAction); editMenu.add(new GroupMarker(IWorkbenchActionConstants.FIND_EXT)); editMenu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); editMenu.add(new GroupMarker(IWorkbenchActionConstants.EDIT_END)); // add to main menu menuBar.add(editMenu); // Additions menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); // Window menu MenuManager windowMenu = new MenuManager("&Window", IWorkbenchActionConstants.M_WINDOW); windowMenu.add(newWorkbenchWindowAction); windowMenu.add(newEditorWindowAction); windowMenu.add(new Separator()); addOpenPerspectiveAction(windowMenu); addShowViewAction(windowMenu); windowMenu.add(new Separator()); windowMenu.add(editActionSetAction); windowMenu.add(savePerspectiveAction); windowMenu.add(resetPerspectiveAction); windowMenu.add(closePerspectiveAction); windowMenu.add(closeAllPerspectivesAction); windowMenu.add(new Separator()); addKeyboardShortcuts(windowMenu); windowMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); windowMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS + "end")); //$NON-NLS-1$ windowMenu.add(preferenceAction); windowMenu.add(ContributionItemFactory.OPEN_WINDOWS.create(workbenchWindow)); // add to main menu menuBar.add(windowMenu); // Help MenuManager helpMenu = new MenuManager("&Help", IWorkbenchActionConstants.M_HELP); helpMenu.add(new GroupMarker(IWorkbenchActionConstants.HELP_START)); helpMenu.add(helpAction); helpMenu.add(dynamicHelpAction); helpMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); helpMenu.add(new GroupMarker(IWorkbenchActionConstants.HELP_END)); helpMenu.add(new Separator()); helpMenu.add(aboutAction); // add to main menu menuBar.add(helpMenu); } @Override protected void fillCoolBar(ICoolBarManager coolBar) { coolBar.add(new GroupMarker(IIDEActionConstants.GROUP_FILE)); // File Group IToolBarManager fileToolBar = new ToolBarManager(SWT.FLAT | SWT.RIGHT); 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 GroupMarker(IWorkbenchActionConstants.PRINT_EXT)); fileToolBar.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); // Add to the cool bar manager coolBar.add(new ToolBarContributionItem(fileToolBar, IWorkbenchActionConstants.TOOLBAR_FILE)); coolBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); }; /** * Adds the "Show View" action. * * @param parentMenu * the parent menu. */ private void addShowViewAction(MenuManager parentMenu) { final MenuManager subMenu = new MenuManager("&Show View", "showView"); //$NON-NLS-1$ subMenu.add(ContributionItemFactory.VIEWS_SHORTLIST.create(workbenchWindow)); parentMenu.add(subMenu); } /** * Adds the "Open Perspective" action. * * @param parentMenu * the parent menu. */ private void addOpenPerspectiveAction(MenuManager parentMenu) { final MenuManager subMenu = new MenuManager("&Open Perspective", "openPerspective"); //$NON-NLS-1$ subMenu.add(ContributionItemFactory.PERSPECTIVES_SHORTLIST.create(workbenchWindow)); parentMenu.add(subMenu); } /** * Adds the keyboard navigation submenu to the specified menu. * * @param parentMenu * the parent menu. */ private void addKeyboardShortcuts(MenuManager parentMenu) { final MenuManager subMenu = new MenuManager("&Shortcuts", "shortcuts"); //$NON-NLS-1$ parentMenu.add(subMenu); subMenu.add(showPartPaneMenuAction); subMenu.add(showViewMenuAction); subMenu.add(new Separator()); subMenu.add(maximizePartAction); subMenu.add(minimizePartAction); subMenu.add(new Separator()); subMenu.add(activateEditorAction); subMenu.add(nextEditorAction); subMenu.add(prevEditorAction); subMenu.add(switchToEditorAction); subMenu.add(openEditorDropDownAction); subMenu.add(new Separator()); subMenu.add(nextPartAction); subMenu.add(prevPartAction); subMenu.add(new Separator()); subMenu.add(nextPerspectiveAction); subMenu.add(prevPerspectiveAction); } }