Package org.erlide.ui.internal.search

Source Code of org.erlide.ui.internal.search.OpenViewActionGroup

package org.erlide.ui.internal.search;

import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.search.ui.IContextMenuConstants;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchSite;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.actions.ActionGroup;
import org.eclipse.ui.actions.ContributionItemFactory;
import org.eclipse.ui.dialogs.PropertyDialogAction;
import org.eclipse.ui.keys.IBindingService;
import org.eclipse.ui.part.Page;
import org.erlide.ui.editors.erl.AbstractErlangEditor;

public class OpenViewActionGroup extends ActionGroup {

    private boolean fEditorIsOwner;
    // private boolean fIsTypeHiararchyViewerOwner;
    // private boolean fIsCallHiararchyViewerOwner;

    private ISelectionProvider fSelectionProvider;

    // private OpenSuperImplementationAction fOpenSuperImplementation;
    // private OpenExternalJavadocAction fOpenExternalJavadoc;
    // private OpenTypeHierarchyAction fOpenTypeHierarchy;
    // private OpenCallHierarchyAction fOpenCallHierarchy;
    private PropertyDialogAction fOpenPropertiesDialog;

    private boolean fShowOpenPropertiesAction = true;
    private boolean fShowShowInMenu = true;
    private IWorkbenchSite site;

    /**
     * Creates a new <code>OpenActionGroup</code>. The group requires that the
     * selection provided by the page's selection provider is of type
     * {@link IStructuredSelection}.
     *
     * @param page
     *            the page that owns this action group
     */
    public OpenViewActionGroup(final Page page) {
        site = page.getSite();
        createSiteActions(null);
    }

    /**
     * Creates a new <code>OpenActionGroup</code>. The group requires that the
     * selection provided by the given selection provider is of type
     * {@link IStructuredSelection}.
     *
     * @param page
     *            the page that owns this action group
     * @param selectionProvider
     *            the selection provider used instead of the page selection
     *            provider.
     *
     * @since 3.2
     */
    public OpenViewActionGroup(final Page page, final ISelectionProvider selectionProvider) {
        site = page.getSite();
        createSiteActions(selectionProvider);
    }

    /**
     * Creates a new <code>OpenActionGroup</code>. The group requires that the
     * selection provided by the part's selection provider is of type
     * {@link IStructuredSelection}.
     *
     * @param part
     *            the view part that owns this action group
     */
    public OpenViewActionGroup(final IViewPart part) {
        this(part, null);
    }

    /**
     * Creates a new <code>OpenActionGroup</code>. The group requires that the
     * selection provided by the given selection provider is of type
     * {@link IStructuredSelection}.
     *
     * @param part
     *            the view part that owns this action group
     * @param selectionProvider
     *            the selection provider used instead of the page selection
     *            provider.
     *
     * @since 3.2
     */
    public OpenViewActionGroup(final IViewPart part,
            final ISelectionProvider selectionProvider) {
        site = part.getSite();
        createSiteActions(selectionProvider);
        // we do a name check here to avoid class loading.
        // final String partName = part.getClass().getName();
        //    fIsTypeHiararchyViewerOwner= "org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyViewPart".equals(partName); //$NON-NLS-1$
        //    fIsCallHiararchyViewerOwner= "org.eclipse.jdt.internal.ui.callhierarchy.CallHierarchyViewPart".equals(partName); //$NON-NLS-1$
    }

    /**
     * Creates a new <code>OpenActionGroup</code>. The group requires that the
     * selection provided by the given selection provider is of type
     * {@link IStructuredSelection}.
     *
     * @param site
     *            the site that will own the action group.
     * @param selectionProvider
     *            the selection provider used instead of the page selection
     *            provider.
     *
     * @since 3.2
     */
    public OpenViewActionGroup(final IWorkbenchSite site,
            final ISelectionProvider selectionProvider) {
        this.site = site;
        createSiteActions(selectionProvider);
    }

    /**
     * Note: This constructor is for internal use only. Clients should not call
     * this constructor.
     *
     * @param part
     *            the editor part
     *
     * @noreference This constructor is not intended to be referenced by
     *              clients.
     */
    public OpenViewActionGroup(final AbstractErlangEditor part) {
        fEditorIsOwner = true;
        fShowShowInMenu = false;

        // fOpenSuperImplementation= new OpenSuperImplementationAction(part);
        // fOpenSuperImplementation.setActionDefinitionId(IJavaEditorActionDefinitionIds.OPEN_SUPER_IMPLEMENTATION);
        //    part.setAction("OpenSuperImplementation", fOpenSuperImplementation); //$NON-NLS-1$
        //
        // fOpenExternalJavadoc= new OpenExternalJavadocAction(part);
        // fOpenExternalJavadoc.setActionDefinitionId(IJavaEditorActionDefinitionIds.OPEN_EXTERNAL_JAVADOC);
        //    part.setAction("OpenExternalJavadoc", fOpenExternalJavadoc); //$NON-NLS-1$
        //
        // fOpenTypeHierarchy= new OpenTypeHierarchyAction(part);
        // fOpenTypeHierarchy.setActionDefinitionId(IJavaEditorActionDefinitionIds.OPEN_TYPE_HIERARCHY);
        //    part.setAction("OpenTypeHierarchy", fOpenTypeHierarchy); //$NON-NLS-1$
        //
        // fOpenCallHierarchy= new OpenCallHierarchyAction(part);
        // fOpenCallHierarchy.setActionDefinitionId(IJavaEditorActionDefinitionIds.OPEN_CALL_HIERARCHY);
        //        part.setAction("OpenCallHierarchy", fOpenCallHierarchy); //$NON-NLS-1$

        initialize(part.getEditorSite().getSelectionProvider());
    }

    /**
     * Specifies if this action group also contains the 'Properties' action (
     * {@link PropertyDialogAction}). By default, the action is contained in the
     * group.
     *
     * @param enable
     *            If set, the 'Properties' action is part of this action group
     * @since 3.3
     */
    public void containsOpenPropertiesAction(final boolean enable) {
        fShowOpenPropertiesAction = enable;
    }

    /**
     * Specifies if this action group also contains the 'Show In' menu (See
     * {@link ContributionItemFactory#VIEWS_SHOW_IN}). By default, the action is
     * contained in the group except for editors.
     *
     * @param enable
     *            If set, the 'Show In' menu is part of this action group
     * @since 3.3
     */
    public void containsShowInMenu(final boolean enable) {
        fShowShowInMenu = enable;
    }

    private void createSiteActions(final ISelectionProvider specialProvider) {
        // fOpenSuperImplementation= new OpenSuperImplementationAction(site);
        // fOpenSuperImplementation.setActionDefinitionId(IJavaEditorActionDefinitionIds.OPEN_SUPER_IMPLEMENTATION);
        // fOpenSuperImplementation.setSpecialSelectionProvider(specialProvider);
        //
        // fOpenExternalJavadoc= new OpenExternalJavadocAction(site);
        // fOpenExternalJavadoc.setActionDefinitionId(IJavaEditorActionDefinitionIds.OPEN_EXTERNAL_JAVADOC);
        // fOpenExternalJavadoc.setSpecialSelectionProvider(specialProvider);
        //
        // fOpenTypeHierarchy= new OpenTypeHierarchyAction(site);
        // fOpenTypeHierarchy.setActionDefinitionId(IJavaEditorActionDefinitionIds.OPEN_TYPE_HIERARCHY);
        // fOpenTypeHierarchy.setSpecialSelectionProvider(specialProvider);
        //
        // fOpenCallHierarchy= new OpenCallHierarchyAction(site);
        // fOpenCallHierarchy.setActionDefinitionId(IJavaEditorActionDefinitionIds.OPEN_CALL_HIERARCHY);
        // fOpenCallHierarchy.setSpecialSelectionProvider(specialProvider);

        final ISelectionProvider provider = specialProvider != null ? specialProvider
                : site.getSelectionProvider();

        fOpenPropertiesDialog = new PropertyDialogAction(site, provider);
        fOpenPropertiesDialog.setActionDefinitionId("org.eclipse.ui.file.properties"); // $NON-NLS-1$

        initialize(provider);
    }

    private void initialize(final ISelectionProvider provider) {
        fSelectionProvider = provider;
        final ISelection selection = fSelectionProvider.getSelection();
        // fOpenSuperImplementation.update(selection);
        // fOpenExternalJavadoc.update(selection);
        // fOpenTypeHierarchy.update(selection);
        // fOpenCallHierarchy.update(selection);
        if (!fEditorIsOwner) {
            if (fShowOpenPropertiesAction) {
                if (selection instanceof IStructuredSelection) {
                    fOpenPropertiesDialog
                            .selectionChanged((IStructuredSelection) selection);
                } else {
                    fOpenPropertiesDialog.selectionChanged(selection);
                }
            }
            // provider.addSelectionChangedListener(fOpenSuperImplementation);
            // provider.addSelectionChangedListener(fOpenExternalJavadoc);
            // provider.addSelectionChangedListener(fOpenTypeHierarchy);
            // provider.addSelectionChangedListener(fOpenCallHierarchy);
            // no need to register the open properties dialog action since it
            // registers itself
        }
    }

    @Override
    public void fillActionBars(final IActionBars actionBar) {
        super.fillActionBars(actionBar);
        setGlobalActionHandlers(actionBar);
    }

    @Override
    public void fillContextMenu(final IMenuManager menu) {
        super.fillContextMenu(menu);
        // if (!fIsTypeHiararchyViewerOwner)
        // appendToGroup(menu, fOpenTypeHierarchy);
        // if (!fIsCallHiararchyViewerOwner)
        // appendToGroup(menu, fOpenCallHierarchy);

        if (fShowShowInMenu) {
            final MenuManager showInSubMenu = new MenuManager(getShowInMenuLabel());
            final IWorkbenchWindow workbenchWindow = getSite().getWorkbenchWindow();
            showInSubMenu.add(ContributionItemFactory.VIEWS_SHOW_IN
                    .create(workbenchWindow));
            menu.appendToGroup(IContextMenuConstants.GROUP_OPEN, showInSubMenu);
        }

        final IStructuredSelection selection = getStructuredSelection();
        if (fShowOpenPropertiesAction && selection != null
                && fOpenPropertiesDialog.isApplicableForSelection()) {
            menu.appendToGroup(IContextMenuConstants.GROUP_PROPERTIES,
                    fOpenPropertiesDialog);
        }
    }

    private IWorkbenchSite getSite() {
        return site;
    }

    public static final String NAVIGATE_SHOW_IN_QUICK_MENU = "org.eclipse.ui.navigate.showInQuickMenu"; //$NON-NLS-1$

    private String getShowInMenuLabel() {
        String keyBinding = null;

        final IBindingService bindingService = (IBindingService) PlatformUI
                .getWorkbench().getAdapter(IBindingService.class);
        if (bindingService != null) {
            keyBinding = bindingService
                    .getBestActiveBindingFormattedFor(NAVIGATE_SHOW_IN_QUICK_MENU);
        }

        if (keyBinding == null) {
            keyBinding = ""; //$NON-NLS-1$
        }

        return "Sho&w In" + '\t' + keyBinding;
    }

    /*
     * @see ActionGroup#dispose()
     */
    @Override
    public void dispose() {
        // fSelectionProvider
        // .removeSelectionChangedListener(fOpenSuperImplementation);
        // fSelectionProvider.removeSelectionChangedListener(fOpenExternalJavadoc);
        // fSelectionProvider.removeSelectionChangedListener(fOpenTypeHierarchy);
        // fSelectionProvider.removeSelectionChangedListener(fOpenCallHierarchy);
        super.dispose();
    }

    private void setGlobalActionHandlers(final IActionBars actionBars) {
        // actionBars.setGlobalActionHandler(
        // JdtActionConstants.OPEN_SUPER_IMPLEMENTATION,
        // fOpenSuperImplementation);
        // actionBars
        // .setGlobalActionHandler(
        // JdtActionConstants.OPEN_EXTERNAL_JAVA_DOC,
        // fOpenExternalJavadoc);
        // actionBars.setGlobalActionHandler(
        // JdtActionConstants.OPEN_TYPE_HIERARCHY, fOpenTypeHierarchy);
        // actionBars.setGlobalActionHandler(
        // JdtActionConstants.OPEN_CALL_HIERARCHY, fOpenCallHierarchy);

        if (!fEditorIsOwner && fShowOpenPropertiesAction) {
            actionBars.setGlobalActionHandler(ActionFactory.PROPERTIES.getId(),
                    fOpenPropertiesDialog);
        }
    }

    // private void appendToGroup(final IMenuManager menu, final IAction action)
    // {
    // if (action.isEnabled()) {
    // menu.appendToGroup(IContextMenuConstants.GROUP_OPEN, action);
    // }
    // }

    private IStructuredSelection getStructuredSelection() {
        final ISelection selection = getContext().getSelection();
        if (selection instanceof IStructuredSelection) {
            return (IStructuredSelection) selection;
        }
        return null;
    }
}
TOP

Related Classes of org.erlide.ui.internal.search.OpenViewActionGroup

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.