1 package org.simantics.views.swt.client.impl;
\r
3 import java.util.List;
\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
12 public class SWTCCombo extends SWTComboBase<CCombo> {
\r
14 private static final long serialVersionUID = 2529612234578912642L;
\r
16 private final SelectionListener listener = new SelectionListener() {
\r
19 public void widgetSelected(SelectionEvent e) {
\r
21 int selectionIndex = control.getSelectionIndex();
\r
22 if (selectionIndex == -1)
\r
25 String[] items = control.getItems();
\r
27 String key = items[selectionIndex];
\r
29 if(modifier != null)
\r
30 modifier.apply(key);
\r
37 public void widgetDefaultSelected(SelectionEvent e) {
\r
46 public void createControls(Composite parent) {
\r
48 control = new CCombo(parent, style);
\r
49 control.addSelectionListener(listener);
\r
55 public void synchronizeAvailable(List<Tuple> available) {
\r
56 if(available != null) {
\r
58 control.removeSelectionListener(listener);
\r
59 control.setData(available);
\r
60 control.clearSelection();
\r
62 control.removeAll();
\r
63 } catch (Throwable t) {
\r
64 t.printStackTrace();
\r
66 if (available != null) {
\r
68 for(Tuple key : available) {
\r
69 control.add((String)key.toArray()[0]);
\r
70 control.setData((String)key.toArray()[0], index++);
\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
78 control.addSelectionListener(listener);
\r
80 // // This seems to be necessary for correct size computations
\r
81 // widget.getControl().getParent().layout(true);
\r
85 public void synchronizeSelected(String selected) {
\r
86 if(selected != null) {
\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
94 // // This seems to be necessary for correct size computations
\r
95 // widget.getControl().getParent().layout(true);
\r
99 public String readSelected() {
\r
103 public List<Tuple> readAvailable() {
\r