aboutsummaryrefslogtreecommitdiffstats
path: root/src/jcgp/gui/settings/parameters/GUIParameter.java
diff options
context:
space:
mode:
authorEduardo Pedroni <ep625@york.ac.uk>2014-04-01 23:00:53 +0100
committerEduardo Pedroni <ep625@york.ac.uk>2014-04-01 23:00:53 +0100
commit02fd2bc7059da416937beb1abe67e5ca60379030 (patch)
tree609341fe10aaa0f2dc45a1e72eba20bd24fb1281 /src/jcgp/gui/settings/parameters/GUIParameter.java
parenta757deacded0d7357a9f68462d3f2051e16004ee (diff)
Settings pane now actually controls the parameters, not much left to do.
Diffstat (limited to 'src/jcgp/gui/settings/parameters/GUIParameter.java')
-rw-r--r--src/jcgp/gui/settings/parameters/GUIParameter.java56
1 files changed, 48 insertions, 8 deletions
diff --git a/src/jcgp/gui/settings/parameters/GUIParameter.java b/src/jcgp/gui/settings/parameters/GUIParameter.java
index a2f2f9c..a783d71 100644
--- a/src/jcgp/gui/settings/parameters/GUIParameter.java
+++ b/src/jcgp/gui/settings/parameters/GUIParameter.java
@@ -1,10 +1,18 @@
package jcgp.gui.settings.parameters;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import javafx.application.Platform;
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
import javafx.geometry.Pos;
import javafx.scene.control.Control;
import javafx.scene.layout.HBox;
import javafx.scene.text.Text;
-import jcgp.parameters.Parameter;
+import jcgp.backend.parameters.BooleanParameter;
+import jcgp.backend.parameters.DoubleParameter;
+import jcgp.backend.parameters.IntegerParameter;
+import jcgp.backend.parameters.Parameter;
public abstract class GUIParameter extends HBox {
@@ -12,19 +20,51 @@ public abstract class GUIParameter extends HBox {
protected Text name;
protected Control value;
- public GUIParameter() {
+ protected AtomicBoolean updateCheck = new AtomicBoolean(true);
+
+ protected GUIParameter() {
setAlignment(Pos.CENTER_LEFT);
setSpacing(5);
}
- public Parameter getParameter() {
- return parameter;
+ protected final void makeLightBinding() {
+ parameter.valueProperty().addListener(new ChangeListener<Object>() {
+ @Override
+ public void changed(
+ ObservableValue<? extends Object> observable,
+ Object oldValue, Object newValue) {
+ if (updateCheck.getAndSet(false)) {
+ Platform.runLater(new Runnable() {
+ @Override
+ public void run() {
+ updateCheck.set(true);
+ refreshValue();
+ }
+ });
+ }
+ }
+ });
}
-// public abstract void doBindings();
-//
-// public abstract void undoBindings();
-
public abstract void refreshValue();
+ public static GUIParameter create(Parameter parameter) {
+ if (parameter instanceof IntegerParameter) {
+ return new GUIIntegerParameter((IntegerParameter) parameter);
+ } else if (parameter instanceof DoubleParameter) {
+ return new GUIDoubleParameter((DoubleParameter) parameter);
+ } else if (parameter instanceof BooleanParameter) {
+ return new GUIBooleanParameter((BooleanParameter) parameter);
+ } else {
+ throw new ClassCastException("No GUIParameter subclass exists for argument of type " + parameter.getClass());
+ }
+ }
+
+ /**
+ * Writes the GUI parameter value back to the resources parameter,
+ * if any changes were made.
+ *
+ * @return true if the experiment needs to be reset, false otherwise.
+ */
+ public abstract boolean applyChange();
}