Skip to content

Commit 49e49a6

Browse files
committed
Added Play Pause Button, Stored Edge values
1 parent 7015bf3 commit 49e49a6

File tree

6 files changed

+113
-15
lines changed

6 files changed

+113
-15
lines changed

nbproject/private/private.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
55
<group>
66
<file>file:/F:/Java%20Workspace/FXSimulator/src/fxsimulator/CanvasController.java</file>
7+
<file>file:/F:/Java%20Workspace/FXSimulator/src/fxsimulator/Node.java</file>
78
</group>
89
</open-files>
910
</project-private>

src/fxsimulator/Canvas.fxml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,22 @@
161161
</JFXButton>
162162
</children>
163163
</JFXNodesList>
164+
<JFXButton fx:id="playPauseButton" contentDisplay="GRAPHIC_ONLY" layoutX="111.0" layoutY="1.0" onAction="#PlayPauseHandle" prefHeight="35.0" prefWidth="44.0" style="-fx-background-radius: 100;">
165+
<graphic>
166+
<ImageView fx:id="playPauseImage" fitHeight="28.0" fitWidth="41.0" pickOnBounds="true" preserveRatio="true">
167+
<image>
168+
<Image url="@../res/pause_black_48x48.png" />
169+
</image>
170+
</ImageView>
171+
</graphic>
172+
<tooltip>
173+
<Tooltip text="Pause" textAlignment="CENTER">
174+
<font>
175+
<Font size="12.5" />
176+
</font>
177+
</Tooltip>
178+
</tooltip>
179+
</JFXButton>
164180
</children>
165181
</AnchorPane>
166182
</children>

src/fxsimulator/CanvasController.java

Lines changed: 88 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import javafx.animation.Interpolator;
2121
import javafx.animation.ScaleTransition;
2222
import javafx.animation.SequentialTransition;
23+
import javafx.animation.StrokeTransition;
2324
import javafx.beans.value.ChangeListener;
2425
import javafx.beans.value.ObservableValue;
2526
import javafx.event.ActionEvent;
@@ -35,18 +36,22 @@
3536
import javafx.scene.control.TextInputDialog;
3637
import javafx.scene.control.ToggleGroup;
3738
import javafx.scene.effect.BlendMode;
39+
import javafx.scene.image.Image;
40+
import javafx.scene.image.ImageView;
3841
import javafx.scene.input.MouseButton;
3942
import javafx.scene.input.MouseEvent;
4043
import javafx.scene.layout.Pane;
4144
import javafx.scene.paint.Color;
45+
import javafx.scene.paint.Paint;
4246
import javafx.scene.shape.Circle;
4347
import javafx.scene.shape.Line;
48+
import javafx.scene.shape.Shape;
4449
import javafx.util.Duration;
4550

4651
public class CanvasController implements Initializable, ChangeListener {
4752

4853
@FXML
49-
private JFXButton canvasBackButton, clearButton, resetButton, gear;
54+
private JFXButton canvasBackButton, clearButton, resetButton, gear, playPauseButton;
5055
@FXML
5156
private JFXToggleButton addNodeButton, addEdgeButton, bfsButton, dfsButton, dijkstraButton, articulationPointButton;
5257
@FXML
@@ -67,17 +72,22 @@ public class CanvasController implements Initializable, ChangeListener {
6772
private JFXNodesList nodeList;
6873
@FXML
6974
private JFXSlider slider;
75+
@FXML
76+
private ImageView playPauseImage;
7077

7178
int nNode = 0, time = 500;
7279
NodeFX selectedNode = null, articulationStart = null;
7380
List<NodeFX> circles = new ArrayList<NodeFX>();
81+
List<Edge> mstEdges = new ArrayList<Edge>();
82+
List<Shape> edges = new ArrayList<Shape>();
7483
boolean addNode = true, addEdge = false, calculate = false,
75-
calculated = false;
84+
calculated = false, playing = false, paused = false;
7685
List<Label> distances = new ArrayList<Label>(), visitTime = new ArrayList<Label>(), lowTime = new ArrayList<Label>();
7786
private boolean weighted = Panel1Controller.weighted, unweighted = Panel1Controller.unweighted,
7887
directed = Panel1Controller.directed, undirected = Panel1Controller.undirected,
7988
bfs = true, dfs = true, dijkstra = true, articulationPoint = true;
8089
Algorithm algo = new Algorithm();
90+
SequentialTransition st;
8191

8292
@Override
8393
public void initialize(URL url, ResourceBundle rb) {
@@ -221,11 +231,15 @@ public void handle(MouseEvent mouseEvent) {
221231
}
222232

223233
if (undirected) {
224-
selectedNode.node.adjacents.add(new Edge(circle.node, Integer.valueOf(weight.getText())));
225-
circle.node.adjacents.add(new Edge(selectedNode.node, Integer.valueOf(weight.getText())));
234+
Edge temp = new Edge(selectedNode.node, circle.node, Integer.valueOf(weight.getText()), edgeLine);
235+
mstEdges.add(temp);
236+
selectedNode.node.adjacents.add(new Edge(selectedNode.node, circle.node, Integer.valueOf(weight.getText()), edgeLine));
237+
circle.node.adjacents.add(new Edge(circle.node, selectedNode.node, Integer.valueOf(weight.getText()), edgeLine));
238+
edges.add(edgeLine);
226239
} else if (directed) {
227-
selectedNode.node.adjacents.add(new Edge(circle.node, Integer.valueOf(weight.getText())));
228-
circle.node.revAdjacents.add(new Edge(selectedNode.node, Integer.valueOf(weight.getText())));
240+
selectedNode.node.adjacents.add(new Edge(selectedNode.node, circle.node, Integer.valueOf(weight.getText()), arrow));
241+
circle.node.revAdjacents.add(new Edge(circle.node, selectedNode.node, Integer.valueOf(weight.getText()), arrow));
242+
edges.add(arrow);
229243
}
230244
}
231245
if (addNode || (calculate && !calculated) || addEdge) {
@@ -285,7 +299,29 @@ public void handle(MouseEvent mouseEvent) {
285299
}
286300

287301
};
288-
302+
303+
@FXML
304+
public void PlayPauseHandle(ActionEvent event){
305+
System.out.println("IN PLAYPAUSE");
306+
System.out.println(playing +" " + paused);
307+
if(playing){
308+
Image image = new Image(getClass().getResourceAsStream("/play_arrow_black_48x48.png"));
309+
playPauseImage.setImage(image);
310+
System.out.println("Pausing");
311+
st.pause();
312+
paused = true;
313+
playing = false;
314+
return;
315+
}
316+
if(paused){
317+
Image image = new Image(getClass().getResourceAsStream("/pause_black_48x48.png"));
318+
playPauseImage.setImage(image);
319+
st.play();
320+
playing = true;
321+
paused = false;
322+
return;
323+
}
324+
}
289325
@FXML
290326
public void ResetHandle(ActionEvent event) {
291327
ClearHandle(null);
@@ -312,6 +348,8 @@ public void ResetHandle(ActionEvent event) {
312348
dfsButton.setDisable(true);
313349
dijkstraButton.setDisable(true);
314350
articulationPointButton.setDisable(true);
351+
playing = false;
352+
paused = false;
315353
}
316354

317355
@FXML
@@ -352,6 +390,8 @@ public void ClearHandle(ActionEvent event) {
352390
dfs = false;
353391
articulationPoint = false;
354392
dijkstra = false;
393+
playing = false;
394+
paused = false;
355395
}
356396

357397
@FXML
@@ -492,7 +532,7 @@ public NodeFX(double x, double y, double rad, String name) {
492532
*/
493533
public class Algorithm {
494534

495-
SequentialTransition st;
535+
496536

497537
//<editor-fold defaultstate="collapsed" desc="Dijkstra">
498538
public void newDijkstra(Node source) {
@@ -569,6 +609,7 @@ class Dijkstra {
569609
});
570610
st.onFinishedProperty();
571611
st.play();
612+
playing = true;
572613
//</editor-fold>
573614
}
574615
}
@@ -583,7 +624,7 @@ class BFS {
583624

584625
BFS(Node source) {
585626

586-
//<editor-fold defaultstate="collapsed" desc="Animation Initialize">
627+
//<editor-fold defaultstate="collapsed" desc="Set labels and distances">
587628
for (NodeFX n : circles) {
588629
distances.add(n.distance);
589630
n.distance.setLayoutX(n.point.x + 20);
@@ -614,13 +655,19 @@ class BFS {
614655
for (Edge e : u.adjacents) {
615656
if (e != null) {
616657
Node v = e.target;
658+
617659
if (!v.visited) {
618660
v.minDistance = u.minDistance + 1;
619661
v.visited = true;
620662
q.push(v);
621663
v.previous = u;
622664

623665
//<editor-fold defaultstate="collapsed" desc="Animation Control">
666+
//<editor-fold defaultstate="collapsed" desc="Change Edge colors">
667+
StrokeTransition ftEdge = new StrokeTransition(Duration.millis(time), e.line);
668+
ftEdge.setToValue(Color.rgb(163, 203, 56,1.0));
669+
st.getChildren().add(ftEdge);
670+
//</editor-fold>
624671
FillTransition ft1 = new FillTransition(Duration.millis(time), v.circle);
625672
ft1.setToValue(Color.FORESTGREEN);
626673
ft1.setOnFinished(ev -> {
@@ -646,12 +693,16 @@ class BFS {
646693
ft1.setToValue(Color.BLACK);
647694
ft1.play();
648695
}
696+
for(Shape n : edges){
697+
n.setStroke(Color.BLACK);
698+
}
649699
FillTransition ft1 = new FillTransition(Duration.millis(time), source.circle);
650700
ft1.setToValue(Color.RED);
651701
ft1.play();
652702
});
653703
st.onFinishedProperty();
654704
st.play();
705+
playing = true;
655706
//</editor-fold>
656707
}
657708
}
@@ -691,12 +742,16 @@ class DFS {
691742
ft1.setToValue(Color.BLACK);
692743
ft1.play();
693744
}
745+
for(Shape n : edges){
746+
n.setStroke(Color.BLACK);
747+
}
694748
FillTransition ft1 = new FillTransition(Duration.millis(time), source.circle);
695749
ft1.setToValue(Color.RED);
696750
ft1.play();
697751
});
698752
st.onFinishedProperty();
699753
st.play();
754+
playing = true;
700755
//</editor-fold>
701756
}
702757

@@ -716,8 +771,18 @@ public void DFSRecursion(Node source) {
716771
v.visited = true;
717772
v.previous = source;
718773
// v.circle.distance.setText("Dist. : " + v.minDistance);
774+
//<editor-fold defaultstate="collapsed" desc="Change Edge colors">
775+
StrokeTransition ftEdge = new StrokeTransition(Duration.millis(time), e.line);
776+
ftEdge.setToValue(Color.FORESTGREEN);
777+
st.getChildren().add(ftEdge);
778+
//</editor-fold>
719779
DFSRecursion(v);
720780
//<editor-fold defaultstate="collapsed" desc="Animation Control">
781+
//<editor-fold defaultstate="collapsed" desc="Change Edge colors">
782+
StrokeTransition ftEdge1 = new StrokeTransition(Duration.millis(time), e.line);
783+
ftEdge1.setToValue(Color.BLUEVIOLET);
784+
st.getChildren().add(ftEdge1);
785+
//</editor-fold>
721786
FillTransition ft1 = new FillTransition(Duration.millis(time), v.circle);
722787
ft1.setToValue(Color.BLUEVIOLET);
723788
ft1.onFinishedProperty();
@@ -782,6 +847,9 @@ class ArticulationPoint {
782847
ft1.setToValue(Color.BLACK);
783848
ft1.play();
784849
}
850+
for(Shape n : edges){
851+
n.setStroke(Color.BLACK);
852+
}
785853
for (NodeFX n : circles) {
786854
if (n.node.isArticulationPoint) {
787855
FillTransition ft1 = new FillTransition(Duration.millis(time), n);
@@ -792,6 +860,7 @@ class ArticulationPoint {
792860
});
793861
st.onFinishedProperty();
794862
st.play();
863+
playing = true;
795864
//</editor-fold>
796865
}
797866

@@ -823,6 +892,11 @@ void RecAP(Node s) {
823892
if (!v.visited) {
824893
v.previous = s;
825894
childCount++;
895+
//<editor-fold defaultstate="collapsed" desc="Change Edge colors">
896+
StrokeTransition ftEdge = new StrokeTransition(Duration.millis(time), e.line);
897+
ftEdge.setToValue(Color.FORESTGREEN);
898+
st.getChildren().add(ftEdge);
899+
//</editor-fold>
826900
RecAP(v);
827901

828902
s.lowTime = Math.min(s.lowTime, v.lowTime);
@@ -831,6 +905,11 @@ void RecAP(Node s) {
831905
}
832906

833907
//<editor-fold defaultstate="collapsed" desc="Animation Control">
908+
///<editor-fold defaultstate="collapsed" desc="Change Edge colors">
909+
StrokeTransition ftEdge1 = new StrokeTransition(Duration.millis(time), e.line);
910+
ftEdge1.setToValue(Color.BLUEVIOLET);
911+
st.getChildren().add(ftEdge1);
912+
//</editor-fold>
834913
FillTransition ft1 = new FillTransition(Duration.millis(time), v.circle);
835914
ft1.setToValue(Color.BLUEVIOLET);
836915
ft1.setOnFinished(ev -> {

src/fxsimulator/Edge.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,20 @@
55
*/
66
package fxsimulator;
77

8+
import javafx.scene.shape.Shape;
9+
810
/**
911
*
1012
* @author sowme
1113
*/
1214
public class Edge {
13-
public final Node target;
15+
public final Node source, target;
1416
public final double weight;
15-
16-
public Edge(Node argTarget) {
17-
target = argTarget; weight = 0;
17+
public Shape line;
18+
public Edge(Node argSource, Node argTarget) {
19+
source = argSource; target = argTarget; weight = 0;
1820
}
19-
public Edge(Node argTarget, double argWeight) {
20-
target = argTarget; weight = argWeight;
21+
public Edge(Node argSource, Node argTarget, double argWeight, Shape argline) {
22+
source = argSource; target = argTarget; weight = argWeight; line = argline;
2123
}
2224
}

src/res/pause_black_48x48.png

101 Bytes
Loading

src/res/play_arrow_black_48x48.png

208 Bytes
Loading

0 commit comments

Comments
 (0)