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 newOpenActionGroup
. 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);
+ }
+}