From ed7d60800b674bae90db1a930b3ce12ef5bff36d Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Mon, 7 Aug 2017 10:30:37 -0700 Subject: [PATCH] Read delay input from input field, and kill delay thread. --- .../org/nwapw/abacus/fx/AbacusController.java | 37 +++++++++++++++---- src/main/resources/abacus.fxml | 4 +- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/nwapw/abacus/fx/AbacusController.java b/src/main/java/org/nwapw/abacus/fx/AbacusController.java index 6b5aae3..f3f2acc 100644 --- a/src/main/java/org/nwapw/abacus/fx/AbacusController.java +++ b/src/main/java/org/nwapw/abacus/fx/AbacusController.java @@ -1,6 +1,8 @@ package org.nwapw.abacus.fx; import javafx.application.Platform; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; @@ -89,6 +91,8 @@ public class AbacusController implements PluginListener { private ComboBox numberImplementationBox; @FXML private ListView enabledPluginView; + @FXML + private TextField computationLimitField; /** * The list of history entries, created by the users. @@ -130,12 +134,10 @@ public class AbacusController implements PluginListener { private final Runnable TIMER_RUNNABLE = () -> { try { Configuration abacusConfig = abacus.getConfiguration(); - if(abacusConfig.getComputationDelay() != 0) + if(abacusConfig.getComputationDelay() == 0) return; Thread.sleep((long) (abacusConfig.getComputationDelay() * 1000)); - } catch (InterruptedException e) { - e.printStackTrace(); - } - performStop(); + performStop(); + } catch (InterruptedException e) { } }; /** * The runnable used to perform the calculation. @@ -174,6 +176,7 @@ public class AbacusController implements PluginListener { }); } }; + private Thread computationLimitThread; /** * The thread in which the computation runs. */ @@ -237,6 +240,15 @@ public class AbacusController implements PluginListener { } abacusPluginManager.reload(); + computationLimitField.setText(Double.toString(abacus.getConfiguration().getComputationDelay())); + computationLimitField.textProperty().addListener((observable, oldValue, newValue) -> { + if(!newValue.matches("(\\d+(\\.\\d*)?)?")) { + computationLimitField.setText(oldValue); + } else { + changesMade = true; + } + }); + changesMade = false; reloadAlertShown = false; @@ -252,13 +264,20 @@ public class AbacusController implements PluginListener { stopButton.setDisable(false); calculationThread = new Thread(CALCULATION_RUNNABLE); calculationThread.start(); - new Thread(TIMER_RUNNABLE).start(); + computationLimitThread = new Thread(TIMER_RUNNABLE); + computationLimitThread.start(); } @FXML private void performStop(){ - if(calculationThread != null) + if(calculationThread != null) { calculationThread.interrupt(); + calculationThread = null; + } + if(computationLimitThread != null){ + computationLimitThread.interrupt(); + computationLimitThread = null; + } } @FXML @@ -284,6 +303,9 @@ public class AbacusController implements PluginListener { for (ToggleablePlugin pluginEntry : enabledPlugins) { if (!pluginEntry.isEnabled()) disabledPlugins.add(pluginEntry.getClassName()); } + if(computationLimitField.getText().matches("\\d*(\\.\\d+)?") && computationLimitField.getText().length() != 0) + configuration.setComputationDelay(Double.parseDouble(computationLimitField.getText())); + System.out.println(configuration.getComputationDelay()); configuration.saveTo(CONFIG_FILE); changesMade = false; reloadAlertShown = false; @@ -310,4 +332,5 @@ public class AbacusController implements PluginListener { enabledPlugins.clear(); numberImplementationOptions.clear(); } + } diff --git a/src/main/resources/abacus.fxml b/src/main/resources/abacus.fxml index 495c654..495187c 100644 --- a/src/main/resources/abacus.fxml +++ b/src/main/resources/abacus.fxml @@ -50,7 +50,9 @@ - + +