1 package org.simantics.views.swt.client.impl;
\r
3 import java.util.List;
\r
5 import org.eclipse.swt.events.ModifyEvent;
\r
6 import org.eclipse.swt.events.ModifyListener;
\r
7 import org.eclipse.swt.widgets.Combo;
\r
8 import org.eclipse.swt.widgets.Composite;
\r
9 import org.simantics.scl.runtime.tuple.Tuple;
\r
11 public class SWTCombo extends SWTComboBase<Combo> {
\r
13 private static final long serialVersionUID = 3355806440902480450L;
\r
15 private final ModifyListener listener = new ModifyListener() {
\r
18 public void modifyText(ModifyEvent e) {
\r
20 int selectionIndex = control.getSelectionIndex();
\r
21 if (selectionIndex == -1)
\r
24 String[] items = control.getItems();
\r
26 String key = items[selectionIndex];
\r
28 if(modifier != null)
\r
29 modifier.apply(key);
\r
38 public void createControls(Composite parent) {
\r
40 control = new Combo(parent, style);
\r
41 // Must initially add modifylistener before invoking setProperties
\r
42 // since setProperties will invoke synchronize*-methods, which do
\r
43 // removeModifyListener + addModifyListener. Otherwise modify listener
\r
44 // would get added twice to the control.
\r
45 control.addModifyListener(listener);
\r
51 public void synchronizeAvailable(List<Tuple> available) {
\r
53 if(available != null) {
\r
55 control.removeModifyListener(listener);
\r
56 control.setData(available);
\r
57 control.clearSelection();
\r
59 control.removeAll();
\r
60 } catch (Throwable t) {
\r
61 t.printStackTrace();
\r
63 if (available != null) {
\r
65 for(Tuple key : available) {
\r
66 control.add((String)key.get(0));
\r
67 control.setData((String)key.get(0), index++);
\r
69 String selectionKey = (String)control.getData("_SelectionKey");
\r
70 if(selectionKey != null) {
\r
71 Integer selectionIndex = (Integer)control.getData(selectionKey);
\r
72 if(selectionIndex != null) control.select(selectionIndex);
\r
75 control.addModifyListener(listener);
\r
77 // // This seems to be necessary for correct size computations
\r
78 // widget.getControl().getParent().layout(true);
\r
82 public void synchronizeSelected(String selected) {
\r
84 if(selected != null) {
\r
86 control.removeModifyListener(listener);
\r
87 control.setData("_SelectionKey", selected);
\r
88 Integer selectionIndex = (Integer)control.getData(selected);
\r
89 if(selectionIndex != null) control.select(selectionIndex);
\r
90 control.addModifyListener(listener);
\r