]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.document.swt.core.widget;\r
2 \r
3 import java.util.Collection;\r
4 import java.util.Collections;\r
5 import java.util.HashSet;\r
6 import java.util.LinkedHashMap;\r
7 import java.util.List;\r
8 import java.util.Map;\r
9 \r
10 import org.eclipse.swt.SWT;\r
11 import org.eclipse.swt.events.SelectionListener;\r
12 import org.eclipse.swt.widgets.Button;\r
13 import org.eclipse.swt.widgets.Composite;\r
14 import org.simantics.document.server.IEventCommand;\r
15 import org.simantics.document.server.JSONObject;\r
16 import org.simantics.document.server.bean.Command;\r
17 import org.simantics.document.server.client.CommandManager;\r
18 import org.simantics.document.server.client.WidgetData;\r
19 import org.simantics.document.server.handler.AbstractEventHandler;\r
20 import org.simantics.document.server.handler.EventHandler;\r
21 import org.simantics.document.swt.core.SWTDocument;\r
22 import org.simantics.document.swt.core.base.LeafWidgetManager;\r
23 import org.simantics.document.swt.core.base.PostEventCommand;\r
24 import org.simantics.document.swt.core.base.WidgetContainer;\r
25 \r
26 public class ButtonWidget extends LeafWidgetManager<Button> {\r
27 \r
28         @Override\r
29         protected void doUpdateProperties(SWTDocument document, Button control, JSONObject object) {\r
30 \r
31                 if(control.isDisposed()) return;\r
32                 \r
33                 String text = object.getJSONField("text");\r
34                 \r
35                 control.setText(text);\r
36                 \r
37                 document.layout();\r
38                 \r
39         }\r
40     \r
41         @Override\r
42         protected Button doCreateControl(final SWTDocument document, Composite parent, final JSONObject object) {\r
43 \r
44                 final Button label = new Button(parent, SWT.NONE);\r
45                 \r
46 //              final EventHandler onPress = object.getJSONField("onPress");\r
47 //              label.addSelectionListener(new );\r
48 \r
49                 return label;\r
50         }\r
51         \r
52     public static class ButtonCommandManager implements CommandManager<SWTDocument, WidgetContainer<Button>> {\r
53 \r
54         @Override\r
55         public Collection<Object> updateCommandListeners(final SWTDocument document, final JSONObject object,\r
56                 WidgetContainer<Button> container) {\r
57             \r
58             List<Command> commands = object.getJSONField("commands");\r
59             HashSet<Object> listeners = new HashSet<Object>();\r
60             LinkedHashMap<WidgetData, String> data = new LinkedHashMap<WidgetData, String>();\r
61             if(commands != null) {\r
62                     for(Command c : commands) {\r
63                         if(c.getCommand() == null || c.getTargetId() == null || c.getTrigger() == null)\r
64                             continue;\r
65                         String trigger = c.getTrigger();\r
66                         if("click".equals(trigger)) {\r
67                             WidgetData wd = document.getWidgetData().get(c.getTargetId());\r
68                             if(wd != null)\r
69                                 data.put(wd, c.getCommand());\r
70                         }\r
71                     }\r
72             }\r
73             data.put(document.getWidgetData().get(object.getId()), "onPress");\r
74             SelectionListener listener = new ButtonSelectionListener(data);\r
75             Button button = container.getControl();\r
76             if(!button.isDisposed()) {\r
77                 button.addSelectionListener(listener);\r
78                 listeners.add(listener);\r
79             }\r
80             \r
81             return listeners;\r
82             \r
83         }\r
84 \r
85         @Override\r
86         public void removeListener(WidgetContainer<Button> container, Object listener) {\r
87                 if(container.getControl().isDisposed()) return;\r
88             if(listener instanceof SelectionListener)\r
89                 container.getControl().removeSelectionListener((SelectionListener) listener);\r
90         }\r
91 \r
92     }\r
93 \r
94     @Override\r
95     public IEventCommand eventCommand(SWTDocument document, JSONObject object, WidgetContainer widget, String command) {\r
96         if("onPress".equals(command)) {\r
97             AbstractEventHandler onPress = object.getJSONField("onPress");\r
98             Map<String, String> data = Collections.emptyMap();\r
99             return new PostEventCommand(document, onPress, data);\r
100         }\r
101         return null;\r
102     }   \r
103         \r
104 }\r