com.nokia.tools.variant.carbidev.ApplicationActionBarAdvisor.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.tools.variant.carbidev.ApplicationActionBarAdvisor.java

Source

/*
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
 * which accompanies this distribution, and is available
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
 * 
 * Initial Contributors:
 * Nokia Corporation - Initial contribution
 * 
 * Contributors:
 * 
 * Description: This file is part of com.nokia.tools.variant.carbidev component.
 */

package com.nokia.tools.variant.carbidev;

import org.eclipse.core.runtime.IExtension;
import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IContributionManager;
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.SubToolBarManager;
import org.eclipse.jface.action.ToolBarContributionItem;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IPageListener;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.SubActionBars;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.internal.WorkbenchPlugin;
import org.eclipse.ui.internal.registry.ActionSetRegistry;
import org.eclipse.ui.internal.registry.IActionSetDescriptor;
import org.eclipse.ui.part.PageBookView;
import org.eclipse.ui.views.properties.PropertySheet;
import org.eclipse.ui.views.properties.PropertySheetPage;

import com.nokia.tools.variant.carbidev.perspective.actions.CarbideVResetPerspectiveAction;
import com.nokia.tools.variant.editor.actions.DeselectAllSettingsAction;
import com.nokia.tools.variant.editor.actions.ExportDataAsConfML;
import com.nokia.tools.variant.editor.actions.HideSettingsFromViewAction;
import com.nokia.tools.variant.editor.actions.ResetToDefaultAction;
import com.nokia.tools.variant.editor.actions.SaveActionUI;
import com.nokia.tools.variant.editor.actions.SelectAllSettingsAction;

public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
    private Composite propertiesControl;
    private IContributionItem reopen;
    private ActionSetRegistry reg;
    private IActionSetDescriptor[] actionSets;
    private IWorkbenchAction saveAsAction;
    private IWorkbenchAction saveAction;
    private IWorkbenchAction closeAction;
    private IWorkbenchAction closeAllAction;
    private ExportDataAsConfML exportDataAsConfML;

    // not working actions
    private IWorkbenchAction cutAction;
    private IWorkbenchAction copyAction;
    private IWorkbenchAction pasteAction;
    private IWorkbenchAction deleteAction;

    private SelectAllSettingsAction selectAllAction;
    private DeselectAllSettingsAction deselectAllAction;
    private HideSettingsFromViewAction hideSelectedSettingsAction;
    private ResetToDefaultAction resetToDefaultAction;

    // private UpdateAction updateAction;

    private IWorkbenchAction toolbarAction;
    private IWorkbenchAction resetPerspectiveAction;

    public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
        super(configurer);

        reg = WorkbenchPlugin.getDefault().getActionSetRegistry();
        actionSets = reg.getActionSets();
    }

    private IWorkbenchAction undoAction;

    private IWorkbenchAction redoAction;
    private IWorkbenchAction exitAction;
    private IWorkbenchAction helpAction;
    private IWorkbenchAction aboutAction;
    private MenuManager showViewMenuMgr;

    protected void makeActions(IWorkbenchWindow window) {
        undoAction = ActionFactory.UNDO.create(window);
        register(undoAction);
        // saveAction = ActionFactory.SAVE.create(window);
        saveAction = new SaveActionUI(window);
        register(saveAction);
        saveAsAction = ActionFactory.SAVE_AS.create(window);
        register(saveAsAction);
        redoAction = ActionFactory.REDO.create(window);
        register(redoAction);
        closeAction = ActionFactory.CLOSE.create(window);
        register(closeAction);
        closeAllAction = ActionFactory.CLOSE_ALL.create(window);
        register(closeAllAction);

        copyAction = ActionFactory.COPY.create(window);
        register(copyAction);
        cutAction = ActionFactory.CUT.create(window);
        register(cutAction);
        pasteAction = ActionFactory.PASTE.create(window);
        register(pasteAction);
        deleteAction = ActionFactory.DELETE.create(window);
        register(deleteAction);

        selectAllAction = SelectAllSettingsAction.getInstance();//new SelectAllSettingsAction();
        selectAllAction.init(window);
        selectAllAction.setEnabled(false);
        deselectAllAction = new DeselectAllSettingsAction();
        deselectAllAction.init(window);
        deselectAllAction.setEnabled(false);
        hideSelectedSettingsAction = new HideSettingsFromViewAction();
        hideSelectedSettingsAction.init(window);
        hideSelectedSettingsAction.setEnabled(false);
        resetToDefaultAction = new ResetToDefaultAction();
        resetToDefaultAction.init(window);
        resetToDefaultAction.setEnabled(false);
        exportDataAsConfML = new ExportDataAsConfML(window);
        register(exportDataAsConfML);

        toolbarAction = ActionFactory.TOGGLE_COOLBAR.create(window);
        register(toolbarAction);
        // resetPerspectiveAction =
        // ActionFactory.RESET_PERSPECTIVE.create(window);
        resetPerspectiveAction = RESET_PERSPECTIVE.create(window);
        register(resetPerspectiveAction);

        reopen = new BetterReopenEditorMenu(window, "reopen", true);

        helpAction = ActionFactory.HELP_CONTENTS.create(window);

        String appName = (String) Activator.getPluginProperties().getObject("appName");
        helpAction.setText(appName + " &Help ...");
        helpAction.setAccelerator(SWT.F1);
        register(helpAction);
        exitAction = ActionFactory.QUIT.create(window);
        register(exitAction);
        aboutAction = ActionFactory.ABOUT.create(window);
        register(aboutAction);

        // ConfigurationManagerWindow configurationManagerWindow=new
        // ConfigurationManagerWindow(window.getShell());

        // updateAction=new UpdateAction();
        // updateAction.setId(UpdateAction.ID);
        // updateAction.setText("Update Action");
        // findUpdatesAction =
        // new FindUpdatesAction( configurationManagerWindow,
        // UpdateUIMessages.ConfigurationView_findUpdates);

        // findUpdatesAction=new
        // FindUpdatesAction(configurationManagerWindow,"fshgbfdh");
        // findUpdatesAction.setEnabled(true);
        // findUpdatesAction.setId("sgbfdfabda");

        // ConfigurationView configurationView=new
        // ConfigurationView(configurationManagerWindow);

        // register( updateAction);

        hackProperties(window);
    }

    private void hackProperties(IWorkbenchWindow window) {

        window.addPageListener(new IPageListener() {

            public void pageActivated(IWorkbenchPage page) {

                getAndHideProperties(page);

            }

            public void pageClosed(IWorkbenchPage page) {

            }

            public void pageOpened(IWorkbenchPage page) {
                getAndHideProperties(page);

            }

        });

        window.getPartService().addPartListener(new IPartListener() {

            public void partActivated(IWorkbenchPart part) {
                getAndHideProperties(part.getSite().getPage());
            }

            public void partBroughtToTop(IWorkbenchPart part) {
                getAndHideProperties(part.getSite().getPage());
            }

            public void partClosed(IWorkbenchPart part) {
                handlePropertiesVisibility(part);

            }

            private void handlePropertiesVisibility(IWorkbenchPart part) {
                IWorkbench workbench = PlatformUI.getWorkbench();
                if (workbench != null) {
                    IWorkbenchWindow activeWorkbenchWindow = workbench.getActiveWorkbenchWindow();
                    if (activeWorkbenchWindow != null) {
                        IWorkbenchPage activePage = activeWorkbenchWindow.getActivePage();
                        if (activePage != null) {
                            IEditorPart activeEditor = activePage.getActiveEditor();
                            if (activeEditor != null) {
                                return;
                            }
                        }
                    }
                }
                if (propertiesControl != null && !propertiesControl.isDisposed()) {
                    propertiesControl.setVisible(false);
                } else {
                    getAndHideProperties(part.getSite().getPage());
                }
            }

            public void partDeactivated(IWorkbenchPart part) {
                IWorkbench workbench = PlatformUI.getWorkbench();
                if (workbench != null) {
                    IWorkbenchWindow activeWorkbenchWindow = workbench.getActiveWorkbenchWindow();
                    if (activeWorkbenchWindow != null) {
                        IWorkbenchPage activePage = activeWorkbenchWindow.getActivePage();
                        if (activePage != null) {
                            IEditorPart activeEditor = activePage.getActiveEditor();
                            if (activeEditor != null) {
                                return;
                            }
                        }
                    }
                }
                if (propertiesControl != null && !propertiesControl.isDisposed()) {
                    propertiesControl.setVisible(false);
                } else {
                    getAndHideProperties(part.getSite().getPage());
                }
            }

            public void partOpened(IWorkbenchPart part) {
                IWorkbench workbench = PlatformUI.getWorkbench();
                if (workbench != null) {
                    IWorkbenchWindow activeWorkbenchWindow = workbench.getActiveWorkbenchWindow();
                    if (activeWorkbenchWindow != null) {
                        IWorkbenchPage activePage = activeWorkbenchWindow.getActivePage();
                        if (activePage != null) {
                            IEditorPart activeEditor = activePage.getActiveEditor();
                            if (activeEditor != null) {
                                return;
                            }
                        }
                    }
                }
                if (part instanceof PropertySheet) {
                    PageBookView findView = (PageBookView) part;
                    if (findView.getCurrentPage() instanceof PropertySheetPage) {
                        PropertySheetPage currentPage = (PropertySheetPage) findView.getCurrentPage();
                        SubActionBars actionBars = (SubActionBars) currentPage.getSite().getActionBars();
                        SubToolBarManager toolBarManager = (SubToolBarManager) actionBars.getToolBarManager();
                        IContributionManager parent2 = toolBarManager.getParent();
                        parent2.removeAll();
                        parent2.update(true);
                        propertiesControl = (Composite) currentPage.getControl();
                        propertiesControl.setVisible(false);
                        propertiesControl.addPaintListener(new PaintListener() {

                            public void paintControl(PaintEvent e) {
                                propertiesControl.setVisible(false);

                            }

                        });
                    }
                }
            }

        });

    }

    protected void fillMenuBar(IMenuManager menuBar) {
        menuBar.add(createFileMenu());
        menuBar.add(createEditMenu());
        menuBar.add(createToolsMenu());
        menuBar.add(createViewMenu());
        menuBar.add(createHelpMenu());

        // removing unwanted actions
        removeAction("org.eclipse.search.searchActionSet");
    }

    private MenuManager createEditMenu() {
        MenuManager editMenu = new MenuManager("&Edit", "rcpEdit");
        editMenu.add(undoAction);
        editMenu.add(redoAction);
        editMenu.add(new Separator());
        editMenu.add(cutAction);
        editMenu.add(copyAction);
        editMenu.add(pasteAction);
        editMenu.add(deleteAction);
        editMenu.add(new Separator());
        editMenu.add(selectAllAction);
        editMenu.add(deselectAllAction);
        editMenu.add(hideSelectedSettingsAction);
        editMenu.add(resetToDefaultAction);
        editMenu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
        editMenu.add(new Separator());
        editMenu.add(new GroupMarker(IWorkbenchActionConstants.EDIT_END));
        return editMenu;
    }

    private MenuManager createViewMenu() {
        MenuManager viewMenu = new MenuManager("&View", "rcpView");
        viewMenu.add(new GroupMarker("views"));
        viewMenu.add(new Separator());
        viewMenu.add(new GroupMarker("errorview"));
        viewMenu.add(new GroupMarker("notesview"));
        viewMenu.add(new GroupMarker("changesview"));
        viewMenu.add(new GroupMarker("searchresultview"));
        viewMenu.add(new Separator());
        toolbarAction.setText("Toolbar");
        toolbarAction.setToolTipText("Displays / hides Toolbar");
        toolbarAction.setChecked(true);
        viewMenu.add(toolbarAction);
        viewMenu.add(new GroupMarker("bars"));
        viewMenu.add(new Separator());
        resetPerspectiveAction.setText("Reset Layout");
        resetPerspectiveAction.setImageDescriptor(Activator.getImageDescriptor("icons/carbide_v_16x16.png"));
        viewMenu.add(resetPerspectiveAction);
        viewMenu.add(new Separator());
        viewMenu.add(new GroupMarker(IWorkbenchActionConstants.WINDOW_EXT));
        return viewMenu;
    }

    private MenuManager createHelpMenu() {
        MenuManager helpMenu = new MenuManager("&Help", "rcpHelp");
        helpMenu.add(helpAction);
        helpMenu.add(new Separator());
        helpMenu.add(new GroupMarker(IWorkbenchActionConstants.HELP_START));
        helpMenu.add(new Separator());
        helpMenu.add(new GroupMarker("middlepart"));
        helpMenu.add(new Separator());
        helpMenu.add(aboutAction);

        helpMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
        return helpMenu;
    }

    private MenuManager createFileMenu() {
        MenuManager fileMenu = new MenuManager("&File", "rcpFile");
        fileMenu.add(new GroupMarker(IWorkbenchActionConstants.OPEN_EXT));
        fileMenu.add(new GroupMarker("openasnew"));
        fileMenu.add(closeAction);
        fileMenu.add(closeAllAction);
        fileMenu.add(new Separator());
        fileMenu.add(saveAction);
        fileMenu.add(saveAsAction);
        fileMenu.add(exportDataAsConfML);
        // Copy and Report moved to Tools
        // fileMenu.add(new Separator());
        // fileMenu.add(new GroupMarker("copy"));
        // fileMenu.add(new
        // GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
        fileMenu.add(new Separator());
        fileMenu.add(exitAction);
        fileMenu.add(new Separator());
        fileMenu.add(reopen);
        return fileMenu;
    }

    private MenuManager createToolsMenu() {
        MenuManager toolsMenu = new MenuManager("&Tools", "rcpTools");
        toolsMenu.add(new GroupMarker("copy"));
        toolsMenu.add(new GroupMarker("report"));

        return toolsMenu;
    }

    @Override
    protected void fillCoolBar(ICoolBarManager coolBar) {
        IToolBarManager tb = new ToolBarManager(coolBar.getStyle());
        tb.add(new GroupMarker(IWorkbenchActionConstants.OPEN_EXT));
        tb.add(saveAction);
        tb.add(saveAsAction);
        tb.add(exportDataAsConfML);
        tb.add(new Separator());
        tb.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
        coolBar.add(new ToolBarContributionItem(tb, "rcpMain"));

        // IToolBarManager toolbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT);
        // coolBar.add(new ToolBarContributionItem(toolbar, "rcpMain"));
        // toolbar.add(saveAction);
        // toolbar.add(saveAsAction);
        // removing unwanted actions
        removeAction("org.eclipse.ui.edit.text.actionSet.navigation");
        removeAction("org.eclipse.ui.edit.text.actionSet.annotationNavigation");
    }

    /**
     * Removing native Jazz or Eclipse buttons from toolbar and menu.
     * 
     * @param actionSetId
     */
    private void removeAction(String actionSetId) {

        for (int i = 0; i < actionSets.length; i++)

        {

            if (!actionSets[i].getId().equals(actionSetId))

                continue;

            IExtension ext = actionSets[i].getConfigurationElement()

                    .getDeclaringExtension();

            reg.removeExtension(ext, new Object[] { actionSets[i] });

        }

    }

    private void getAndHideProperties(IWorkbenchPage page) {
        IWorkbenchWindow activeWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
        if (activeWorkbenchWindow != null) {
            IWorkbenchPage activePage = activeWorkbenchWindow.getActivePage();
            if (activePage != null) {
                IEditorPart activeEditor = activePage.getActiveEditor();
                if (activeEditor != null) {
                    return;
                }
            }
        }
        PageBookView findView = (PageBookView) page.findView("org.eclipse.ui.views.PropertySheet");
        if (findView != null && findView.getCurrentPage() instanceof PropertySheetPage) {
            PropertySheetPage currentPage = (PropertySheetPage) findView.getCurrentPage();
            SubActionBars actionBars = (SubActionBars) currentPage.getSite().getActionBars();
            SubToolBarManager toolBarManager = (SubToolBarManager) actionBars.getToolBarManager();
            IContributionManager parent2 = toolBarManager.getParent();
            parent2.removeAll();
            parent2.update(true);
            propertiesControl = (Composite) currentPage.getControl();
            propertiesControl.setVisible(false);
            propertiesControl.addPaintListener(new PaintListener() {

                public void paintControl(PaintEvent e) {
                    propertiesControl.setVisible(false);

                }

            });
        }
    }

    /**
     * Workbench action (id "resetPerspective"): Resets the current perspective.
     * This action maintains its enablement state.
     */
    public static final ActionFactory RESET_PERSPECTIVE = new ActionFactory("resetPerspective") {//$NON-NLS-1$

        /*
         * (non-Javadoc)
         * 
         * @seeorg.eclipse.ui.actions.ActionFactory#create(org.eclipse.ui.
         * IWorkbenchWindow)
         */
        public IWorkbenchAction create(IWorkbenchWindow window) {
            if (window == null) {
                throw new IllegalArgumentException();
            }
            IWorkbenchAction action = new CarbideVResetPerspectiveAction(window);
            action.setId(getId());
            return action;
        }
    };
}