]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.views.swt.client/src/org/simantics/views/swt/client/impl/SWTCCombo.java
Several Wiki documentation view improvements.
[simantics/platform.git] / bundles / org.simantics.views.swt.client / src / org / simantics / views / swt / client / impl / SWTCCombo.java
1 package org.simantics.views.swt.client.impl;\r
2 \r
3 import java.util.List;\r
4 \r
5 import org.eclipse.swt.custom.CCombo;\r
6 import org.eclipse.swt.events.SelectionEvent;\r
7 import org.eclipse.swt.events.SelectionListener;\r
8 import org.eclipse.swt.widgets.Composite;\r
9 import org.simantics.scl.runtime.tuple.Tuple;\r
10 \r
11 \r
12 public class SWTCCombo extends SWTComboBase<CCombo> {\r
13         \r
14         private static final long serialVersionUID = 2529612234578912642L;\r
15 \r
16         private final SelectionListener listener = new SelectionListener() {\r
17 \r
18                 @Override\r
19                 public void widgetSelected(SelectionEvent e) {\r
20                         \r
21                         int selectionIndex = control.getSelectionIndex();\r
22                         if (selectionIndex == -1)\r
23                             return;\r
24 \r
25                         String[] items = control.getItems();\r
26                         \r
27                         String key = items[selectionIndex];\r
28                         \r
29                         if(modifier != null)\r
30                                 modifier.apply(key);\r
31                         \r
32                         selected = key;\r
33                         \r
34                 }\r
35 \r
36                 @Override\r
37                 public void widgetDefaultSelected(SelectionEvent e) {\r
38                         \r
39                         widgetSelected(e);\r
40                         \r
41                 }\r
42                 \r
43         };\r
44 \r
45         @Override\r
46         public void createControls(Composite parent) {\r
47                 \r
48                 control = new CCombo(parent, style);\r
49                 control.addSelectionListener(listener);\r
50                 \r
51                 setProperties();\r
52                 \r
53         }\r
54         \r
55         public void synchronizeAvailable(List<Tuple> available) {\r
56                 if(available != null) {\r
57                         \r
58                 control.removeSelectionListener(listener);\r
59                 control.setData(available);\r
60                 control.clearSelection();\r
61                 try {\r
62                         control.removeAll();\r
63                 } catch (Throwable t) {\r
64                     t.printStackTrace();\r
65                 }\r
66                 if (available != null) {\r
67                     int index = 0;\r
68                     for(Tuple key : available) {\r
69                         control.add((String)key.toArray()[0]);\r
70                         control.setData((String)key.toArray()[0], index++);\r
71                     }\r
72                     String selectionKey = (String)control.getData("_SelectionKey");\r
73                     if(selectionKey != null) {\r
74                         Integer selectionIndex = (Integer)control.getData(selectionKey);\r
75                         if(selectionIndex != null) control.select(selectionIndex);\r
76                     }\r
77                 }\r
78                 control.addSelectionListener(listener);\r
79                         \r
80 //                      // This seems to be necessary for correct size computations\r
81 //                      widget.getControl().getParent().layout(true);\r
82                 }\r
83         }\r
84 \r
85         public void synchronizeSelected(String selected) {\r
86                 if(selected != null) {\r
87                         \r
88             control.removeSelectionListener(listener);\r
89                 control.setData("_SelectionKey", selected);\r
90                 Integer selectionIndex = (Integer)control.getData(selected);\r
91                 if(selectionIndex != null) control.select(selectionIndex);\r
92             control.addSelectionListener(listener);\r
93                         \r
94 //                      // This seems to be necessary for correct size computations\r
95 //                      widget.getControl().getParent().layout(true);\r
96                 }\r
97         }\r
98         \r
99         public String readSelected() {\r
100                 return selected;\r
101         }\r
102         \r
103         public List<Tuple> readAvailable() {\r
104                 return available;\r
105         }\r
106         \r
107 }\r