-package org.simantics.document.swt.core.widget;\r
-\r
-import java.util.Collection;\r
-\r
-import org.eclipse.jface.dialogs.IInputValidator;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.graphics.Color;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Text;\r
-import org.simantics.datatypes.literal.Font;\r
-import org.simantics.datatypes.literal.RGB;\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.utils.strings.StringInputProblem;\r
-import org.simantics.utils.strings.StringInputValidator;\r
-import org.simantics.utils.ui.widgets.ITrackedColorProvider;\r
-import org.simantics.utils.ui.widgets.TrackedModifyEvent;\r
-import org.simantics.utils.ui.widgets.TrackedModifyListener;\r
-import org.simantics.utils.ui.widgets.TrackedText;\r
-\r
-public class TrackedTextWidget extends LeafWidgetManager<Text> {\r
-\r
- @Override\r
- protected void doUpdateProperties(final SWTDocument document, Text control, JSONObject object) {\r
-\r
- if(control.isDisposed()) return;\r
- \r
- TrackedText tt = (TrackedText)control.getData(TrackedText.TRACKED_TEXT_KEY);\r
- \r
- String text = object.getJSONField("text");\r
-\r
- final AbstractEventHandler onModify = object.getJSONField("onModify");\r
- final StringInputValidator validator = object.getJSONField("validator");\r
- \r
- RGB.Integer invalidBackground = object.getBeanJSONFieldDefault("invalidBackground", RGB.Integer.BINDING, new RGB.Integer(255,255,255));\r
- RGB.Integer inactiveBackground = object.getBeanJSONFieldDefault("inactiveBackground", RGB.Integer.BINDING, new RGB.Integer(255,255,255));\r
- RGB.Integer hoverBackground = object.getBeanJSONFieldDefault("hoverBackground", RGB.Integer.BINDING, new RGB.Integer(255,255,255));\r
- RGB.Integer editingBackground = object.getBeanJSONFieldDefault("editingBackground", RGB.Integer.BINDING, new RGB.Integer(255,255,255));\r
-\r
- RGB.Integer foreground = object.getBeanJSONFieldDefault("foreground", RGB.Integer.BINDING, new RGB.Integer(0,0,0));\r
- \r
- Font font = object.getBeanJSONFieldDefault("font", Font.BINDING, new Font("Arial",10,"Normal"));\r
- \r
- final Color invalid = document.getColor(invalidBackground);\r
- final Color inactive = document.getColor(inactiveBackground);\r
- final Color hover = document.getColor(hoverBackground);\r
- final Color editing = document.getColor(editingBackground);\r
- \r
- tt.setColorProvider(new ITrackedColorProvider() {\r
- \r
- @Override\r
- public Color getInvalidBackground() {\r
- return invalid;\r
- }\r
- \r
- @Override\r
- public Color getInactiveBackground() {\r
- return inactive;\r
- }\r
- \r
- @Override\r
- public Color getHoverBackground() {\r
- return hover;\r
- }\r
- \r
- @Override\r
- public Color getEditingBackground() {\r
- return editing;\r
- }\r
- \r
- });\r
- \r
- if(text != null)\r
- tt.setTextWithoutNotify(text);\r
- else\r
- System.err.println(this + " text == null");\r
- // This applies coloring\r
- tt.setEditable(true);\r
- \r
- tt.addModifyListener(new TrackedModifyListener() {\r
- \r
- @Override\r
- public void modifyText(TrackedModifyEvent e) {\r
- CommandContextImpl parameters = new CommandContextImpl();\r
- parameters.putString("text", e.getText());\r
- document.post(onModify, parameters);\r
- }\r
- \r
- });\r
- \r
- if(validator != null) {\r
- tt.setInputValidator(new IInputValidator() {\r
-\r
- @Override\r
- public String isValid(String newText) {\r
- Collection<StringInputProblem> problems = validator.validate(newText);\r
- if(problems.isEmpty()) return null;\r
- else if (problems.size() == 1) {\r
- return problems.iterator().next().getDescription();\r
- } else return problems.toString();\r
- }\r
-\r
- });\r
- }\r
- \r
- control.setFont(document.getFont(font));\r
- control.setForeground(document.getColor(foreground));\r
- \r
- }\r
-\r
- @Override\r
- protected Text doCreateControl(SWTDocument document, Composite parent, JSONObject object) {\r
- int style = SWT.NONE;\r
-\r
- Boolean multiLine = object.getJSONFieldDefault("multiLine", false);\r
- if(Boolean.TRUE.equals(multiLine))\r
- style |= SWT.MULTI;\r
- \r
- Boolean vscroll = object.getJSONFieldDefault("VScroll", false);\r
- if(Boolean.TRUE.equals(vscroll))\r
- style |= SWT.V_SCROLL;\r
- \r
- Boolean hscroll = object.getJSONFieldDefault("HScroll", false);\r
- if(Boolean.TRUE.equals(hscroll))\r
- style |= SWT.H_SCROLL;\r
- \r
- TrackedText tt = new TrackedText(parent, style);\r
-\r
- return tt.getWidget();\r
- }\r
- \r
-}\r
+package org.simantics.document.swt.core.widget;
+
+import java.util.Collection;
+
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Text;
+import org.simantics.datatypes.literal.Font;
+import org.simantics.datatypes.literal.RGB;
+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.utils.strings.StringInputProblem;
+import org.simantics.utils.strings.StringInputValidator;
+import org.simantics.utils.ui.widgets.ITrackedColorProvider;
+import org.simantics.utils.ui.widgets.TrackedModifyEvent;
+import org.simantics.utils.ui.widgets.TrackedModifyListener;
+import org.simantics.utils.ui.widgets.TrackedText;
+
+public class TrackedTextWidget extends LeafWidgetManager<Text> {
+
+ @Override
+ protected void doUpdateProperties(final SWTDocument document, Text control, JSONObject object) {
+
+ if(control.isDisposed()) return;
+
+ TrackedText tt = (TrackedText)control.getData(TrackedText.TRACKED_TEXT_KEY);
+
+ String text = object.getJSONField("text");
+
+ final AbstractEventHandler onModify = object.getJSONField("onModify");
+ final StringInputValidator validator = object.getJSONField("validator");
+
+ RGB.Integer invalidBackground = object.getBeanJSONFieldDefault("invalidBackground", RGB.Integer.BINDING, new RGB.Integer(255,255,255));
+ RGB.Integer inactiveBackground = object.getBeanJSONFieldDefault("inactiveBackground", RGB.Integer.BINDING, new RGB.Integer(255,255,255));
+ RGB.Integer hoverBackground = object.getBeanJSONFieldDefault("hoverBackground", RGB.Integer.BINDING, new RGB.Integer(255,255,255));
+ RGB.Integer editingBackground = object.getBeanJSONFieldDefault("editingBackground", RGB.Integer.BINDING, new RGB.Integer(255,255,255));
+
+ RGB.Integer foreground = object.getBeanJSONFieldDefault("foreground", RGB.Integer.BINDING, new RGB.Integer(0,0,0));
+
+ Font font = object.getBeanJSONFieldDefault("font", Font.BINDING, new Font("Arial",10,"Normal"));
+
+ final Color invalid = document.getColor(invalidBackground);
+ final Color inactive = document.getColor(inactiveBackground);
+ final Color hover = document.getColor(hoverBackground);
+ final Color editing = document.getColor(editingBackground);
+
+ tt.setColorProvider(new ITrackedColorProvider() {
+
+ @Override
+ public Color getInvalidBackground() {
+ return invalid;
+ }
+
+ @Override
+ public Color getInactiveBackground() {
+ return inactive;
+ }
+
+ @Override
+ public Color getHoverBackground() {
+ return hover;
+ }
+
+ @Override
+ public Color getEditingBackground() {
+ return editing;
+ }
+
+ });
+
+ if(text != null)
+ tt.setTextWithoutNotify(text);
+ else
+ System.err.println(this + " text == null");
+ // This applies coloring
+ tt.setEditable(true);
+
+ tt.addModifyListener(new TrackedModifyListener() {
+
+ @Override
+ public void modifyText(TrackedModifyEvent e) {
+ CommandContextImpl parameters = new CommandContextImpl();
+ parameters.putString("text", e.getText());
+ document.post(onModify, parameters);
+ }
+
+ });
+
+ if(validator != null) {
+ tt.setInputValidator(new IInputValidator() {
+
+ @Override
+ public String isValid(String newText) {
+ Collection<StringInputProblem> problems = validator.validate(newText);
+ if(problems.isEmpty()) return null;
+ else if (problems.size() == 1) {
+ return problems.iterator().next().getDescription();
+ } else return problems.toString();
+ }
+
+ });
+ }
+
+ control.setFont(document.getFont(font));
+ control.setForeground(document.getColor(foreground));
+
+ }
+
+ @Override
+ protected Text doCreateControl(SWTDocument document, Composite parent, JSONObject object) {
+ int style = SWT.NONE;
+
+ Boolean multiLine = object.getJSONFieldDefault("multiLine", false);
+ if(Boolean.TRUE.equals(multiLine))
+ style |= SWT.MULTI;
+
+ Boolean vscroll = object.getJSONFieldDefault("VScroll", false);
+ if(Boolean.TRUE.equals(vscroll))
+ style |= SWT.V_SCROLL;
+
+ Boolean hscroll = object.getJSONFieldDefault("HScroll", false);
+ if(Boolean.TRUE.equals(hscroll))
+ style |= SWT.H_SCROLL;
+
+ TrackedText tt = new TrackedText(parent, style);
+
+ return tt.getWidget();
+ }
+
+}