]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.document.linking.ge;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.List;\r
5 \r
6 import org.eclipse.jface.viewers.ISelection;\r
7 import org.eclipse.jface.viewers.ISelectionChangedListener;\r
8 import org.eclipse.jface.viewers.ISelectionProvider;\r
9 import org.eclipse.jface.viewers.SelectionChangedEvent;\r
10 \r
11 /**\r
12  * Selection Provider for providing slections from multiple GraphExplorers attached to the same site\r
13  * .\r
14  * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
15  *\r
16  */\r
17 public class MultiSelectionProvider implements ISelectionProvider, ISelectionChangedListener {\r
18         \r
19         private List<ISelectionProvider> selectionProviders = new ArrayList<ISelectionProvider>();\r
20         private List<ISelectionChangedListener> listeners = new ArrayList<ISelectionChangedListener>();\r
21         private ISelection selection;\r
22         \r
23         @Override\r
24         public void addSelectionChangedListener(ISelectionChangedListener listener) {\r
25                 listeners.add(listener);\r
26                 \r
27         }\r
28         @Override\r
29         public void removeSelectionChangedListener(\r
30                         ISelectionChangedListener listener) {\r
31                 listeners.remove(listener);\r
32                 \r
33         }\r
34         \r
35         @Override\r
36         public ISelection getSelection() {\r
37                 return selection;\r
38         }\r
39         \r
40         @Override\r
41         public void setSelection(ISelection selection) {\r
42                 this.selection = selection;\r
43                 // TODO : should we pass the selection to selectionProviders? \r
44         }\r
45         \r
46         @Override\r
47         public void selectionChanged(SelectionChangedEvent event) {\r
48                 this.selection = event.getSelection();\r
49                 SelectionChangedEvent fireEvent = new SelectionChangedEvent(this, selection);\r
50                 for (ISelectionChangedListener l : listeners) {\r
51                         l.selectionChanged(fireEvent);\r
52                 }\r
53                 \r
54         }\r
55         \r
56         public void addSelectionProvider(ISelectionProvider provider) {\r
57                 selectionProviders.add(provider);\r
58                 provider.addSelectionChangedListener(this);\r
59         }\r
60         \r
61         public void removeSelectionProvider(ISelectionProvider provider) {\r
62                 selectionProviders.remove(provider);\r
63                 provider.removeSelectionChangedListener(this);\r
64         }\r
65 \r
66 }\r