]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/ge/MultiSelectionProvider.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / ge / MultiSelectionProvider.java
diff --git a/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/ge/MultiSelectionProvider.java b/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/ge/MultiSelectionProvider.java
new file mode 100644 (file)
index 0000000..2104f03
--- /dev/null
@@ -0,0 +1,66 @@
+package org.simantics.document.linking.ge;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.ISelectionChangedListener;\r
+import org.eclipse.jface.viewers.ISelectionProvider;\r
+import org.eclipse.jface.viewers.SelectionChangedEvent;\r
+\r
+/**\r
+ * Selection Provider for providing slections from multiple GraphExplorers attached to the same site\r
+ * .\r
+ * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
+ *\r
+ */\r
+public class MultiSelectionProvider implements ISelectionProvider, ISelectionChangedListener {\r
+       \r
+       private List<ISelectionProvider> selectionProviders = new ArrayList<ISelectionProvider>();\r
+       private List<ISelectionChangedListener> listeners = new ArrayList<ISelectionChangedListener>();\r
+       private ISelection selection;\r
+       \r
+       @Override\r
+       public void addSelectionChangedListener(ISelectionChangedListener listener) {\r
+               listeners.add(listener);\r
+               \r
+       }\r
+       @Override\r
+       public void removeSelectionChangedListener(\r
+                       ISelectionChangedListener listener) {\r
+               listeners.remove(listener);\r
+               \r
+       }\r
+       \r
+       @Override\r
+       public ISelection getSelection() {\r
+               return selection;\r
+       }\r
+       \r
+       @Override\r
+       public void setSelection(ISelection selection) {\r
+               this.selection = selection;\r
+               // TODO : should we pass the selection to selectionProviders? \r
+       }\r
+       \r
+       @Override\r
+       public void selectionChanged(SelectionChangedEvent event) {\r
+               this.selection = event.getSelection();\r
+               SelectionChangedEvent fireEvent = new SelectionChangedEvent(this, selection);\r
+               for (ISelectionChangedListener l : listeners) {\r
+                       l.selectionChanged(fireEvent);\r
+               }\r
+               \r
+       }\r
+       \r
+       public void addSelectionProvider(ISelectionProvider provider) {\r
+               selectionProviders.add(provider);\r
+               provider.addSelectionChangedListener(this);\r
+       }\r
+       \r
+       public void removeSelectionProvider(ISelectionProvider provider) {\r
+               selectionProviders.remove(provider);\r
+               provider.removeSelectionChangedListener(this);\r
+       }\r
+\r
+}\r