diff options
author | rescobar | 2010-03-12 18:27:25 +0000 |
---|---|---|
committer | rescobar | 2010-03-12 18:27:25 +0000 |
commit | 205aa057fa925d37a3a5375aa8418b9567e99c6d (patch) | |
tree | d33f80b9f727c479b8031aeb352494c38ad9878d /plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SelectionProviderIntermediate.java | |
parent | 0e6d2b595cfb4d54eccdf3479e7c5d74d9c736a5 (diff) | |
download | org.eclipse.osee-205aa057fa925d37a3a5375aa8418b9567e99c6d.tar.gz org.eclipse.osee-205aa057fa925d37a3a5375aa8418b9567e99c6d.tar.xz org.eclipse.osee-205aa057fa925d37a3a5375aa8418b9567e99c6d.zip |
Diffstat (limited to 'plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SelectionProviderIntermediate.java')
-rw-r--r-- | plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SelectionProviderIntermediate.java | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SelectionProviderIntermediate.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SelectionProviderIntermediate.java new file mode 100644 index 00000000000..b5eaa02d28d --- /dev/null +++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SelectionProviderIntermediate.java @@ -0,0 +1,109 @@ +package org.eclipse.osee.framework.ui.skynet;
+
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.jface.viewers.IPostSelectionProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+
+public class SelectionProviderIntermediate implements IPostSelectionProvider {
+
+ private final ListenerList selectionListeners = new ListenerList();
+
+ private final ListenerList postSelectionListeners = new ListenerList();
+
+ private ISelectionProvider delegate;
+
+ private ISelectionChangedListener selectionListener = new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ if (event.getSelectionProvider() == delegate) {
+ fireSelectionChanged(event.getSelection());
+ }
+ }
+ };
+
+ private ISelectionChangedListener postSelectionListener = new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ if (event.getSelectionProvider() == delegate) {
+ firePostSelectionChanged(event.getSelection());
+ }
+ }
+ };
+
+ /**
+ * Sets a new selection provider to delegate to. Selection listeners
+ * registered with the previous delegate are removed before.
+ *
+ * @param newDelegate new selection provider
+ */
+ public void setSelectionProviderDelegate(ISelectionProvider newDelegate) {
+ if (delegate == newDelegate) {
+ return;
+ }
+ if (delegate != null) {
+ delegate.removeSelectionChangedListener(selectionListener);
+ if (delegate instanceof IPostSelectionProvider) {
+ ((IPostSelectionProvider)delegate).removePostSelectionChangedListener(postSelectionListener);
+ }
+ }
+ delegate = newDelegate;
+ if (newDelegate != null) {
+ newDelegate.addSelectionChangedListener(selectionListener);
+ if (newDelegate instanceof IPostSelectionProvider) {
+ ((IPostSelectionProvider)newDelegate).addPostSelectionChangedListener(postSelectionListener);
+ }
+ fireSelectionChanged(newDelegate.getSelection());
+ firePostSelectionChanged(newDelegate.getSelection());
+ }
+ }
+
+ protected void fireSelectionChanged(ISelection selection) {
+ fireSelectionChanged(selectionListeners, selection);
+ }
+
+ protected void firePostSelectionChanged(ISelection selection) {
+ fireSelectionChanged(postSelectionListeners, selection);
+ }
+
+ private void fireSelectionChanged(ListenerList list, ISelection selection) {
+ SelectionChangedEvent event = new SelectionChangedEvent(delegate, selection);
+ Object[] listeners = list.getListeners();
+ for (int i = 0; i < listeners.length; i++) {
+ ISelectionChangedListener listener = (ISelectionChangedListener) listeners[i];
+ listener.selectionChanged(event);
+ }
+ }
+
+ // IPostSelectionProvider Implementation
+
+ public void addSelectionChangedListener(ISelectionChangedListener listener) {
+ selectionListeners.add(listener);
+ }
+
+ public void removeSelectionChangedListener(
+ ISelectionChangedListener listener) {
+ selectionListeners.remove(listener);
+ }
+
+ public void addPostSelectionChangedListener(
+ ISelectionChangedListener listener) {
+ postSelectionListeners.add(listener);
+ }
+
+ public void removePostSelectionChangedListener(
+ ISelectionChangedListener listener) {
+ postSelectionListeners.remove(listener);
+ }
+
+ public ISelection getSelection() {
+ return delegate == null ? null : delegate.getSelection();
+ }
+
+ public void setSelection(ISelection selection) {
+ if (delegate != null) {
+ delegate.setSelection(selection);
+ }
+ }
+
+}
|