-package org.simantics.document.swt.core.widget;\r
-\r
-import java.util.Arrays;\r
-import java.util.List;\r
-\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.events.ModifyEvent;\r
-import org.eclipse.swt.events.ModifyListener;\r
-import org.eclipse.swt.widgets.Combo;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.simantics.document.server.JSONObject;\r
-import org.simantics.document.server.handler.AbstractEventHandler;\r
-import org.simantics.document.server.io.CommandContextImpl;\r
-import org.simantics.document.swt.core.SWTDocument;\r
-import org.simantics.document.swt.core.base.LeafWidgetManager;\r
-import org.simantics.document.swt.core.bean.StringList;\r
-\r
-public class ComboWidget extends LeafWidgetManager<Combo> {\r
- \r
- private ModifyListener modifyListener = null;\r
-\r
- private StringList extractAvailable(Object o) {\r
- if(o instanceof StringList) return (StringList)o;\r
- if(o instanceof List) return new StringList((List)o);\r
- if(o instanceof String[]) return new StringList((String[])o);\r
- throw new IllegalArgumentException("Unaccepted format for available " + o.getClass().getName());\r
- }\r
- \r
- @Override\r
- protected void doUpdateProperties(SWTDocument document, Combo combo, JSONObject object) {\r
-\r
- if(combo.isDisposed()) return;\r
- \r
- if(modifyListener != null)\r
- combo.removeModifyListener(modifyListener);\r
- \r
- StringList availableList = extractAvailable(object.getJSONField("available"));\r
- String selected = object.getJSONField("selected");\r
-\r
- String[] available = availableList.strings;\r
- String[] current = combo.getItems();\r
- \r
- if(!Arrays.equals(available, current)) {\r
- combo.clearSelection();\r
- combo.removeAll();\r
- for(String key : available) {\r
- combo.add(key);\r
- }\r
- }\r
- \r
- int index = 0;\r
- for(;index<available.length;index++) if(available[index].equals(selected)) break;\r
-\r
- if(index == available.length) {\r
- combo.clearSelection();\r
- } else {\r
- combo.select(index);\r
- }\r
-\r
- if(modifyListener != null)\r
- combo.addModifyListener(modifyListener);\r
-\r
- }\r
-\r
- @Override\r
- protected Combo doCreateControl(final SWTDocument document, Composite parent, JSONObject object) {\r
- final Combo combo = new Combo(parent, SWT.READ_ONLY);\r
- final AbstractEventHandler onModify = object.getJSONField("onModify");\r
- if(onModify != null) {\r
- modifyListener = new ModifyListener() {\r
- \r
- @Override\r
- public void modifyText(ModifyEvent e) {\r
- String[] items = combo.getItems();\r
- int index = combo.getSelectionIndex();\r
- if(index >=0 && index < items.length) {\r
- CommandContextImpl parameters = new CommandContextImpl();\r
- parameters.putString("selected", items[index]);\r
- document.post(onModify, parameters);\r
- }\r
- \r
- }\r
- \r
- };\r
- combo.addModifyListener(modifyListener);\r
- }\r
- return combo;\r
- }\r
- \r
-}\r
+package org.simantics.document.swt.core.widget;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.simantics.document.server.JSONObject;
+import org.simantics.document.server.handler.AbstractEventHandler;
+import org.simantics.document.server.io.CommandContextImpl;
+import org.simantics.document.swt.core.SWTDocument;
+import org.simantics.document.swt.core.base.LeafWidgetManager;
+import org.simantics.document.swt.core.bean.StringList;
+
+public class ComboWidget extends LeafWidgetManager<Combo> {
+
+ private ModifyListener modifyListener = null;
+
+ private StringList extractAvailable(Object o) {
+ if(o instanceof StringList) return (StringList)o;
+ if(o instanceof List) return new StringList((List)o);
+ if(o instanceof String[]) return new StringList((String[])o);
+ throw new IllegalArgumentException("Unaccepted format for available " + o.getClass().getName());
+ }
+
+ @Override
+ protected void doUpdateProperties(SWTDocument document, Combo combo, JSONObject object) {
+
+ if(combo.isDisposed()) return;
+
+ if(modifyListener != null)
+ combo.removeModifyListener(modifyListener);
+
+ StringList availableList = extractAvailable(object.getJSONField("available"));
+ String selected = object.getJSONField("selected");
+
+ String[] available = availableList.strings;
+ String[] current = combo.getItems();
+
+ if(!Arrays.equals(available, current)) {
+ combo.clearSelection();
+ combo.removeAll();
+ for(String key : available) {
+ combo.add(key);
+ }
+ }
+
+ int index = 0;
+ for(;index<available.length;index++) if(available[index].equals(selected)) break;
+
+ if(index == available.length) {
+ combo.clearSelection();
+ } else {
+ combo.select(index);
+ }
+
+ if(modifyListener != null)
+ combo.addModifyListener(modifyListener);
+
+ }
+
+ @Override
+ protected Combo doCreateControl(final SWTDocument document, Composite parent, JSONObject object) {
+ final Combo combo = new Combo(parent, SWT.READ_ONLY);
+ final AbstractEventHandler onModify = object.getJSONField("onModify");
+ if(onModify != null) {
+ modifyListener = new ModifyListener() {
+
+ @Override
+ public void modifyText(ModifyEvent e) {
+ String[] items = combo.getItems();
+ int index = combo.getSelectionIndex();
+ if(index >=0 && index < items.length) {
+ CommandContextImpl parameters = new CommandContextImpl();
+ parameters.putString("selected", items[index]);
+ document.post(onModify, parameters);
+ }
+
+ }
+
+ };
+ combo.addModifyListener(modifyListener);
+ }
+ return combo;
+ }
+
+}