]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.document.swt.core/src/org/simantics/document/swt/core/widget/ButtonWidget.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.swt.core / src / org / simantics / document / swt / core / widget / ButtonWidget.java
diff --git a/bundles/org.simantics.document.swt.core/src/org/simantics/document/swt/core/widget/ButtonWidget.java b/bundles/org.simantics.document.swt.core/src/org/simantics/document/swt/core/widget/ButtonWidget.java
new file mode 100644 (file)
index 0000000..fee79d1
--- /dev/null
@@ -0,0 +1,104 @@
+package org.simantics.document.swt.core.widget;\r
+\r
+import java.util.Collection;\r
+import java.util.Collections;\r
+import java.util.HashSet;\r
+import java.util.LinkedHashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.SelectionListener;\r
+import org.eclipse.swt.widgets.Button;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.simantics.document.server.IEventCommand;\r
+import org.simantics.document.server.JSONObject;\r
+import org.simantics.document.server.bean.Command;\r
+import org.simantics.document.server.client.CommandManager;\r
+import org.simantics.document.server.client.WidgetData;\r
+import org.simantics.document.server.handler.AbstractEventHandler;\r
+import org.simantics.document.server.handler.EventHandler;\r
+import org.simantics.document.swt.core.SWTDocument;\r
+import org.simantics.document.swt.core.base.LeafWidgetManager;\r
+import org.simantics.document.swt.core.base.PostEventCommand;\r
+import org.simantics.document.swt.core.base.WidgetContainer;\r
+\r
+public class ButtonWidget extends LeafWidgetManager<Button> {\r
+\r
+       @Override\r
+       protected void doUpdateProperties(SWTDocument document, Button control, JSONObject object) {\r
+\r
+               if(control.isDisposed()) return;\r
+               \r
+               String text = object.getJSONField("text");\r
+               \r
+               control.setText(text);\r
+               \r
+               document.layout();\r
+               \r
+       }\r
+    \r
+       @Override\r
+       protected Button doCreateControl(final SWTDocument document, Composite parent, final JSONObject object) {\r
+\r
+               final Button label = new Button(parent, SWT.NONE);\r
+               \r
+//             final EventHandler onPress = object.getJSONField("onPress");\r
+//             label.addSelectionListener(new );\r
+\r
+               return label;\r
+       }\r
+       \r
+    public static class ButtonCommandManager implements CommandManager<SWTDocument, WidgetContainer<Button>> {\r
+\r
+        @Override\r
+        public Collection<Object> updateCommandListeners(final SWTDocument document, final JSONObject object,\r
+                WidgetContainer<Button> container) {\r
+            \r
+            List<Command> commands = object.getJSONField("commands");\r
+            HashSet<Object> listeners = new HashSet<Object>();\r
+            LinkedHashMap<WidgetData, String> data = new LinkedHashMap<WidgetData, String>();\r
+            if(commands != null) {\r
+                   for(Command c : commands) {\r
+                       if(c.getCommand() == null || c.getTargetId() == null || c.getTrigger() == null)\r
+                           continue;\r
+                       String trigger = c.getTrigger();\r
+                       if("click".equals(trigger)) {\r
+                           WidgetData wd = document.getWidgetData().get(c.getTargetId());\r
+                           if(wd != null)\r
+                               data.put(wd, c.getCommand());\r
+                       }\r
+                   }\r
+            }\r
+            data.put(document.getWidgetData().get(object.getId()), "onPress");\r
+            SelectionListener listener = new ButtonSelectionListener(data);\r
+            Button button = container.getControl();\r
+            if(!button.isDisposed()) {\r
+               button.addSelectionListener(listener);\r
+                listeners.add(listener);\r
+            }\r
+            \r
+            return listeners;\r
+            \r
+        }\r
+\r
+        @Override\r
+        public void removeListener(WidgetContainer<Button> container, Object listener) {\r
+               if(container.getControl().isDisposed()) return;\r
+            if(listener instanceof SelectionListener)\r
+                container.getControl().removeSelectionListener((SelectionListener) listener);\r
+        }\r
+\r
+    }\r
+\r
+    @Override\r
+    public IEventCommand eventCommand(SWTDocument document, JSONObject object, WidgetContainer widget, String command) {\r
+        if("onPress".equals(command)) {\r
+            AbstractEventHandler onPress = object.getJSONField("onPress");\r
+            Map<String, String> data = Collections.emptyMap();\r
+            return new PostEventCommand(document, onPress, data);\r
+        }\r
+        return null;\r
+    }  \r
+       \r
+}\r