X-Git-Url: http://git.phpeclipse.com
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/actions/SelectionDispatchAction.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/actions/SelectionDispatchAction.java
new file mode 100644
index 0000000..358e84a
--- /dev/null
+++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/actions/SelectionDispatchAction.java
@@ -0,0 +1,208 @@
+/*******************************************************************************
+ * Copyright (c) 2002 International Business Machines Corp. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v0.5
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v05.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package net.sourceforge.phpdt.ui.actions;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.text.ITextSelection;
+//incastrix
+//import org.eclipse.jface.text.Assert;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IWorkbenchSite;
+
+/**
+ * Action that dispatches the IAction#run()
and the
+ * ISelectionChangedListener#selectionChanged
according to the
+ * type of the selection.
+ *
+ *
ITextSelection
then
+ * run(ITextSelection)
and
+ * selectionChanged(ITextSelection)
is called.IStructuredSelection
then
+ * run(IStructuredSelection)
and
+ * selectionChanged(IStructuredSelection)
+ * is called.run(ISelection)
and
+ * selectionChanged(ISelection)
.+ * Note: This class is not intended to be subclassed outside the JDT UI plugin. + *
+ * + * @since 2.0 + */ +public abstract class SelectionDispatchAction extends Action implements + ISelectionChangedListener { + + private IWorkbenchSite fSite; + + /** + * Creates a new action with no text and no image. + *+ * Configure the action later using the set methods. + *
+ * + * @param site + * the site this action is working on + */ + protected SelectionDispatchAction(IWorkbenchSite site) { + Assert.isNotNull(site); + fSite = site; + } + + /** + * Returns the site owning this action. + * + * @return the site owning this action + */ + public IWorkbenchSite getSite() { + return fSite; + } + + /** + * Returns the selection provided by the site owning this action. + * + * @return the site's selection + */ + public ISelection getSelection() { + return getSelectionProvider().getSelection(); + } + + /** + * Returns the shell provided by the site owning this action. + * + * @return the site's shell + */ + public Shell getShell() { + return fSite.getShell(); + } + + /** + * Returns the selection provider managed by the site owning this action. + * + * @return the site's selection provider + */ + public ISelectionProvider getSelectionProvider() { + return fSite.getSelectionProvider(); + } + + /** + * Updates the action's enablement state according to the given selection. + * This default implementation calls one of the + *selectionChanged
methods depending on the type of the
+ * passed selection.
+ *
+ * @param selection
+ * the selection this action is working on
+ */
+ public void update(ISelection selection) {
+ dispatchSelectionChanged(selection);
+ }
+
+ /**
+ * Notifies this action that the given structured selection has changed.
+ * This default implementation calls
+ * selectionChanged(ISelection selection)
.
+ *
+ * @param selection
+ * the new selection
+ */
+ protected void selectionChanged(IStructuredSelection selection) {
+ selectionChanged((ISelection) selection);
+ }
+
+ /**
+ * Executes this actions with the given structured selection. This default
+ * implementation calls run(ISelection selection)
.
+ */
+ protected void run(IStructuredSelection selection) {
+ run((ISelection) selection);
+ }
+
+ /**
+ * Notifies this action that the given text selection has changed. This
+ * default implementation calls
+ * selectionChanged(ISelection selection)
.
+ *
+ * @param selection
+ * the new selection
+ */
+ protected void selectionChanged(ITextSelection selection) {
+ selectionChanged((ISelection) selection);
+ }
+
+ /**
+ * Executes this actions with the given text selection. This default
+ * implementation calls run(ISelection selection)
.
+ */
+ protected void run(ITextSelection selection) {
+ run((ISelection) selection);
+ }
+
+ /**
+ * Notifies this action that the given selection has changed. This default
+ * implementation sets the action's enablement state to false
.
+ *
+ * @param selection
+ * the new selection
+ */
+ protected void selectionChanged(ISelection selection) {
+ setEnabled(false);
+ }
+
+ /**
+ * Executes this actions with the given selection. This default
+ * implementation does nothing.
+ */
+ protected void run(ISelection selection) {
+ }
+
+ /*
+ * (non-Javadoc) Method declared on IAction.
+ */
+ public void run() {
+ dispatchRun(getSelection());
+ }
+
+ /*
+ * (non-Javadoc) Method declared on ISelectionChangedListener.
+ */
+ public void selectionChanged(SelectionChangedEvent event) {
+ dispatchSelectionChanged(event.getSelection());
+ }
+
+ private void dispatchSelectionChanged(ISelection selection) {
+ if (selection instanceof IStructuredSelection) {
+ selectionChanged((IStructuredSelection) selection);
+ } else if (selection instanceof ITextSelection) {
+ selectionChanged((ITextSelection) selection);
+ } else {
+ selectionChanged(selection);
+ }
+ }
+
+ private void dispatchRun(ISelection selection) {
+ if (selection instanceof IStructuredSelection) {
+ run((IStructuredSelection) selection);
+ } else if (selection instanceof ITextSelection) {
+ run((ITextSelection) selection);
+ } else {
+ run(selection);
+ }
+ }
+}
\ No newline at end of file