/*******************************************************************************
- * 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
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.
* </p>
*
* @author Toni Kalajainen
- * @author Tuukka Lehtonen
*/
-public class BasePostSelectionProvider extends BaseSelectionProvider implements IPostSelectionProvider {
+public class BasePostSelectionProvider implements IPostSelectionProvider {
- protected ListenerList<ISelectionChangedListener> 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);
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
}
}
+ 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);
+ }
+
}