--- /dev/null
+package org.simantics.views.swt.client.impl;\r
+\r
+import java.util.ArrayList;\r
+\r
+import org.eclipse.jface.dialogs.IInputValidator;\r
+import org.eclipse.swt.custom.StyledText;\r
+import org.eclipse.swt.graphics.Color;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.simantics.datatypes.literal.RGB;\r
+import org.simantics.scl.runtime.function.Function1;\r
+import org.simantics.ui.colors.Colors;\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.TrackedStyledText;\r
+import org.simantics.views.swt.client.base.SingleSWTViewNode;\r
+\r
+public class SWTTrackedStyledText extends SingleSWTViewNode<StyledText> {\r
+ \r
+ private static final RGB.Integer WHITE = new RGB.Integer(255, 255, 255);\r
+ \r
+ private static final long serialVersionUID = 7932335224632082902L;\r
+ \r
+ private TrackedStyledText tt;\r
+ \r
+ protected Color invalidBackgroundColor;\r
+ protected Color inactiveBackgroundColor;\r
+ protected Color hoverBackgroundColor;\r
+ protected Color editingBackgroundColor;\r
+\r
+ public Function1<String, String> modifier;\r
+ public Function1<String, String> validator;\r
+ \r
+ public RGB.Integer invalidBackground = WHITE;\r
+ public RGB.Integer inactiveBackground = WHITE;\r
+ public RGB.Integer hoverBackground = WHITE;\r
+ public RGB.Integer editingBackground = WHITE;\r
+\r
+ protected ArrayList<TrackedModifyListener> listeners = new ArrayList<TrackedModifyListener>();\r
+ \r
+ public void addModifyListener(TrackedModifyListener listener) {\r
+ this.listeners.add(listener);\r
+ }\r
+ \r
+ @Override\r
+ public void createControls(Composite parent) {\r
+ \r
+ tt = new TrackedStyledText(parent, style);\r
+ control = tt.getWidget();\r
+\r
+ setProperties();\r
+ \r
+ tt.setColorProvider(new ITrackedColorProvider() {\r
+ \r
+ @Override\r
+ public Color getInvalidBackground() {\r
+ return invalidBackgroundColor;\r
+ }\r
+ \r
+ @Override\r
+ public Color getInactiveBackground() {\r
+ return inactiveBackgroundColor;\r
+ }\r
+ \r
+ @Override\r
+ public Color getHoverBackground() {\r
+ return hoverBackgroundColor;\r
+ }\r
+ \r
+ @Override\r
+ public Color getEditingBackground() {\r
+ return editingBackgroundColor;\r
+ }\r
+ \r
+ });\r
+ \r
+ tt.setInputValidator(new IInputValidator() {\r
+ \r
+ @Override\r
+ public String isValid(String newText) {\r
+ if(validator != null) return validator.apply(newText);\r
+ else return null;\r
+ }\r
+ \r
+ });\r
+ \r
+ tt.addModifyListener(new TrackedModifyListener() {\r
+ \r
+ @Override\r
+ public void modifyText(TrackedModifyEvent e) {\r
+ if(modifier != null)\r
+ modifier.apply(e.getText());\r
+ for(TrackedModifyListener listener : listeners) listener.modifyText(e);\r
+ }\r
+ \r
+ });\r
+ \r
+ }\r
+\r
+ @Override\r
+ public void synchronizeText(String text) {\r
+ if(text != null) control.setText(text);\r
+ }\r
+ \r
+ final public void synchronizeInvalidBackground(RGB.Integer invalidBackground) {\r
+ if(invalidBackground != null) invalidBackgroundColor = Colors.swt(control.getDisplay(), invalidBackground);\r
+ }\r
+\r
+ final public void synchronizeInactiveBackground(RGB.Integer inactiveBackground) {\r
+ if(inactiveBackground != null) inactiveBackgroundColor = Colors.swt(control.getDisplay(), inactiveBackground);\r
+ }\r
+\r
+ final public void synchronizeHoverBackground(RGB.Integer hoverBackground) {\r
+ if(hoverBackground != null) hoverBackgroundColor = Colors.swt(control.getDisplay(), hoverBackground);\r
+ }\r
+\r
+ final public void synchronizeEditingBackground(RGB.Integer editingBackground) {\r
+ if(editingBackground != null) editingBackgroundColor = Colors.swt(control.getDisplay(), editingBackground);\r
+ }\r
+ \r
+ final public void synchronizeValidator(Function1<String, String> validator) {\r
+ \r
+ }\r
+\r
+ final public void synchronizeModifier(Function1<String, String> modifier) {\r
+ \r
+ }\r
+ \r
+}\r