]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/views/ModelToComboListener.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / views / ModelToComboListener.java
1 package org.simantics.document.linking.views;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Collection;\r
5 import java.util.Collections;\r
6 import java.util.List;\r
7 \r
8 import org.eclipse.swt.custom.CCombo;\r
9 import org.eclipse.swt.widgets.Display;\r
10 import org.simantics.db.Resource;\r
11 import org.simantics.db.common.NamedResource;\r
12 \r
13 public abstract class ModelToComboListener implements org.simantics.db.procedure.Listener<Collection<NamedResource>> {\r
14         \r
15         /**\r
16          * \r
17          */\r
18         private CCombo combo;\r
19         private boolean disposed = false;\r
20         \r
21         public ModelToComboListener(CCombo combo) {\r
22                 this.combo = combo;\r
23         }\r
24         \r
25         public abstract Resource getCurrentModel();\r
26         \r
27         @Override\r
28         public void execute(final Collection<NamedResource> result) {\r
29                 Display.getDefault().asyncExec(new Runnable() {\r
30                         \r
31                         @Override\r
32                         public void run() {\r
33                                 if(combo.isDisposed()) {\r
34                                         disposed = true;\r
35                                         return;\r
36                                 }\r
37                                 \r
38                                 List<NamedResource> models = new ArrayList<NamedResource>();\r
39                                 models.addAll(result);\r
40                                 Collections.sort(models);\r
41                                 \r
42                                 int index = -1;\r
43                                 \r
44                                 //populate the combo\r
45                                 combo.removeAll();\r
46                                 index = -1;\r
47                                 int i = 0; \r
48                                 for (NamedResource model : models) {\r
49                                         combo.add(model.getName());\r
50                                         combo.setData(Integer.toString(i), model.getResource());\r
51                                         if (model.getResource().equals(getCurrentModel()))\r
52                                                 index = i;\r
53                                         i++;\r
54                                 }\r
55                                 \r
56                                 // restore the selection\r
57                                 if (index >= 0) {\r
58                                         combo.select(index);\r
59                                 }\r
60                                 loaded();\r
61                         }\r
62                 });\r
63                 \r
64         }\r
65         \r
66         public void loaded() {\r
67                 \r
68         }\r
69         \r
70         @Override\r
71         public void exception(Throwable t) {\r
72                 \r
73         }\r
74         \r
75         @Override\r
76         public boolean isDisposed() {\r
77                 return disposed || combo.isDisposed();\r
78         }\r
79         \r
80         public void dispose() {\r
81                 disposed = true;\r
82         }\r
83 }