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; } }