aboutsummaryrefslogtreecommitdiffstats
path: root/src/jcgp/gui/population/GUIOutput.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jcgp/gui/population/GUIOutput.java')
-rw-r--r--src/jcgp/gui/population/GUIOutput.java142
1 files changed, 62 insertions, 80 deletions
diff --git a/src/jcgp/gui/population/GUIOutput.java b/src/jcgp/gui/population/GUIOutput.java
index 9c5dfa5..4a12385 100644
--- a/src/jcgp/gui/population/GUIOutput.java
+++ b/src/jcgp/gui/population/GUIOutput.java
@@ -1,23 +1,16 @@
package jcgp.gui.population;
-import javafx.beans.value.ChangeListener;
-import javafx.beans.value.ObservableValue;
import javafx.event.EventHandler;
-import javafx.geometry.VPos;
import javafx.scene.control.Label;
import javafx.scene.input.MouseDragEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Paint;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;
-import javafx.scene.text.Font;
-import javafx.scene.text.Text;
-import javafx.scene.text.TextAlignment;
import jcgp.backend.population.Connection;
import jcgp.backend.population.Input;
import jcgp.backend.population.Node;
import jcgp.backend.population.Output;
-import jcgp.gui.ChromosomePane;
import jcgp.gui.GUI;
public class GUIOutput extends GUIGene {
@@ -27,7 +20,8 @@ public class GUIOutput extends GUIGene {
private Output output;
public GUIOutput(ChromosomePane parentRef, final Output output, Line line) {
-
+ super();
+
this.parent = parentRef;
this.output = output;
this.sourceLine = line;
@@ -38,16 +32,7 @@ public class GUIOutput extends GUIGene {
// set the line ends correctly
updateLines();
- mainCircle = new Circle(NODE_RADIUS, Paint.valueOf("white"));
- mainCircle.setStroke(Paint.valueOf("black"));
-
- text = new Text("O: " + output.getIndex());
- text.setFont(Font.font("Arial", 12));
- text.setTextOrigin(VPos.CENTER);
- text.setTextAlignment(TextAlignment.CENTER);
- text.setWrappingWidth(NODE_RADIUS * 2);
- text.setX(-NODE_RADIUS);
- text.setVisible(true);
+ text.setText("O: " + output.getIndex());
Circle socket = new Circle(-NODE_RADIUS, 0, SOCKET_RADIUS, Paint.valueOf("white"));
socket.setId(String.valueOf(0));
@@ -62,7 +47,7 @@ public class GUIOutput extends GUIGene {
* Mouse event handlers on sockets
*
*/
- socket.addEventFilter(MouseDragEvent.DRAG_DETECTED, new EventHandler<MouseEvent>() {
+ socket.addEventFilter(MouseEvent.DRAG_DETECTED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
// the mouse has been dragged out of the socket, this means a full drag is in progress
@@ -86,15 +71,15 @@ public class GUIOutput extends GUIGene {
}
});
- socket.addEventFilter(MouseDragEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {
+ socket.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
// mouse was pressed on the socket
- stateProperty.set(GUIGeneState.SOURCE);
+ setState(GUIGeneState.SOURCE);
}
});
- socket.addEventFilter(MouseDragEvent.MOUSE_DRAGGED, new EventHandler<MouseEvent>() {
+ socket.addEventFilter(MouseEvent.MOUSE_DRAGGED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (!parent.isTarget()) {
@@ -105,14 +90,14 @@ public class GUIOutput extends GUIGene {
}
});
- socket.addEventFilter(MouseDragEvent.MOUSE_RELEASED, new EventHandler<MouseEvent>() {
+ socket.addEventFilter(MouseEvent.MOUSE_RELEASED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (event.isStillSincePress()) {
// mouse was released before dragging out of the socket
updateLines();
- stateProperty.set(GUIGeneState.HOVER);
- } else if (stateProperty.get() == GUIGeneState.SOURCE) {
+ setState(GUIGeneState.HOVER);
+ } else if (getState() == GUIGeneState.SOURCE) {
// no connection has been made, fallback
resetState();
updateLines();
@@ -129,7 +114,7 @@ public class GUIOutput extends GUIGene {
@Override
public void handle(MouseDragEvent event) {
// the drag has entered this node, react appropriately
- stateProperty.set(GUIGeneState.FORBIDDEN_TARGET);
+ setState(GUIGeneState.FORBIDDEN_TARGET);
}
});
@@ -140,9 +125,9 @@ public class GUIOutput extends GUIGene {
// this happens even if we are the source of the drag
if (event.isPrimaryButtonDown()) {
if (event.getGestureSource() == event.getSource()) {
- stateProperty.set(GUIGeneState.SOURCE);
+ setState(GUIGeneState.SOURCE);
} else {
- stateProperty.set(isLocked() ? GUIGeneState.HOVER : GUIGeneState.NEUTRAL);
+ setState(isLocked() ? GUIGeneState.HOVER : GUIGeneState.NEUTRAL);
}
}
}
@@ -164,7 +149,7 @@ public class GUIOutput extends GUIGene {
}
source.updateLines();
- stateProperty.set(GUIGeneState.HOVER);
+ setState(GUIGeneState.HOVER);
}
});
@@ -173,8 +158,8 @@ public class GUIOutput extends GUIGene {
@Override
public void handle(MouseEvent event) {
// cursor has entered this node without dragging, or it is dragging and this is the source
- if (stateProperty.get() == GUIGeneState.NEUTRAL) {
- stateProperty.set(GUIGeneState.HOVER);
+ if (getState() == GUIGeneState.NEUTRAL) {
+ setState(GUIGeneState.HOVER);
}
}
});
@@ -190,8 +175,8 @@ public class GUIOutput extends GUIGene {
@Override
public void handle(MouseEvent event) {
// cursor has left this node without dragging, or it is dragging and this is the source
- if (stateProperty.get() == GUIGeneState.HOVER && !isLocked()) {
- stateProperty.set(GUIGeneState.NEUTRAL);
+ if (getState() == GUIGeneState.HOVER && !isLocked()) {
+ setState(GUIGeneState.NEUTRAL);
setConnections(GUIGeneState.NEUTRAL);
}
}
@@ -199,52 +184,49 @@ public class GUIOutput extends GUIGene {
getChildren().addAll(mainCircle, text, socket, connectionLabel);
+
+ }
- stateProperty.addListener(new ChangeListener<GUIGeneState>() {
- @Override
- public void changed(ObservableValue<? extends GUIGeneState> observable, GUIGeneState oldValue, GUIGeneState newValue) {
-
-
- switch (newValue) {
- case ACTIVE_HOVER:
- break;
- case FORBIDDEN_TARGET:
- mainCircle.setFill(Paint.valueOf(GUI.BAD_SELECTION_COLOUR));
- break;
- case HOVER:
- mainCircle.setFill(Paint.valueOf(GUI.MEDIUM_HIGHLIGHT_COLOUR));
- sourceLine.setVisible(true);
- if (!isLocked()) {
- setConnections(GUIGeneState.ACTIVE_HOVER);
- }
- break;
- case INDIRECT_HOVER:
- mainCircle.setFill(Paint.valueOf(GUI.SOFT_HIGHLIGHT_COLOUR));
- break;
- case NEUTRAL:
- mainCircle.setFill(Paint.valueOf(GUI.NEUTRAL_COLOUR));
- sourceLine.setVisible(false);
- break;
- case NO_CHANGE_TARGET:
- mainCircle.setFill(Paint.valueOf(GUI.NEUTRAL_SELECTION_COLOUR));
- break;
- case SOURCE:
- mainCircle.setFill(Paint.valueOf(GUI.HARD_HIGHLIGHT_COLOUR));
- setConnections(GUIGeneState.NEUTRAL);
- setConnections(GUIGeneState.INDIRECT_HOVER);
- break;
- case TARGET:
- mainCircle.setFill(Paint.valueOf(GUI.GOOD_SELECTION_COLOUR));
- break;
- default:
- break;
-
- }
+ @Override
+ public void setState(GUIGeneState newState) {
+ super.setState(newState);
+
+ switch (newState) {
+ case ACTIVE_HOVER:
+ break;
+ case FORBIDDEN_TARGET:
+ mainCircle.setFill(Paint.valueOf(GUI.BAD_SELECTION_COLOUR));
+ break;
+ case HOVER:
+ mainCircle.setFill(Paint.valueOf(GUI.MEDIUM_HIGHLIGHT_COLOUR));
+ sourceLine.setVisible(true);
+ if (!isLocked()) {
+ setConnections(GUIGeneState.ACTIVE_HOVER);
}
- });
-
+ break;
+ case INDIRECT_HOVER:
+ mainCircle.setFill(Paint.valueOf(GUI.SOFT_HIGHLIGHT_COLOUR));
+ break;
+ case NEUTRAL:
+ mainCircle.setFill(Paint.valueOf(GUI.NEUTRAL_COLOUR));
+ sourceLine.setVisible(false);
+ break;
+ case NO_CHANGE_TARGET:
+ mainCircle.setFill(Paint.valueOf(GUI.NEUTRAL_SELECTION_COLOUR));
+ break;
+ case SOURCE:
+ mainCircle.setFill(Paint.valueOf(GUI.HARD_HIGHLIGHT_COLOUR));
+ setConnections(GUIGeneState.NEUTRAL);
+ setConnections(GUIGeneState.INDIRECT_HOVER);
+ break;
+ case TARGET:
+ mainCircle.setFill(Paint.valueOf(GUI.GOOD_SELECTION_COLOUR));
+ break;
+ default:
+ break;
+ }
}
-
+
@Override
public void updateLines() {
if (output.getSource() instanceof Node) {
@@ -272,10 +254,10 @@ public class GUIOutput extends GUIGene {
@Override
public void resetState() {
if (locked > 0) {
- stateProperty.set(GUIGeneState.HOVER);
+ setState(GUIGeneState.HOVER);
setConnections(GUIGeneState.HOVER);
} else {
- stateProperty.set(GUIGeneState.NEUTRAL);
+ setState(GUIGeneState.NEUTRAL);
setConnections(GUIGeneState.NEUTRAL);
}
}
@@ -318,14 +300,14 @@ public class GUIOutput extends GUIGene {
public void unlock() {
if (isLocked()) {
setLocked(false);
- stateProperty.set(GUIGeneState.NEUTRAL);
+ setState(GUIGeneState.NEUTRAL);
setConnections(GUIGeneState.NEUTRAL);
}
}
public void lock() {
if (!isLocked()) {
- stateProperty.set(GUIGeneState.HOVER);
+ setState(GUIGeneState.HOVER);
setLocked(true);
}
}