From ed17ebce4942511f7059bb9834185f68285bb81a Mon Sep 17 00:00:00 2001 From: clfreville2 Date: Thu, 15 Dec 2022 11:57:39 +0100 Subject: [PATCH] Make the update interval configurable --- resources/windows/MainWindows.fxml | 54 ++++++++++++------- .../uca/iut/clfreville2/gui/MainWindows.java | 15 ++++++ .../iut/clfreville2/gui/thread/Ticker.java | 19 ++++++- 3 files changed, 69 insertions(+), 19 deletions(-) diff --git a/resources/windows/MainWindows.fxml b/resources/windows/MainWindows.fxml index b872f9d..001e922 100644 --- a/resources/windows/MainWindows.fxml +++ b/resources/windows/MainWindows.fxml @@ -8,21 +8,39 @@ - - - - - - - - - - - - - - - - - - + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + Millis per tick : + + + + + + + + +
diff --git a/src/fr/uca/iut/clfreville2/gui/MainWindows.java b/src/fr/uca/iut/clfreville2/gui/MainWindows.java index 13ff9d9..ae6e6fb 100644 --- a/src/fr/uca/iut/clfreville2/gui/MainWindows.java +++ b/src/fr/uca/iut/clfreville2/gui/MainWindows.java @@ -11,8 +11,10 @@ import fr.uca.iut.clfreville2.model.sensor.Sensor; import fr.uca.iut.clfreville2.persistence.StubSensorRegistryLoader; import javafx.fxml.FXML; import javafx.scene.control.Button; +import javafx.scene.control.CheckBox; import javafx.scene.control.ListView; import javafx.scene.control.Slider; +import javafx.scene.control.Spinner; import javafx.scene.control.TextField; import javafx.scene.image.ImageView; import javafx.scene.text.Text; @@ -40,6 +42,12 @@ public class MainWindows { @FXML private Button visualizeBtn; + @FXML + private Spinner updateInterval; + + @FXML + private CheckBox autoUpdate; + public MainWindows(Stage primaryStage) { this.ticker = new Ticker(registry); this.modalFactory = new ModalFactory(primaryStage); @@ -84,6 +92,7 @@ public class MainWindows { private void initialize() { bindSensorList(); bindActiveButtons(); + bindUpdate(); } @FXML @@ -113,6 +122,12 @@ public class MainWindows { visualizeBtn.visibleProperty().bind(sensorsList.getSelectionModel().selectedItemProperty().isNotNull()); } + @FXML + private void bindUpdate() { + updateInterval.getValueFactory().valueProperty().bindBidirectional(ticker.millisPerTickProperty().asObject()); + autoUpdate.selectedProperty().bindBidirectional(ticker.runningProperty()); + } + private Sensor getSelectedSensor() { return sensorsList.getSelectionModel().getSelectedItem(); } diff --git a/src/fr/uca/iut/clfreville2/gui/thread/Ticker.java b/src/fr/uca/iut/clfreville2/gui/thread/Ticker.java index 355460a..40a725f 100644 --- a/src/fr/uca/iut/clfreville2/gui/thread/Ticker.java +++ b/src/fr/uca/iut/clfreville2/gui/thread/Ticker.java @@ -2,13 +2,16 @@ package fr.uca.iut.clfreville2.gui.thread; import fr.uca.iut.clfreville2.model.shared.Tickable; import javafx.application.Platform; +import javafx.beans.property.BooleanProperty; import javafx.beans.property.IntegerProperty; +import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleIntegerProperty; public class Ticker extends Thread { private final Tickable tickable; private final IntegerProperty millisPerTick = new SimpleIntegerProperty(250); + private final BooleanProperty running = new SimpleBooleanProperty(true); public Ticker(Tickable tickable) { this.tickable = tickable; @@ -19,7 +22,9 @@ public class Ticker extends Thread { while (true) { try { Thread.sleep(millisPerTick.getValue()); - Platform.runLater(tickable::tick); + if (running.get()) { + Platform.runLater(tickable::tick); + } } catch (InterruptedException e) { break; } @@ -37,4 +42,16 @@ public class Ticker extends Thread { public IntegerProperty millisPerTickProperty() { return millisPerTick; } + + public void setRunning(boolean running) { + this.running.setValue(running); + } + + public boolean getRunning() { + return running.getValue(); + } + + public BooleanProperty runningProperty() { + return running; + } }