diff options
| author | Eduardo Pedroni <ep625@york.ac.uk> | 2014-04-01 23:00:53 +0100 | 
|---|---|---|
| committer | Eduardo Pedroni <ep625@york.ac.uk> | 2014-04-01 23:00:53 +0100 | 
| commit | 02fd2bc7059da416937beb1abe67e5ca60379030 (patch) | |
| tree | 609341fe10aaa0f2dc45a1e72eba20bd24fb1281 /src/jcgp/gui/settings/parameters | |
| parent | a757deacded0d7357a9f68462d3f2051e16004ee (diff) | |
Settings pane now actually controls the parameters, not much left to do.
Diffstat (limited to 'src/jcgp/gui/settings/parameters')
4 files changed, 107 insertions, 58 deletions
diff --git a/src/jcgp/gui/settings/parameters/GUIBooleanParameter.java b/src/jcgp/gui/settings/parameters/GUIBooleanParameter.java index a9f6753..8acd6dd 100644 --- a/src/jcgp/gui/settings/parameters/GUIBooleanParameter.java +++ b/src/jcgp/gui/settings/parameters/GUIBooleanParameter.java @@ -1,11 +1,11 @@  package jcgp.gui.settings.parameters;  import javafx.scene.control.CheckBox; -import jcgp.parameters.BooleanParameter; +import jcgp.backend.parameters.BooleanParameter;  public class GUIBooleanParameter extends GUIParameter { -	public GUIBooleanParameter(BooleanParameter parameter) { +	GUIBooleanParameter(BooleanParameter parameter) {  		super();  		this.parameter = parameter; @@ -13,22 +13,16 @@ public class GUIBooleanParameter extends GUIParameter {  		value = new CheckBox(parameter.getName());  		((CheckBox) value).setSelected(parameter.get()); -		value.setDisable(!parameter.isEditable()); +		value.setDisable(parameter.isMonitor()); -		getChildren().add(value); +		if (parameter.isMonitor()) { +			makeLightBinding(); +			System.out.println("light binding made for " + name); +		} +		getChildren().add(value);  	} -//	@Override -//	public void doBindings() { -//		((CheckBox) value).selectedProperty().bind(((BooleanParameter) parameter).valueProperty()); -//	} -// -//	@Override -//	public void undoBindings() { -//		((CheckBox) value).selectedProperty().unbind(); -//	} -  	@Override  	public void refreshValue() {  		if (!((CheckBox) value).selectedProperty().isBound()) { @@ -36,5 +30,17 @@ public class GUIBooleanParameter extends GUIParameter {  		}  	} + +	@Override +	public boolean applyChange() { +		if (((CheckBox) value).isSelected() != ((BooleanParameter) parameter).get() && (!parameter.isMonitor())) { +			// apply value +			((BooleanParameter) parameter).set(((CheckBox) value).isSelected()); +			if (parameter.isCritical()) { +				return true; +			} +		} +		return false; +	}  } diff --git a/src/jcgp/gui/settings/parameters/GUIDoubleParameter.java b/src/jcgp/gui/settings/parameters/GUIDoubleParameter.java index 25d5b9f..4b74c6e 100644 --- a/src/jcgp/gui/settings/parameters/GUIDoubleParameter.java +++ b/src/jcgp/gui/settings/parameters/GUIDoubleParameter.java @@ -4,12 +4,12 @@ import javafx.geometry.Pos;  import javafx.scene.control.TextField;  import javafx.scene.layout.Priority;  import javafx.scene.text.Text; -import jcgp.GUI; -import jcgp.parameters.DoubleParameter; +import jcgp.backend.parameters.DoubleParameter; +import jcgp.gui.GUI;  public class GUIDoubleParameter extends GUIParameter { -	public GUIDoubleParameter(DoubleParameter parameter) { +	GUIDoubleParameter(DoubleParameter parameter) {  		super();  		this.parameter = parameter; @@ -23,26 +23,29 @@ public class GUIDoubleParameter extends GUIParameter {  		name.setWrappingWidth(GUI.WRAP_WIDTH); -		((TextField) value).setEditable(parameter.isEditable()); +		((TextField) value).setEditable(!parameter.isMonitor()); +		 +		if (parameter.isMonitor()) { +			makeLightBinding(); +		}  		getChildren().addAll(name, value);  	} -//	@Override -//	public void doBindings() { -//		((TextField) value).textProperty().bind(((DoubleParameter) parameter).valueProperty().asString()); -//	} -// -//	@Override -//	public void undoBindings() { -//		((TextField) value).textProperty().unbind(); -//	} -  	@Override  	public void refreshValue() { -		if (!((TextField) value).textProperty().isBound()) { -			((TextField) value).setText(String.valueOf(((DoubleParameter) parameter).get())); -		} +		((TextField) value).setText(String.valueOf(((DoubleParameter) parameter).get()));  	} -	 + +	@Override +	public boolean applyChange() { +		if (Double.valueOf(((TextField) value).getText()) != ((DoubleParameter) parameter).get() && (!parameter.isMonitor())) { +			// apply value +			((DoubleParameter) parameter).set(Double.valueOf(((TextField) value).getText())); +			if (parameter.isCritical()) { +				return true; +			} +		} +		return false; +	}	  } diff --git a/src/jcgp/gui/settings/parameters/GUIIntegerParameter.java b/src/jcgp/gui/settings/parameters/GUIIntegerParameter.java index 6bcfd55..70b78a6 100644 --- a/src/jcgp/gui/settings/parameters/GUIIntegerParameter.java +++ b/src/jcgp/gui/settings/parameters/GUIIntegerParameter.java @@ -4,12 +4,12 @@ import javafx.geometry.Pos;  import javafx.scene.control.TextField;  import javafx.scene.layout.Priority;  import javafx.scene.text.Text; -import jcgp.GUI; -import jcgp.parameters.IntegerParameter; +import jcgp.backend.parameters.IntegerParameter; +import jcgp.gui.GUI;  public class GUIIntegerParameter extends GUIParameter { -	public GUIIntegerParameter(IntegerParameter parameter) {	 +	GUIIntegerParameter(IntegerParameter parameter) {	  		super();  		this.parameter = parameter; @@ -23,27 +23,27 @@ public class GUIIntegerParameter extends GUIParameter {  		name.setWrappingWidth(GUI.WRAP_WIDTH); -		((TextField) value).setEditable(parameter.isEditable()); +		((TextField) value).setEditable(!parameter.isMonitor()); + +		if (parameter.isMonitor()) { +			makeLightBinding(); +		}  		getChildren().addAll(name, value);  	} -//	@Override -//	public void doBindings() { -//		((TextField) value).textProperty().bind(((IntegerParameter) parameter).valueProperty().asString()); -//	} -// -//	@Override -//	public void undoBindings() { -//		((TextField) value).textProperty().unbind(); -//	} -	 -	public TextField getTextField() { -		return (TextField) value; -	} -  	@Override  	public void refreshValue() {  		((TextField) value).setText(String.valueOf(((IntegerParameter) parameter).get()));  	} + +	@Override +	public boolean applyChange() { +		if (Integer.valueOf(((TextField) value).getText()) != ((IntegerParameter) parameter).get() && (!parameter.isMonitor())) { +			// apply value +			((IntegerParameter) parameter).set(Integer.valueOf(((TextField) value).getText())); +			return parameter.isCritical(); +		} +		return false; +	}  } 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();  }  | 
