1 package org.simantics.document.swt.core.widget;
\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
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
26 public class ButtonWidget extends LeafWidgetManager<Button> {
\r
29 protected void doUpdateProperties(SWTDocument document, Button control, JSONObject object) {
\r
31 if(control.isDisposed()) return;
\r
33 String text = object.getJSONField("text");
\r
35 control.setText(text);
\r
42 protected Button doCreateControl(final SWTDocument document, Composite parent, final JSONObject object) {
\r
44 final Button label = new Button(parent, SWT.NONE);
\r
46 // final EventHandler onPress = object.getJSONField("onPress");
\r
47 // label.addSelectionListener(new );
\r
52 public static class ButtonCommandManager implements CommandManager<SWTDocument, WidgetContainer<Button>> {
\r
55 public Collection<Object> updateCommandListeners(final SWTDocument document, final JSONObject object,
\r
56 WidgetContainer<Button> container) {
\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
65 String trigger = c.getTrigger();
\r
66 if("click".equals(trigger)) {
\r
67 WidgetData wd = document.getWidgetData().get(c.getTargetId());
\r
69 data.put(wd, c.getCommand());
\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
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
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