Package org.erlide.ui.navigator.actions

Source Code of org.erlide.ui.navigator.actions.ErlangFileActionProvider

package org.erlide.ui.navigator.actions;

import org.eclipse.core.resources.IFile;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.actions.OpenWithMenu;
import org.eclipse.ui.contexts.IContextService;
import org.eclipse.ui.navigator.CommonActionProvider;
import org.eclipse.ui.navigator.ICommonActionConstants;
import org.eclipse.ui.navigator.ICommonActionExtensionSite;
import org.eclipse.ui.navigator.ICommonMenuConstants;
import org.eclipse.ui.navigator.ICommonViewerSite;
import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite;
import org.erlide.engine.new_model.IErlSource;
import org.erlide.ui.actions.ErlangSearchActionGroup;

public class ErlangFileActionProvider extends CommonActionProvider {

    private OpenErlangAction openAction;
    private ErlangSearchActionGroup searchActionGroup;

    public ErlangFileActionProvider() {
    }

    @Override
    public void init(final ICommonActionExtensionSite aSite) {
        super.init(aSite);
        final ICommonViewerSite viewSite = aSite.getViewSite();
        if (viewSite instanceof ICommonViewerWorkbenchSite) {
            final ICommonViewerWorkbenchSite workbenchSite = (ICommonViewerWorkbenchSite) viewSite;
            final IWorkbenchPartSite site = workbenchSite.getSite();
            openAction = new OpenErlangAction(aSite, workbenchSite.getSelectionProvider());
            searchActionGroup = new ErlangSearchActionGroup(site);
            final IContextService service = (IContextService) site
                    .getService(IContextService.class);
            service.activateContext("org.erlide.ui.erlangOutlineAndNavigatorScope");
        }
    }

    @Override
    public void fillActionBars(final IActionBars actionBars) {
        /* Set up the property open action when enabled. */
        if (openAction.isEnabled()) {
            actionBars.setGlobalActionHandler(ICommonActionConstants.OPEN, openAction);
        }
    }

    @Override
    public void fillContextMenu(final IMenuManager menu) {
        if (openAction.isEnabled()) {
            menu.appendToGroup(ICommonMenuConstants.GROUP_OPEN, openAction);
        }
        searchActionGroup.fillContextMenu(menu);
        addOpenWithMenu(menu);
    }

    private void addOpenWithMenu(final IMenuManager menu) {
        final IStructuredSelection selection = (IStructuredSelection) getContext()
                .getSelection();
        if (selection == null || selection.size() != 1) {
            return;
        }

        final Object element = selection.getFirstElement();

        IFile file = null;
        if (element instanceof IErlSource) {
            file = ((IErlSource) element).getFile();
        } else if (element instanceof IFile) {
            file = (IFile) element;
        }
        if (file != null) {
            final IMenuManager submenu = new MenuManager("Open Wit&h");
            submenu.add(new OpenWithMenu(getPage(), file));

            menu.appendToGroup(ICommonMenuConstants.GROUP_OPEN_WITH, submenu);
        }
    }

    private IWorkbenchPage getPage() {
        final ICommonActionExtensionSite actionSite = getActionSite();
        final ICommonViewerWorkbenchSite site = (ICommonViewerWorkbenchSite) actionSite
                .getViewSite();
        return site.getPage();
    }
}
TOP

Related Classes of org.erlide.ui.navigator.actions.ErlangFileActionProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.