Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTorsten Sommer2013-05-13 16:16:33 +0000
committerTorsten Sommer2013-05-13 16:16:33 +0000
commit6e292f4f7361116ba0de37c920dd928c99c73cd8 (patch)
tree55cc989b8788d18f93e11b226c544d693d4463e8
parent1bc1980f01977c3a6557837d21ed6a44322a639b (diff)
downloadorg.eclipse.efxclipse-6e292f4f7361116ba0de37c920dd928c99c73cd8.tar.gz
org.eclipse.efxclipse-6e292f4f7361116ba0de37c920dd928c99c73cd8.tar.xz
org.eclipse.efxclipse-6e292f4f7361116ba0de37c920dd928c99c73cd8.zip
Improved controls and validation added.
-rw-r--r--bundles/runtime/org.eclipse.fx.ecp.ui/plugin.xml88
-rw-r--r--bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/CheckBoxControl.java12
-rw-r--r--bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/DummyControl.java6
-rw-r--r--bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/EnumControl.java61
-rw-r--r--bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/FormControlFactory.java104
-rw-r--r--bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/MultiTextControl.java73
-rw-r--r--bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/TextFieldControl.java124
-rw-r--r--bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/ValidationMessage.java104
8 files changed, 413 insertions, 159 deletions
diff --git a/bundles/runtime/org.eclipse.fx.ecp.ui/plugin.xml b/bundles/runtime/org.eclipse.fx.ecp.ui/plugin.xml
index 53e266aff..f493f7d08 100644
--- a/bundles/runtime/org.eclipse.fx.ecp.ui/plugin.xml
+++ b/bundles/runtime/org.eclipse.fx.ecp.ui/plugin.xml
@@ -16,7 +16,6 @@
supportedClassType="java.lang.Object">
</staticTest>
</factory>
- -->
<factory
class="org.eclipse.fx.ecp.ui.controls.CheckBoxControl$Factory"
controlClass="javafx.scene.Node"
@@ -85,9 +84,12 @@
supportedClassType="java.lang.String">
</staticTest>
</factory>
+ -->
</extension>
<extension
point="org.eclipse.fx.ecp.ui.controls">
+
+ <!--
<factory
class="org.eclipse.fx.ecp.ui.controls.DummyControl$Factory"
controlClass="javafx.scene.Node"
@@ -99,6 +101,90 @@
supportedClassType="java.lang.Object">
</staticTest>
</factory>
+ -->
+
+ <factory
+ class="org.eclipse.fx.ecp.ui.controls.CheckBoxControl$Factory"
+ controlClass="javafx.scene.Node"
+ id="org.eclipse.fx.ecp.ui.controls.checkBox"
+ showLabel="true">
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.lang.Boolean">
+ </staticTest>
+ </factory>
+
+ <factory
+ class="org.eclipse.fx.ecp.ui.controls.TextFieldControl$Factory"
+ controlClass="javafx.scene.Node"
+ id="org.eclipse.fx.ecp.ui.controls.textField"
+ showLabel="true">
+
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.math.BigDecimal">
+ </staticTest>
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.math.BigInteger">
+ </staticTest>
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.lang.Character">
+ </staticTest>
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.util.Date">
+ </staticTest>
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.lang.Double">
+ </staticTest>
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.lang.Float">
+ </staticTest>
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.lang.Integer">
+ </staticTest>
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.lang.Long">
+ </staticTest>
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.lang.Short">
+ </staticTest>
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.lang.String">
+ </staticTest>
+
+ </factory>
+ <factory
+ class="org.eclipse.fx.ecp.ui.controls.EnumControl$Factory"
+ controlClass="javafx.scene.Node"
+ id="org.eclipse.fx.ecp.ui.controls.enumCombo"
+ showLabel="true">
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.lang.Enum">
+ </staticTest>
+ </factory>
+
</extension>
</plugin>
diff --git a/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/CheckBoxControl.java b/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/CheckBoxControl.java
index 1025ee354..1a11b1673 100644
--- a/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/CheckBoxControl.java
+++ b/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/CheckBoxControl.java
@@ -1,8 +1,7 @@
package org.eclipse.fx.ecp.ui.controls;
import javafx.scene.control.CheckBox;
-import javafx.scene.control.Label;
-import javafx.scene.layout.HBox;
+import javafx.scene.layout.VBox;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.ecore.EObject;
@@ -12,18 +11,13 @@ import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
import org.eclipse.fx.ecp.ui.Control;
@SuppressWarnings("restriction")
-public class CheckBoxControl extends HBox implements Control {
+public class CheckBoxControl extends VBox implements Control {
public CheckBoxControl(IItemPropertyDescriptor propertyDescriptor, ECPControlContext context) {
getStyleClass().add("formControl");
EObject modelElement = context.getModelElement();
- String displayName = propertyDescriptor.getDisplayName(modelElement);
- Label label = new Label(displayName);
- label.getStyleClass().add(IControlConstants.CONTROL_LABEL_CLASS);
- getChildren().add(label);
-
EStructuralFeature feature = (EStructuralFeature) propertyDescriptor.getFeature(modelElement);
Object val = modelElement.eGet(feature);
@@ -31,6 +25,8 @@ public class CheckBoxControl extends HBox implements Control {
checkBox.setSelected((Boolean) val);
getChildren().add(checkBox);
+
+ getChildren().add(new ValidationMessage());
}
@Override
diff --git a/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/DummyControl.java b/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/DummyControl.java
index 7743fbbdd..ca3ef987f 100644
--- a/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/DummyControl.java
+++ b/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/DummyControl.java
@@ -1,6 +1,7 @@
package org.eclipse.fx.ecp.ui.controls;
+import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
@@ -18,6 +19,11 @@ public class DummyControl extends HBox implements Control {
public DummyControl(IItemPropertyDescriptor propertyDescriptor, ECPControlContext context) {
EObject modelElement = context.getModelElement();
+ String displayName = propertyDescriptor.getDisplayName(modelElement);
+ Label label = new Label(displayName);
+ label.getStyleClass().add(IControlConstants.CONTROL_LABEL_CLASS);
+ getChildren().add(label);
+
EStructuralFeature feature = (EStructuralFeature) propertyDescriptor.getFeature(modelElement);
Object val = modelElement.eGet(feature);
diff --git a/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/EnumControl.java b/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/EnumControl.java
index 432dbba0d..82752ae07 100644
--- a/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/EnumControl.java
+++ b/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/EnumControl.java
@@ -5,9 +5,8 @@ import java.util.ArrayList;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.control.ChoiceBox;
-import javafx.scene.control.Label;
import javafx.scene.control.SingleSelectionModel;
-import javafx.scene.layout.HBox;
+import javafx.scene.layout.VBox;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.util.Diagnostic;
@@ -25,17 +24,14 @@ import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
import org.eclipse.fx.ecp.ui.Control;
@SuppressWarnings("restriction")
-public class EnumControl extends HBox implements Control {
+public class EnumControl extends VBox implements Control {
+
+ private ValidationMessage validationMessage;
public EnumControl(IItemPropertyDescriptor propertyDescriptor, ECPControlContext context) {
final EObject modelElement = context.getModelElement();
final EditingDomain editingDomain = context.getEditingDomain();
- String displayName = propertyDescriptor.getDisplayName(modelElement);
- Label label = new Label(displayName);
- label.getStyleClass().add(IControlConstants.CONTROL_LABEL_CLASS);
- getChildren().add(label);
-
final EStructuralFeature feature = (EStructuralFeature) propertyDescriptor.getFeature(modelElement);
ChoiceBox<Enumerator> choiceBox = new ChoiceBox<>();
@@ -71,30 +67,65 @@ public class EnumControl extends HBox implements Control {
Command command = SetCommand.create(editingDomain, modelElement, feature, newValue);
if (command.canExecute())
editingDomain.getCommandStack().execute(command);
+
+ if(newValue == null) {
+ validationMessage.setMessage("A value must be selected");
+ } else {
+ validationMessage.setMessage(null);
+ }
}
});
+
+ validationMessage = new ValidationMessage();
+ getChildren().add(validationMessage);
}
-
+
@Override
public void handleValidation(Diagnostic diagnostic) {
- // TODO Auto-generated method stub
-
+// if (diagnostic.getSeverity() != Diagnostic.OK) {
+//
+// validationMessage.setMessage(diagnostic.getMessage());
+//
+//// validationLabel.setText(diagnostic.getMessage());
+//
+// // Timeline timeline = new Timeline();
+// //
+// // timeline.getKeyFrames().addAll(
+// // new KeyFrame(Duration.ZERO, new
+// // KeyValue(rectangle.heightProperty(), 0, Interpolator.EASE_BOTH)),
+// // new KeyFrame(Duration.millis(300), new
+// // KeyValue(rectangle.heightProperty(), 50, Interpolator.EASE_BOTH))
+// // );
+// //
+// // timeline.play();
+//
+// // ScaleTransition transition = ScaleTransitionBuilder.create()
+// // .node(validationLabel)
+// // .duration(Duration.seconds(2))
+// // .fromY(0)
+// // .toY(1)
+// // .build();
+// // transition.play();
+//
+// } else {
+// resetValidation();
+// }
}
-
+
@Override
public void resetValidation() {
- // TODO Auto-generated method stub
+// validationLabel.setText(null);
}
-
+
public static class Factory implements Control.Factory {
@Override
public Control createControl(IItemPropertyDescriptor itemPropertyDescriptor, ECPControlContext context) {
return new EnumControl(itemPropertyDescriptor, context);
}
-
+
}
}
diff --git a/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/FormControlFactory.java b/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/FormControlFactory.java
index 075006132..8fa899e7e 100644
--- a/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/FormControlFactory.java
+++ b/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/FormControlFactory.java
@@ -1,52 +1,52 @@
-package org.eclipse.fx.ecp.ui.controls;
-
-import javafx.scene.Node;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClassifier;
-import org.eclipse.emf.ecore.EDataType;
-import org.eclipse.emf.ecore.EEnum;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.EcorePackage;
-import org.eclipse.emf.ecp.edit.ECPControlContext;
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-
-public class FormControlFactory {
-
- public Node createFormControl(IItemPropertyDescriptor propertyDescriptor, ECPControlContext context) {
-
- EObject modelElement = context.getModelElement();
- EStructuralFeature feature = (EStructuralFeature) propertyDescriptor.getFeature(modelElement);
-
- EClassifier type = feature.getEType();
-
- if (feature.isMany()) {
- if (type == EcorePackage.Literals.ESTRING) {
- return new MultiTextControl(propertyDescriptor, context);
- }
- if (feature instanceof EReference) {
- return new MultiReferenceControl(propertyDescriptor, context);
- }
- } else {
-
- if (type == EcorePackage.Literals.EBOOLEAN) {
- return new CheckBoxControl(propertyDescriptor, context);
- } else if (type instanceof EEnum) {
- return new EnumControl(propertyDescriptor, context);
- } else if (feature instanceof EAttribute) {
- TextFieldControl textFieldControl = new TextFieldControl(propertyDescriptor, context);
- if (type instanceof EDataType && textFieldControl.isControlFor((EDataType) type))
- return textFieldControl;
- } else if (feature instanceof EReference) {
- return new ReferenceControl(propertyDescriptor, context);
- }
-
- }
-
- return new DummyControl(propertyDescriptor, context);
-
- }
-
-}
+//package at.bestsolution.efxclipse.ecp.ui.controls;
+//
+//import javafx.scene.Node;
+//
+//import org.eclipse.emf.ecore.EAttribute;
+//import org.eclipse.emf.ecore.EClassifier;
+//import org.eclipse.emf.ecore.EDataType;
+//import org.eclipse.emf.ecore.EEnum;
+//import org.eclipse.emf.ecore.EObject;
+//import org.eclipse.emf.ecore.EReference;
+//import org.eclipse.emf.ecore.EStructuralFeature;
+//import org.eclipse.emf.ecore.EcorePackage;
+//import org.eclipse.emf.ecp.edit.ECPControlContext;
+//import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+//
+//public class FormControlFactory {
+//
+// public Node createFormControl(IItemPropertyDescriptor propertyDescriptor, ECPControlContext context) {
+//
+// EObject modelElement = context.getModelElement();
+// EStructuralFeature feature = (EStructuralFeature) propertyDescriptor.getFeature(modelElement);
+//
+// EClassifier type = feature.getEType();
+//
+// if (feature.isMany()) {
+// if (type == EcorePackage.Literals.ESTRING) {
+// return new MultiTextControl(propertyDescriptor, context);
+// }
+// if (feature instanceof EReference) {
+// return new MultiReferenceControl(propertyDescriptor, context);
+// }
+// } else {
+//
+// if (type == EcorePackage.Literals.EBOOLEAN) {
+// return new CheckBoxControl(propertyDescriptor, context);
+// } else if (type instanceof EEnum) {
+// return new EnumControl(propertyDescriptor, context);
+// } else if (feature instanceof EAttribute) {
+// TextFieldControl textFieldControl = new TextFieldControl(propertyDescriptor, context);
+// if (type instanceof EDataType && textFieldControl.isControlFor((EDataType) type))
+// return textFieldControl;
+// } else if (feature instanceof EReference) {
+// return new ReferenceControl(propertyDescriptor, context);
+// }
+//
+// }
+//
+// return new DummyControl(propertyDescriptor, context);
+//
+// }
+//
+//}
diff --git a/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/MultiTextControl.java b/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/MultiTextControl.java
index f856df839..79531191d 100644
--- a/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/MultiTextControl.java
+++ b/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/MultiTextControl.java
@@ -1,60 +1,67 @@
package org.eclipse.fx.ecp.ui.controls;
-import java.util.ArrayList;
import java.util.List;
-import java.util.Objects;
-import javafx.beans.value.ChangeListener;
-import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
-import javafx.scene.control.ChoiceBox;
-import javafx.scene.control.Label;
import javafx.scene.control.ListView;
-import javafx.scene.control.SingleSelectionModel;
-import javafx.scene.layout.HBox;
-import javafx.scene.layout.Priority;
-
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.common.util.Enumerator;
-import org.eclipse.emf.ecore.EClassifier;
-import org.eclipse.emf.ecore.EEnum;
-import org.eclipse.emf.ecore.EEnumLiteral;
+import javafx.scene.layout.VBox;
+
+import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecp.edit.ECPControlContext;
-import org.eclipse.emf.edit.command.SetCommand;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.fx.ecp.ui.Control;
+
+@SuppressWarnings("restriction")
+public class MultiTextControl extends VBox implements Control {
-public class MultiTextControl extends HBox {
+ private ValidationMessage validationMessage = null;
public MultiTextControl(IItemPropertyDescriptor propertyDescriptor, ECPControlContext context) {
final EObject modelElement = context.getModelElement();
final EditingDomain editingDomain = context.getEditingDomain();
getStyleClass().add("multiTextControl");
-
- String displayName = propertyDescriptor.getDisplayName(modelElement);
- Label label = new Label(displayName);
- label.getStyleClass().add(IControlConstants.CONTROL_LABEL_CLASS);
- getChildren().add(label);
final EStructuralFeature feature = (EStructuralFeature) propertyDescriptor.getFeature(modelElement);
-
-
- ListView<String> listView = new ListView<>();
-
- List<String> values = (List<String>) modelElement.eGet(feature);
-
+ ListView<Object> listView = new ListView<>();
+
+ List<Object> values = (List<Object>) modelElement.eGet(feature);
+
listView.setItems(FXCollections.observableList(values));
-
+
getChildren().add(listView);
-
+
listView.setDisable(true);
-
- HBox.setHgrow(listView, Priority.ALWAYS);
+
+ validationMessage = new ValidationMessage();
+ getChildren().add(validationMessage);
+ }
+
+ @Override
+ public void handleValidation(Diagnostic diagnostic) {
+ if (diagnostic.getSeverity() != Diagnostic.OK) {
+ validationMessage.setMessage(diagnostic.getMessage());
+ } else {
+ resetValidation();
+ }
+ }
+
+ @Override
+ public void resetValidation() {
+ validationMessage.setMessage(null);
+ }
+
+ public static class Factory implements Control.Factory {
+
+ @Override
+ public Control createControl(IItemPropertyDescriptor itemPropertyDescriptor, ECPControlContext context) {
+ return new MultiTextControl(itemPropertyDescriptor, context);
+ }
+
}
}
diff --git a/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/TextFieldControl.java b/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/TextFieldControl.java
index d5707f1e3..c31a96bbf 100644
--- a/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/TextFieldControl.java
+++ b/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/TextFieldControl.java
@@ -1,85 +1,58 @@
package org.eclipse.fx.ecp.ui.controls;
-import java.util.Collection;
import java.util.Objects;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.ObservableList;
-import javafx.scene.control.Label;
import javafx.scene.control.TextField;
-import javafx.scene.layout.HBox;
-import javafx.scene.layout.Priority;
+import javafx.scene.layout.VBox;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.ecore.EDataType;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.util.Diagnostician;
+import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecp.edit.ECPControlContext;
import org.eclipse.emf.edit.command.SetCommand;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
import org.eclipse.fx.ecp.ui.Control;
-import com.google.common.collect.Sets;
-
@SuppressWarnings("restriction")
-public class TextFieldControl extends HBox implements Control {
-
- final Collection<EDataType> supportedTypes = Sets.newHashSet(
- EcorePackage.Literals.EBIG_DECIMAL,
- EcorePackage.Literals.EBIG_INTEGER,
- EcorePackage.Literals.EBOOLEAN,
- EcorePackage.Literals.ECHAR,
- EcorePackage.Literals.ECHARACTER_OBJECT,
- EcorePackage.Literals.EDATE,
- EcorePackage.Literals.EDOUBLE,
- EcorePackage.Literals.EDOUBLE_OBJECT,
- EcorePackage.Literals.EFLOAT,
- EcorePackage.Literals.EFLOAT_OBJECT,
- EcorePackage.Literals.EINT,
- EcorePackage.Literals.EINTEGER_OBJECT,
- EcorePackage.Literals.ELONG,
- EcorePackage.Literals.ELONG_OBJECT,
- EcorePackage.Literals.ESHORT,
- EcorePackage.Literals.ESHORT_OBJECT,
- EcorePackage.Literals.ESTRING);
- private TextField textField;
+public class TextFieldControl extends VBox implements Control {
- public boolean isControlFor(EDataType type) {
- return supportedTypes.contains(type);
- }
+ private TextField textField;
+ private ValidationMessage validationMessage = null;
public TextFieldControl(IItemPropertyDescriptor propertyDescriptor, ECPControlContext context) {
final EObject modelElement = context.getModelElement();
final EditingDomain editingDomain = context.getEditingDomain();
- String displayName = propertyDescriptor.getDisplayName(modelElement);
- Label label = new Label(displayName);
- label.getStyleClass().add(IControlConstants.CONTROL_LABEL_CLASS);
- getChildren().add(label);
-
final EStructuralFeature feature = (EStructuralFeature) propertyDescriptor.getFeature(modelElement);
- //final EDataTypeValueHandler valueHandler = new EDataTypeValueHandler((EDataType) feature.getEType());
+ final EDataTypeValueHandler valueHandler = new EDataTypeValueHandler((EDataType) feature.getEType());
Object value = modelElement.eGet(feature);
- textField = null;//new TextField(valueHandler.toString(value));
+ textField = new TextField(valueHandler.toString(value));
textField.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observableValue, String oldText, String newText) {
- String message = "lala"; //valueHandler.isValid(newText);
+ final String message = valueHandler.isValid(newText);
ObservableList<String> styleClass = textField.getStyleClass();
- if (message == null)
+ if (message == null) {
styleClass.remove(IControlConstants.INVALID_CLASS);
- else if (!styleClass.contains(IControlConstants.INVALID_CLASS))
- styleClass.add(IControlConstants.INVALID_CLASS);
+ } else {
+ if (!styleClass.contains(IControlConstants.INVALID_CLASS))
+ styleClass.add(IControlConstants.INVALID_CLASS);
+ }
+ validationMessage.setMessage(message);
}
});
@@ -91,10 +64,10 @@ public class TextFieldControl extends HBox implements Control {
if (!newFocused) {
Object oldValue = modelElement.eGet(feature);
String text = textField.getText();
- String message = "lala"; // valueHandler.isValid(text);
+ String message = valueHandler.isValid(text);
if (message == null) {
- Object newValue = "lala"; // valueHandler.toValue(text);
+ Object newValue = valueHandler.toValue(text);
// only commit if the value has changed
if (!Objects.equals(oldValue, newValue)) {
@@ -110,21 +83,24 @@ public class TextFieldControl extends HBox implements Control {
});
- HBox.setHgrow(textField, Priority.ALWAYS);
-
getChildren().add(textField);
+
+ validationMessage = new ValidationMessage();
+ getChildren().add(validationMessage);
}
@Override
public void handleValidation(Diagnostic diagnostic) {
- // TODO Auto-generated method stub
-
+ if (diagnostic.getSeverity() != Diagnostic.OK) {
+ validationMessage.setMessage(diagnostic.getMessage());
+ } else {
+ resetValidation();
+ }
}
@Override
public void resetValidation() {
- // TODO Auto-generated method stub
-
+ validationMessage.setMessage(null);
}
public static class Factory implements Control.Factory {
@@ -136,4 +112,52 @@ public class TextFieldControl extends HBox implements Control {
}
+ /**
+ * A delegate for handling validation and conversion for data type values.
+ */
+ protected static class EDataTypeValueHandler {
+ protected EDataType eDataType;
+
+ public EDataTypeValueHandler(EDataType eDataType) {
+ this.eDataType = eDataType;
+ }
+
+ public String isValid(Object object) {
+ Object value;
+ try {
+ value = eDataType.getEPackage().getEFactoryInstance().createFromString(eDataType, (String) object);
+ } catch (Exception exception) {
+ String message = exception.getClass().getName();
+ int index = message.lastIndexOf('.');
+ if (index >= 0) {
+ message = message.substring(index + 1);
+ }
+ if (exception.getLocalizedMessage() != null) {
+ message = message + ": " + exception.getLocalizedMessage();
+ }
+ return message;
+ }
+ Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eDataType, value);
+ if (diagnostic.getSeverity() == Diagnostic.OK) {
+ return null;
+ } else {
+ return (diagnostic.getChildren().get(0)).getMessage().replaceAll("'", "''").replaceAll("\\{", "'{'"); // }}
+ }
+ }
+
+ public String isValid(String text) {
+ return isValid((Object) text);
+ }
+
+ public Object toValue(String string) {
+ return EcoreUtil.createFromString(eDataType, string);
+ }
+
+ public String toString(Object value) {
+ String result = EcoreUtil.convertToString(eDataType, value);
+ return result == null ? "" : result;
+ }
+
+ }
+
}
diff --git a/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/ValidationMessage.java b/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/ValidationMessage.java
new file mode 100644
index 000000000..c26c70934
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.ecp.ui/src/org/eclipse/fx/ecp/ui/controls/ValidationMessage.java
@@ -0,0 +1,104 @@
+package org.eclipse.fx.ecp.ui.controls;
+
+import java.util.Objects;
+
+import javafx.animation.ParallelTransition;
+import javafx.animation.ScaleTransition;
+import javafx.animation.Transition;
+import javafx.scene.control.Label;
+import javafx.scene.layout.Pane;
+import javafx.scene.paint.Color;
+import javafx.scene.shape.Polygon;
+import javafx.util.Duration;
+
+public class ValidationMessage extends Pane {
+
+ final private Label label;
+ final private Polygon arrow;
+ private String message;
+
+ public ValidationMessage() {
+ setVisible(false);
+ setPrefHeight(0);
+
+ final double x = 35;
+ arrow = new Polygon(x, 2.0, x + 10, 12.0, x - 10, 12.0);
+ arrow.setFill(Color.web("#f04349"));
+ getChildren().add(arrow);
+
+ label = new Label();
+ label.getStyleClass().add("validationLabel");
+ getChildren().add(label);
+ }
+
+ public void setMessage(String newMessage) {
+
+ if(Objects.equals(message, newMessage))
+ return;
+
+ message = newMessage;
+
+ final double initialHeight = getHeight();
+
+ if (message == null) {
+// setVisible(false);
+ Transition heightTransition = new Transition() {
+
+ {
+ setCycleDuration(Duration.millis(300));
+ }
+
+ @Override
+ protected void interpolate(double t) {
+ setPrefHeight((1 - t) * initialHeight);
+ }
+
+ };
+
+ ScaleTransition scaleTransition = new ScaleTransition(Duration.millis(200), this);
+ scaleTransition.setFromX(1);
+ scaleTransition.setToX(0);
+ scaleTransition.setFromY(1);
+ scaleTransition.setToY(0);
+
+ ParallelTransition parallelTransition = new ParallelTransition();
+ parallelTransition.getChildren().addAll(heightTransition, scaleTransition);
+
+ parallelTransition.play();
+ } else {
+ setPrefWidth(label.getWidth());
+ final double targetHeight = label.getHeight();
+
+ label.setText(message);
+ setScaleX(0);
+ setScaleY(0);
+ setVisible(true);
+
+ Transition heightTransition = new Transition() {
+
+ {
+ setCycleDuration(Duration.millis(300));
+ }
+
+ @Override
+ protected void interpolate(double t) {
+ setPrefHeight(initialHeight + t * (targetHeight - initialHeight));
+ }
+
+ };
+
+ ScaleTransition scaleTransition = new ScaleTransition(Duration.millis(200), this);
+ scaleTransition.setDelay(Duration.millis(100));
+ scaleTransition.setFromX(0);
+ scaleTransition.setToX(1);
+ scaleTransition.setFromY(0);
+ scaleTransition.setToY(1);
+
+ ParallelTransition parallelTransition = new ParallelTransition();
+ parallelTransition.getChildren().addAll(heightTransition, scaleTransition);
+
+ parallelTransition.play();
+ }
+ }
+
+}

Back to the top