X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=bundles%2Forg.simantics.utils.ui%2Fsrc%2Forg%2Fsimantics%2Futils%2Fui%2Fjface%2FBasePostSelectionProvider.java;h=c5ca0e754cada161035bbcee68289b4dc135062a;hb=b7250834202635a09dd18e25370ed9b4c32b1380;hp=b06143bf6ee23cc82574666390a0d49c3c99de4a;hpb=270834ce3962a4bca3945d06e642a99d21688c16;p=simantics%2Fplatform.git
diff --git a/bundles/org.simantics.utils.ui/src/org/simantics/utils/ui/jface/BasePostSelectionProvider.java b/bundles/org.simantics.utils.ui/src/org/simantics/utils/ui/jface/BasePostSelectionProvider.java
index b06143bf6..c5ca0e754 100644
--- a/bundles/org.simantics.utils.ui/src/org/simantics/utils/ui/jface/BasePostSelectionProvider.java
+++ b/bundles/org.simantics.utils.ui/src/org/simantics/utils/ui/jface/BasePostSelectionProvider.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2018 Association for Decentralized Information Management
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
* in Industry THTH ry.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
@@ -21,6 +21,8 @@ import org.eclipse.jface.viewers.IPostSelectionProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.simantics.utils.ObjectUtils;
/**
* BaseSelectionProvider is a base implementation ISelectionProvider -interface.
@@ -34,21 +36,40 @@ import org.eclipse.jface.viewers.SelectionChangedEvent;
*
*
* @author Toni Kalajainen
- * @author Tuukka Lehtonen
*/
-public class BasePostSelectionProvider extends BaseSelectionProvider implements IPostSelectionProvider {
+public class BasePostSelectionProvider implements IPostSelectionProvider {
- protected ListenerList postSelectionListeners = new ListenerList<>();
+ protected ListenerList selectionListeners = new ListenerList();
+
+ protected ListenerList postSelectionListeners = new ListenerList();
+
+ protected ISelection selection = StructuredSelection.EMPTY;
+
+ public void addSelectionChangedListener(ISelectionChangedListener listener) {
+ selectionListeners.add(listener);
+ }
+
+ public ISelection getSelection() {
+ return selection;
+ }
public void clearListeners() {
- super.clearListeners();
- clearPostSelectionChangedListeners();
+ selectionListeners.clear();
+ postSelectionListeners.clear();
+ }
+
+ public void clearSelectionChangedListeners() {
+ postSelectionListeners.clear();
}
public void clearPostSelectionChangedListeners() {
postSelectionListeners.clear();
}
+ public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+ selectionListeners.remove(listener);
+ }
+
@Override
public void addPostSelectionChangedListener(ISelectionChangedListener listener) {
postSelectionListeners.add(listener);
@@ -59,10 +80,30 @@ public class BasePostSelectionProvider extends BaseSelectionProvider implements
postSelectionListeners.remove(listener);
}
+ public void setSelection(ISelection selection) {
+ setSelectionWithoutFiring(selection);
+ }
+
+ protected Object[] getListeners() {
+ return selectionListeners.getListeners();
+ }
+
protected Object[] getPostListeners() {
return postSelectionListeners.getListeners();
}
+ /**
+ * Notify other UIs that selection has changed
+ * @param selection new selection
+ */
+ public void fireSelection(ISelection selection) {
+ if (selection == null)
+ return;
+ SelectionChangedEvent e = new SelectionChangedEvent(this, selection);
+ for (Object l : getListeners())
+ ((ISelectionChangedListener) l).selectionChanged(e);
+ }
+
/**
* Notify other UIs that selection has changed
* @param selection new selection
@@ -82,4 +123,46 @@ public class BasePostSelectionProvider extends BaseSelectionProvider implements
}
}
+ public void setSelectionWithoutFiring(ISelection selection) {
+ this.selection = selection;
+ }
+
+
+ /**
+ * Sets a new selection and always fires a SelectionChangedEvent about it.
+ *
+ * @param selection the new selection
+ */
+ public void setAndFireSelection(ISelection selection) {
+ setSelection(selection);
+ fireSelection(selection);
+ }
+
+ /**
+ * Sets the new selection for this provider and fires all selection change
+ * listeners if the specified selection differs from the current selection.
+ * If the selection is either the same object or considered equal to the
+ * current selection, the listeners are not fired.
+ *
+ * @param selection the new selection
+ */
+ public void setAndFireNonEqualSelection(ISelection selection) {
+ ISelection old = getSelection();
+ if (ObjectUtils.objectEquals(old, selection))
+ return;
+
+ this.selection = selection;
+ if (selection != null && !selection.equals(old))
+ fireSelection(selection);
+ }
+
+ public boolean selectionEquals(ISelection s) {
+ if (s == selection)
+ return true;
+ if (s == null)
+ // Old selection had to be non-null
+ return true;
+ return s.equals(selection);
+ }
+
}