diff options
Diffstat (limited to 'src/jcgp/gui/population/GUIOutput.java')
-rw-r--r-- | src/jcgp/gui/population/GUIOutput.java | 142 |
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); } } |