aboutsummaryrefslogtreecommitdiffstats
path: root/src/jcgp/gui/population/GUINode.java
diff options
context:
space:
mode:
authorEduardo Pedroni <ep625@york.ac.uk>2014-03-26 21:34:37 +0000
committerEduardo Pedroni <ep625@york.ac.uk>2014-03-26 21:34:37 +0000
commit2bf2d3ac2c578de481ecfd545d58be73c5628996 (patch)
treeec47cfeedaed5bf677cab1bc9e910782369fe127 /src/jcgp/gui/population/GUINode.java
parentbc4fafb9d3c60993253f7e78c10338c901de653a (diff)
Node grid has been refactored a few times, settings pane is almost complete, console is all done.
Diffstat (limited to 'src/jcgp/gui/population/GUINode.java')
-rw-r--r--src/jcgp/gui/population/GUINode.java74
1 files changed, 28 insertions, 46 deletions
diff --git a/src/jcgp/gui/population/GUINode.java b/src/jcgp/gui/population/GUINode.java
index dd20006..eeacb9e 100644
--- a/src/jcgp/gui/population/GUINode.java
+++ b/src/jcgp/gui/population/GUINode.java
@@ -14,23 +14,14 @@ import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.scene.text.TextAlignment;
import jcgp.GUI;
-import jcgp.function.Function;
import jcgp.population.Connection;
import jcgp.population.Input;
import jcgp.population.Node;
-import jcgp.population.Output;
public class GUINode extends GUIGene {
- private Circle[] sockets;
- private Circle output;
-
private Line[] lines;
-
- private Label connectionNumber;
-
private Node node;
-
private int connectionIndex = 0;
public GUINode(ChromosomePane parentRef, final Node node, Line[] connectionLines) {
@@ -39,7 +30,7 @@ public class GUINode extends GUIGene {
this.parent = parentRef;
this.node = node;
this.lines = connectionLines;
-
+
// move the GUIGene to the right position
relocate(((node.getColumn() + 1) * (2 * NODE_RADIUS + SPACING)) + NODE_RADIUS,
(node.getRow() * (2 * NODE_RADIUS + SPACING)) + NODE_RADIUS);
@@ -47,32 +38,25 @@ public class GUINode extends GUIGene {
// set the line ends correctly
updateLines();
- connectionNumber = new Label();
+ final Label connectionNumber = new Label();
connectionNumber.setStyle("-fx-background-color:rgb(255, 255, 255); -fx-border-color:rgba(0, 0, 0, 0.5); ");
connectionNumber.setVisible(false);
- output = new Circle(NODE_RADIUS, 0, SOCKET_RADIUS, Paint.valueOf("white"));
+ Circle output = new Circle(NODE_RADIUS, 0, SOCKET_RADIUS, Paint.valueOf("white"));
output.setStroke(Paint.valueOf("black"));
mainCircle = new Circle(NODE_RADIUS, Paint.valueOf("white"));
mainCircle.setStroke(Paint.valueOf("black"));
text = new Text(node.getFunction().getName());
- this.node.functionProperty().addListener(new ChangeListener<Function>() {
- @Override
- public void changed(ObservableValue<? extends Function> observable,
- Function oldValue, Function newValue) {
- text.setText(newValue.getName());
- }
- });
- text.setFont(Font.font("Arial", 12));
+ text.setFont(Font.font("Arial", NODE_TEXT));
text.setTextOrigin(VPos.CENTER);
text.setTextAlignment(TextAlignment.CENTER);
text.setWrappingWidth(NODE_RADIUS * 2);
text.setX(-NODE_RADIUS);
text.setVisible(true);
- sockets = new Circle[(int) GUI.resources.get("arity")];
+ Circle[] sockets = new Circle[(int) GUI.resources.get("arity")];
double angle, xPos, yPos;
for (int l = 0; l < sockets.length; l++) {
angle = ((((double) (l + 1)) / ((double) ((int) GUI.resources.get("arity") + 1))) * THETA) - (THETA / 2);
@@ -137,11 +121,15 @@ public class GUINode extends GUIGene {
s.addEventFilter(MouseDragEvent.MOUSE_RELEASED, new EventHandler<MouseEvent>() {
@Override
- public void handle(MouseEvent event) {
- if (event.isDragDetect()) {
+ public void handle(MouseEvent event) {
+ if (event.isStillSincePress()) {
// mouse was released before dragging out of the socket
updateLine(index);
stateProperty.set(GUIGeneState.HOVER);
+ } else if (stateProperty.get() == GUIGeneState.SOURCE) {
+ // no connection has been made, fallback
+ resetState();
+ updateLines();
}
}
});
@@ -157,19 +145,13 @@ public class GUINode extends GUIGene {
// this happens even if we are the source of the drag
if (isAllowed((GUIGene) event.getGestureSource(), (GUIGene) event.getSource())) {
((GUIGene) event.getGestureSource()).setConnectionLine((GUIGene) event.getSource());
- if (event.getGestureSource() instanceof GUINode) {
- Connection source = ((GUINode) event.getGestureSource()).getChangingConnection();
- if (node == source) {
- stateProperty.set(GUIGeneState.NO_CHANGE_TARGET);
- return;
- }
- } else if (event.getGestureSource() instanceof GUIOutput) {
- Output source = ((GUIOutput) event.getGestureSource()).getGene();
- if (((GUIGene) event.getSource()).getGene() == source.getSource()) {
- ((GUIGene) event.getSource()).setState(GUIGeneState.NO_CHANGE_TARGET);
- }
+
+ Connection source = ((GUIGene) event.getGestureSource()).getChangingConnection();
+ if (node == source) {
+ stateProperty.set(GUIGeneState.NO_CHANGE_TARGET);
+ } else {
+ stateProperty.set(GUIGeneState.TARGET);
}
- stateProperty.set(GUIGeneState.TARGET);
} else {
stateProperty.set(GUIGeneState.FORBIDDEN_TARGET);
}
@@ -289,7 +271,7 @@ public class GUINode extends GUIGene {
case HOVER:
mainCircle.setFill(Paint.valueOf(GUI.MEDIUM_HIGHLIGHT_COLOUR));
showLines(true);
- if ((oldValue != GUIGeneState.LOCKED_HOVER || oldValue != GUIGeneState.SOURCE) && locked <= 0) {
+ if (locked <= 0) {
setConnections(GUIGeneState.INDIRECT_HOVER);
} else {
setConnections(GUIGeneState.HOVER);
@@ -326,16 +308,16 @@ public class GUINode extends GUIGene {
}
});
- for (int c = 0; c < lines.length; c++) {
- final int i = c;
- node.connections().get(c).addListener(new ChangeListener<Connection>() {
- @Override
- public void changed(ObservableValue<? extends Connection> observable,
- Connection oldValue, Connection newValue) {
- updateLine(i);
- }
- });
- }
+// for (int c = 0; c < lines.length; c++) {
+// final int i = c;
+// node.connections().get(c).addListener(new ChangeListener<Connection>() {
+// @Override
+// public void changed(ObservableValue<? extends Connection> observable,
+// Connection oldValue, Connection newValue) {
+// updateLine(i);
+// }
+// });
+// }
}