+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package net.sourceforge.phpdt.ui.actions;
-
-import net.sourceforge.phpdt.internal.ui.actions.ActionMessages;
-import net.sourceforge.phpdt.ui.IContextMenuConstants;
-import net.sourceforge.phpeclipse.actions.PHPOpenDeclarationAction;
-import net.sourceforge.phpeclipse.phpeditor.PHPEditor;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.jface.action.IAction;
-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.ui.IActionBars;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.IWorkbenchSite;
-import org.eclipse.ui.actions.ActionGroup;
-import org.eclipse.ui.actions.OpenWithMenu;
-
-/**
- * Action group that adds the actions opening a new editor to the context menu
- * and the action bar's navigate menu.
- *
- * <p>
- * This class may be instantiated; it is not intended to be subclassed.
- * </p>
- *
- * @since 2.0
- */
-public class OpenEditorActionGroup extends ActionGroup {
-
- private IWorkbenchSite fSite;
-
- private boolean fIsEditorOwner;
-
- private PHPOpenDeclarationAction fOpen;
-
- /**
- * Creates a new <code>OpenActionGroup</code>. The group requires that
- * the selection provided by the part's selection provider is of type <code>
- * org.eclipse.jface.viewers.IStructuredSelection</code>.
- *
- * @param part
- * the view part that owns this action group
- */
- public OpenEditorActionGroup(IViewPart part) {
- fSite = part.getSite();
- fOpen = new PHPOpenDeclarationAction(fSite);
- fOpen.setActionDefinitionId(PHPEditorActionDefinitionIds.OPEN_EDITOR);
- initialize(fSite.getSelectionProvider());
- }
-
- /**
- * Note: This constructor is for internal use only. Clients should not call
- * this constructor.
- */
- public OpenEditorActionGroup(PHPEditor part) {
- fIsEditorOwner = true;
- fOpen = new PHPOpenDeclarationAction(part);
- fOpen.setActionDefinitionId(PHPEditorActionDefinitionIds.OPEN_EDITOR);
- part.setAction("OpenEditor", fOpen); //$NON-NLS-1$
- fSite = part.getEditorSite();
- initialize(fSite.getSelectionProvider());
- }
-
- /**
- * Returns the open action managed by this action group.
- *
- * @return the open action. Returns <code>null</code> if the group doesn't
- * provide any open action
- */
- public IAction getOpenAction() {
- return fOpen;
- }
-
- private void initialize(ISelectionProvider provider) {
- ISelection selection = provider.getSelection();
- fOpen.update(selection);
- if (!fIsEditorOwner) {
- provider.addSelectionChangedListener(fOpen);
- }
- }
-
- /*
- * (non-Javadoc) Method declared in ActionGroup
- */
- public void fillActionBars(IActionBars actionBar) {
- super.fillActionBars(actionBar);
- setGlobalActionHandlers(actionBar);
- }
-
- /*
- * (non-Javadoc) Method declared in ActionGroup
- */
- public void fillContextMenu(IMenuManager menu) {
- super.fillContextMenu(menu);
- appendToGroup(menu, fOpen);
- if (!fIsEditorOwner) {
- addOpenWithMenu(menu);
- }
- }
-
- /*
- * @see ActionGroup#dispose()
- */
- public void dispose() {
- ISelectionProvider provider = fSite.getSelectionProvider();
- provider.removeSelectionChangedListener(fOpen);
- super.dispose();
- }
-
- private void setGlobalActionHandlers(IActionBars actionBars) {
- actionBars.setGlobalActionHandler(PHPdtActionConstants.OPEN, fOpen);
- }
-
- private void appendToGroup(IMenuManager menu, IAction action) {
- if (action.isEnabled())
- menu.appendToGroup(IContextMenuConstants.GROUP_OPEN, action);
- }
-
- private void addOpenWithMenu(IMenuManager menu) {
- ISelection selection = getContext().getSelection();
- if (selection.isEmpty() || !(selection instanceof IStructuredSelection))
- return;
- IStructuredSelection ss = (IStructuredSelection) selection;
- if (ss.size() != 1)
- return;
-
- Object o = ss.getFirstElement();
- if (!(o instanceof IAdaptable))
- return;
-
- IAdaptable element = (IAdaptable) o;
- Object resource = element.getAdapter(IResource.class);
- if (!(resource instanceof IFile))
- return;
-
- // Create a menu flyout.
- IMenuManager submenu = new MenuManager(ActionMessages
- .getString("OpenWithMenu.label")); //$NON-NLS-1$
- submenu.add(new OpenWithMenu(fSite.getPage(), (IFile) resource));
-
- // Add the submenu.
- menu.appendToGroup(IContextMenuConstants.GROUP_OPEN, submenu);
- }
-}