org.eclipse.cdt.debug.application.ApplicationActionBarAdvisor.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.cdt.debug.application.ApplicationActionBarAdvisor.java

Source

/*******************************************************************************
 * Copyright (c) 2013, 2015 Red Hat, Inc.
 * 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:
 *    Red Hat Inc. - initial API and implementation
 *    Marc Khouzam (Ericsson) - Update for remote debugging support (bug 450080)
 *******************************************************************************/
package org.eclipse.cdt.debug.application;

import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.util.Util;
import org.eclipse.ui.ISharedImages;
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.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.ide.IDEActionFactory;
import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
import org.eclipse.ui.internal.actions.CommandAction;
import org.eclipse.ui.internal.handlers.IActionCommandMappingService;
import org.eclipse.ui.internal.ide.IDEInternalWorkbenchImages;
import org.eclipse.ui.menus.CommandContributionItem;
import org.eclipse.ui.menus.CommandContributionItemParameter;

@SuppressWarnings("restriction")
public class ApplicationActionBarAdvisor extends ActionBarAdvisor {

    public static String COREFILE_COMMAND_ID = "org.eclipse.cdt.debug.application.command.debugCore"; //$NON-NLS-1$
    public static String NEW_EXECUTABLE_COMMAND_ID = "org.eclipse.cdt.debug.application.command.debugNewExecutable"; //$NON-NLS-1$
    public static String ATTACH_EXECUTABLE_COMMAND_ID = "org.eclipse.cdt.debug.application.command.debugAttachedExecutable"; //$NON-NLS-1$
    public static String REMOTE_EXECUTABLE_COMMAND_ID = "org.eclipse.cdt.debug.application.command.debugRemoteExecutable"; //$NON-NLS-1$

    private final IWorkbenchWindow window;

    private IWorkbenchAction corefileAction;
    private IWorkbenchAction newExecutableAction;
    private IWorkbenchAction remoteExecutableAction;
    private IWorkbenchAction attachExecutableAction;
    private IWorkbenchAction quitAction;

    private IWorkbenchAction openPreferencesAction;
    private IWorkbenchAction editActionSetAction;

    private IWorkbenchAction helpContentsAction;
    private IWorkbenchAction helpSearchAction;
    private IWorkbenchAction dynamicHelpAction;
    private IWorkbenchAction aboutAction;

    private IWorkbenchAction undoAction;
    private IWorkbenchAction redoAction;
    private IWorkbenchAction refreshAction;

    public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
        super(configurer);
        window = configurer.getWindowConfigurer().getWindow();
    }

    /**
     * Returns the window to which this action builder is contributing.
     */
    private IWorkbenchWindow getWindow() {
        return window;
    }

    @Override
    protected void makeActions(IWorkbenchWindow window) {
        quitAction = ActionFactory.QUIT.create(window);
        register(quitAction);

        newExecutableAction = NEW_EXECUTABLE.create(window);
        register(newExecutableAction);

        attachExecutableAction = ATTACH_EXECUTABLE.create(window);
        register(attachExecutableAction);

        remoteExecutableAction = REMOTE_EXECUTABLE.create(window);
        register(remoteExecutableAction);

        corefileAction = COREFILE.create(window);
        register(corefileAction);

        editActionSetAction = ActionFactory.EDIT_ACTION_SETS.create(window);
        register(editActionSetAction);

        helpContentsAction = ActionFactory.HELP_CONTENTS.create(window);
        register(helpContentsAction);

        helpSearchAction = ActionFactory.HELP_SEARCH.create(window);
        register(helpSearchAction);

        dynamicHelpAction = ActionFactory.DYNAMIC_HELP.create(window);
        register(dynamicHelpAction);

        undoAction = ActionFactory.UNDO.create(window);
        register(undoAction);

        redoAction = ActionFactory.REDO.create(window);
        register(redoAction);

        refreshAction = ActionFactory.REFRESH.create(window);
        register(refreshAction);

        aboutAction = ActionFactory.ABOUT.create(window);
        aboutAction.setImageDescriptor(
                IDEInternalWorkbenchImages.getImageDescriptor(IDEInternalWorkbenchImages.IMG_OBJS_DEFAULT_PROD));
        register(aboutAction);

        openPreferencesAction = ActionFactory.PREFERENCES.create(window);
        register(openPreferencesAction);
    }

    @Override
    protected void fillMenuBar(IMenuManager menuBar) {
        menuBar.add(createFileMenu());
        menuBar.add(createEditMenu());
        menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
        menuBar.add(createWindowMenu());
        menuBar.add(createHelpMenu());
    }

    /**
     * Creates and returns the File menu.
     */
    private MenuManager createFileMenu() {
        MenuManager menu = new MenuManager(Messages.FileMenuName, IWorkbenchActionConstants.M_FILE);
        menu.add(new GroupMarker(IWorkbenchActionConstants.FILE_START));

        ActionContributionItem newExecutableItem = new ActionContributionItem(newExecutableAction);
        menu.add(newExecutableItem);

        ActionContributionItem remoteExecutableItem = new ActionContributionItem(remoteExecutableAction);
        menu.add(remoteExecutableItem);

        ActionContributionItem attachExecutableItem = new ActionContributionItem(attachExecutableAction);
        menu.add(attachExecutableItem);

        ActionContributionItem corefileItem = new ActionContributionItem(corefileAction);
        menu.add(corefileItem);

        menu.add(new Separator());

        // This is to make sure "Open File" gets added before Exit
        menu.add(new GroupMarker(IWorkbenchActionConstants.NEW_EXT));

        ActionContributionItem refreshExecutableItem = new ActionContributionItem(refreshAction);
        menu.add(refreshExecutableItem);

        // This is to make sure "Convert line delimiters" gets added before Exit
        menu.add(new GroupMarker(IWorkbenchActionConstants.SAVE_EXT));

        // If we're on OS X we shouldn't show this command in the File menu. It
        // should be invisible to the user. However, we should not remove it -
        // the carbon UI code will do a search through our menu structure
        // looking for it when Cmd-Q is invoked (or Quit is chosen from the
        // application menu.
        ActionContributionItem quitItem = new ActionContributionItem(quitAction);
        quitItem.setVisible(!Util.isMac());
        menu.add(new Separator());
        menu.add(quitItem);
        menu.add(new GroupMarker(IWorkbenchActionConstants.FILE_END));
        return menu;
    }

    /**
     * Creates and returns the Edit menu.
     */
    private MenuManager createEditMenu() {
        MenuManager menu = new MenuManager(Messages.EditMenuName, IWorkbenchActionConstants.M_EDIT);
        menu.add(new GroupMarker(IWorkbenchActionConstants.EDIT_START));

        menu.add(undoAction);
        menu.add(redoAction);
        menu.add(new GroupMarker(IWorkbenchActionConstants.UNDO_EXT));
        menu.add(new Separator());

        menu.add(getCutItem());
        menu.add(getCopyItem());
        menu.add(getPasteItem());
        menu.add(new GroupMarker(IWorkbenchActionConstants.CUT_EXT));
        menu.add(new Separator());

        menu.add(getDeleteItem());
        menu.add(getSelectAllItem());
        menu.add(new Separator());

        menu.add(getFindItem());
        menu.add(new GroupMarker(IWorkbenchActionConstants.FIND_EXT));
        menu.add(new Separator());

        menu.add(getBookmarkItem());
        menu.add(getTaskItem());
        menu.add(new GroupMarker(IWorkbenchActionConstants.ADD_EXT));

        menu.add(new GroupMarker(IWorkbenchActionConstants.EDIT_END));
        menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
        return menu;
    }

    /**
     * Creates and returns the Window menu.
     */
    private MenuManager createWindowMenu() {
        MenuManager menu = new MenuManager(Messages.WindowMenuName, IWorkbenchActionConstants.M_WINDOW);

        addPerspectiveActions(menu);
        Separator sep = new Separator(IWorkbenchActionConstants.MB_ADDITIONS);
        sep.setVisible(!Util.isMac());
        menu.add(sep);

        // See the comment for quit in createFileMenu
        ActionContributionItem openPreferencesItem = new ActionContributionItem(openPreferencesAction);
        openPreferencesItem.setVisible(!Util.isMac());
        menu.add(openPreferencesItem);

        menu.add(ContributionItemFactory.OPEN_WINDOWS.create(getWindow()));
        return menu;
    }

    /**
     * Creates and returns the Help menu.
     */
    private MenuManager createHelpMenu() {
        MenuManager menu = new MenuManager(Messages.HelpMenuName, IWorkbenchActionConstants.M_HELP);
        menu.add(new GroupMarker("group.intro.ext")); //$NON-NLS-1$
        menu.add(new GroupMarker("group.main")); //$NON-NLS-1$
        menu.add(helpContentsAction);
        menu.add(helpSearchAction);
        menu.add(dynamicHelpAction);
        menu.add(new GroupMarker("group.assist")); //$NON-NLS-1$
        // HELP_START should really be the first item, but it was after
        // quickStartAction and tipsAndTricksAction in 2.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 GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
        // about should always be at the bottom
        menu.add(new Separator("group.about")); //$NON-NLS-1$

        ActionContributionItem aboutItem = new ActionContributionItem(aboutAction);
        aboutItem.setVisible(!Util.isMac());
        menu.add(aboutItem);
        menu.add(new GroupMarker("group.about.ext")); //$NON-NLS-1$
        return menu;
    }

    /**
     * Adds the perspective actions to the specified menu.
     */
    private void addPerspectiveActions(MenuManager menu) {
        {
            MenuManager showViewMenuMgr = new MenuManager(Messages.ShowViewMenuName, "showView"); //$NON-NLS-1$
            IContributionItem showViewMenu = ContributionItemFactory.VIEWS_SHORTLIST.create(getWindow());
            showViewMenuMgr.add(showViewMenu);
            menu.add(showViewMenuMgr);
        }
        menu.add(new Separator());
        menu.add(editActionSetAction);
        menu.add(getResetPerspectiveItem());
    }

    private IContributionItem getItem(String actionId, String commandId, String image, String disabledImage,
            String label, String tooltip, String helpContextId) {
        ISharedImages sharedImages = getWindow().getWorkbench().getSharedImages();

        IActionCommandMappingService acms = getWindow().getService(IActionCommandMappingService.class);
        acms.map(actionId, commandId);

        CommandContributionItemParameter commandParm = new CommandContributionItemParameter(getWindow(), actionId,
                commandId, null, sharedImages.getImageDescriptor(image),
                sharedImages.getImageDescriptor(disabledImage), null, label, null, tooltip,
                CommandContributionItem.STYLE_PUSH, null, false);
        return new CommandContributionItem(commandParm);
    }

    private IContributionItem getResetPerspectiveItem() {
        return getItem(ActionFactory.RESET_PERSPECTIVE.getId(), ActionFactory.RESET_PERSPECTIVE.getCommandId(),
                null, null, Messages.ResetPerspective_text, Messages.ResetPerspective_toolTip,
                IWorkbenchHelpContextIds.RESET_PERSPECTIVE_ACTION);
    }

    private IContributionItem getCutItem() {
        return getItem(ActionFactory.CUT.getId(), ActionFactory.CUT.getCommandId(), ISharedImages.IMG_TOOL_CUT,
                ISharedImages.IMG_TOOL_CUT_DISABLED, Messages.Workbench_cut, Messages.Workbench_cutToolTip, null);
    }

    private IContributionItem getCopyItem() {
        return getItem(ActionFactory.COPY.getId(), ActionFactory.COPY.getCommandId(), ISharedImages.IMG_TOOL_COPY,
                ISharedImages.IMG_TOOL_COPY_DISABLED, Messages.Workbench_copy, Messages.Workbench_copyToolTip,
                null);
    }

    private IContributionItem getPasteItem() {
        return getItem(ActionFactory.PASTE.getId(), ActionFactory.PASTE.getCommandId(),
                ISharedImages.IMG_TOOL_PASTE, ISharedImages.IMG_TOOL_PASTE_DISABLED, Messages.Workbench_paste,
                Messages.Workbench_pasteToolTip, null);
    }

    private IContributionItem getSelectAllItem() {
        return getItem(ActionFactory.SELECT_ALL.getId(), ActionFactory.SELECT_ALL.getCommandId(), null, null,
                Messages.Workbench_selectAll, Messages.Workbench_selectAllToolTip, null);
    }

    private IContributionItem getFindItem() {
        return getItem(ActionFactory.FIND.getId(), ActionFactory.FIND.getCommandId(), null, null,
                Messages.Workbench_findReplace, Messages.Workbench_findReplaceToolTip, null);
    }

    private IContributionItem getBookmarkItem() {
        return getItem(IDEActionFactory.BOOKMARK.getId(), IDEActionFactory.BOOKMARK.getCommandId(), null, null,
                Messages.Workbench_addBookmark, Messages.Workbench_addBookmarkToolTip, null);
    }

    private IContributionItem getTaskItem() {
        return getItem(IDEActionFactory.ADD_TASK.getId(), IDEActionFactory.ADD_TASK.getCommandId(), null, null,
                Messages.Workbench_addTask, Messages.Workbench_addTaskToolTip, null);
    }

    private IContributionItem getDeleteItem() {
        return getItem(ActionFactory.DELETE.getId(), ActionFactory.DELETE.getCommandId(),
                ISharedImages.IMG_TOOL_DELETE, ISharedImages.IMG_TOOL_DELETE_DISABLED, Messages.Workbench_delete,
                Messages.Workbench_deleteToolTip, IWorkbenchHelpContextIds.DELETE_RETARGET_ACTION);
    }

    private static class WorkbenchCommandAction extends CommandAction implements IWorkbenchAction {
        /**
         * @param commandIdIn
         * @param window
         */
        public WorkbenchCommandAction(String commandIdIn, IWorkbenchWindow window) {
            super(window, commandIdIn);
        }
    }

    /**
     * Workbench action (id: "corefile", commandId: "org.eclipse.cdt.debug.application.command.debugCore"): 
     * Debug an executable with a core file.  This action maintains its enablement state.
     */
    private static final ActionFactory COREFILE = new ActionFactory("corefile", //$NON-NLS-1$
            COREFILE_COMMAND_ID) {

        /* (non-Javadoc)
         * @see org.eclipse.ui.actions.ActionFactory#create(org.eclipse.ui.IWorkbenchWindow)
         */
        @Override
        public IWorkbenchAction create(IWorkbenchWindow window) {
            if (window == null) {
                throw new IllegalArgumentException();
            }
            WorkbenchCommandAction action = new WorkbenchCommandAction(getCommandId(), window);
            action.setId(getId());
            action.setText(Messages.CoreFileMenuName);
            action.setToolTipText(Messages.CoreFile_toolTip);
            return action;
        }
    };

    /**
     * Workbench action (id: "newexecutable", commandId: "org.eclipse.cdt.debug.application.command.debugNewExecutable"): 
     * Debug an executable.  This action maintains its enablement state.
     */
    private static final ActionFactory NEW_EXECUTABLE = new ActionFactory("newexecutable", //$NON-NLS-1$
            NEW_EXECUTABLE_COMMAND_ID) {

        /* (non-Javadoc)
         * @see org.eclipse.ui.actions.ActionFactory#create(org.eclipse.ui.IWorkbenchWindow)
         */
        @Override
        public IWorkbenchAction create(IWorkbenchWindow window) {
            if (window == null) {
                throw new IllegalArgumentException();
            }
            WorkbenchCommandAction action = new WorkbenchCommandAction(getCommandId(), window);
            action.setId(getId());
            action.setText(Messages.NewExecutableMenuName);
            action.setToolTipText(Messages.NewExecutable_toolTip);
            return action;
        }
    };

    /**
     * Workbench action (id: "remoteexecutable", commandId: "org.eclipse.cdt.debug.application.command.debugRemoteExecutable"): 
     * Debug a remote executable.  This action maintains its enablement state.
     */
    private static final ActionFactory REMOTE_EXECUTABLE = new ActionFactory("remoteexecutable", //$NON-NLS-1$
            REMOTE_EXECUTABLE_COMMAND_ID) {

        /* (non-Javadoc)
         * @see org.eclipse.ui.actions.ActionFactory#create(org.eclipse.ui.IWorkbenchWindow)
         */
        @Override
        public IWorkbenchAction create(IWorkbenchWindow window) {
            if (window == null) {
                throw new IllegalArgumentException();
            }
            WorkbenchCommandAction action = new WorkbenchCommandAction(getCommandId(), window);
            action.setId(getId());
            action.setText(Messages.RemoteExecutableMenuName);
            action.setToolTipText(Messages.RemoteExecutable_toolTip);
            return action;
        }
    };

    /**
     * Workbench action (id: "attachexecutable", commandId: "org.eclipse.cdt.debug.application.command.debugAttachedExecutable"): 
     * Attach and debug an existing executable.  This action maintains its enablement state.
     */
    private static final ActionFactory ATTACH_EXECUTABLE = new ActionFactory("attachexecutable", //$NON-NLS-1$
            ATTACH_EXECUTABLE_COMMAND_ID) {

        /* (non-Javadoc)
         * @see org.eclipse.ui.actions.ActionFactory#create(org.eclipse.ui.IWorkbenchWindow)
         */
        @Override
        public IWorkbenchAction create(IWorkbenchWindow window) {
            if (window == null) {
                throw new IllegalArgumentException();
            }
            WorkbenchCommandAction action = new WorkbenchCommandAction(getCommandId(), window);
            action.setId(getId());
            action.setText(Messages.AttachedExecutableMenuName);
            action.setToolTipText(Messages.AttachedExecutable_toolTip);
            return action;
        }
    };

}