From 2bf2d3ac2c578de481ecfd545d58be73c5628996 Mon Sep 17 00:00:00 2001 From: Eduardo Pedroni Date: Wed, 26 Mar 2014 21:34:37 +0000 Subject: Node grid has been refactored a few times, settings pane is almost complete, console is all done. --- src/jcgp/gui/population/GUINode.java | 74 ++++++++++++++---------------------- 1 file changed, 28 insertions(+), 46 deletions(-) (limited to 'src/jcgp/gui/population/GUINode.java') 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() { - @Override - public void changed(ObservableValue 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() { @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() { - @Override - public void changed(ObservableValue 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() { +// @Override +// public void changed(ObservableValue observable, +// Connection oldValue, Connection newValue) { +// updateLine(i); +// } +// }); +// } } -- cgit v1.2.3