X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/actions/OpenEditorActionGroup.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/actions/OpenEditorActionGroup.java new file mode 100644 index 0000000..0d41704 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/actions/OpenEditorActionGroup.java @@ -0,0 +1,159 @@ +/******************************************************************************* + * 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. + * + *

+ * This class may be instantiated; it is not intended to be subclassed. + *

+ * + * @since 2.0 + */ +public class OpenEditorActionGroup extends ActionGroup { + + private IWorkbenchSite fSite; + + private boolean fIsEditorOwner; + + private PHPOpenDeclarationAction fOpen; + + /** + * Creates a new OpenActionGroup. The group requires that + * the selection provided by the part's selection provider is of type + * org.eclipse.jface.viewers.IStructuredSelection. + * + * @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 null 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); + } +}