mirror of
https://gitlab.com/kauron/jstudy
synced 2024-12-22 16:33:33 +01:00
Test: option to lock switching tabs
This commit is contained in:
parent
0d4b50a78c
commit
d3d07b7541
4 changed files with 16 additions and 5 deletions
|
@ -7,6 +7,7 @@ import javafx.application.Platform;
|
||||||
import javafx.beans.binding.Bindings;
|
import javafx.beans.binding.Bindings;
|
||||||
import javafx.beans.property.BooleanProperty;
|
import javafx.beans.property.BooleanProperty;
|
||||||
import javafx.beans.property.SimpleBooleanProperty;
|
import javafx.beans.property.SimpleBooleanProperty;
|
||||||
|
import javafx.collections.ListChangeListener;
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.event.Event;
|
import javafx.event.Event;
|
||||||
import javafx.event.EventHandler;
|
import javafx.event.EventHandler;
|
||||||
|
@ -55,14 +56,20 @@ public class Controller implements Initializable {
|
||||||
private final BooleanProperty tabIsTable = new SimpleBooleanProperty(false);
|
private final BooleanProperty tabIsTable = new SimpleBooleanProperty(false);
|
||||||
private final Map<Tab, TableController> tabMap = new HashMap<>();
|
private final Map<Tab, TableController> tabMap = new HashMap<>();
|
||||||
private String updateURL, updateFileName;
|
private String updateURL, updateFileName;
|
||||||
|
private Tab theTest = null;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL url, ResourceBundle resourceBundle) {
|
public void initialize(URL url, ResourceBundle resourceBundle) {
|
||||||
tabPane.getSelectionModel().selectedItemProperty().addListener((ob, o, n) -> {
|
tabPane.getSelectionModel().selectedItemProperty().addListener((ob, o, n) -> {
|
||||||
tabIsTable.set(tabMap.get(n) != null);
|
if (theTest == o && AppPrefs.lockTabsOnTest.get()) { // optionally disallow switching from test
|
||||||
menuCloseTab.setDisable(!n.isClosable());
|
tabPane.getSelectionModel().select(o);
|
||||||
menuSave.setDisable(!tabMap.containsKey(n) || tabMap.get(n).saved.get());
|
} else { // update if in table tab
|
||||||
|
tabIsTable.set(tabMap.get(n) != null);
|
||||||
|
menuCloseTab.setDisable(!n.isClosable());
|
||||||
|
menuSave.setDisable(!tabMap.containsKey(n) || tabMap.get(n).saved.get());
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
tabPane.getTabs().removeListener((ListChangeListener<Tab>) c -> theTest = null);
|
||||||
Platform.runLater(() ->
|
Platform.runLater(() ->
|
||||||
root.getScene().getWindow().setOnCloseRequest(event -> {
|
root.getScene().getWindow().setOnCloseRequest(event -> {
|
||||||
for (Tab tab : tabPane.getTabs()) {
|
for (Tab tab : tabPane.getTabs()) {
|
||||||
|
@ -316,7 +323,8 @@ public class Controller implements Initializable {
|
||||||
|
|
||||||
((TestController) loader.getController()).setList(new ArrayList<>(list));
|
((TestController) loader.getController()).setList(new ArrayList<>(list));
|
||||||
|
|
||||||
tabPane.getTabs().add(new Tab("Test: " + tabPane.getSelectionModel().getSelectedItem().getText(), root));
|
theTest = new Tab("Test: " + tabPane.getSelectionModel().getSelectedItem().getText(), root);
|
||||||
|
tabPane.getTabs().add(theTest);
|
||||||
tabPane.getSelectionModel().selectLast();
|
tabPane.getSelectionModel().selectLast();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
|
@ -10,7 +10,7 @@ import java.util.ResourceBundle;
|
||||||
|
|
||||||
public class SettingsController implements Initializable {
|
public class SettingsController implements Initializable {
|
||||||
@FXML
|
@FXML
|
||||||
private CheckBox repeatMistakes, showFeedback, repeatImmediately;
|
private CheckBox repeatMistakes, showFeedback, repeatImmediately, lockTabsOnTest;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL location, ResourceBundle resources) {
|
public void initialize(URL location, ResourceBundle resources) {
|
||||||
|
@ -18,6 +18,7 @@ public class SettingsController implements Initializable {
|
||||||
repeatImmediately.selectedProperty().bindBidirectional(AppPrefs.repeatImmediately);
|
repeatImmediately.selectedProperty().bindBidirectional(AppPrefs.repeatImmediately);
|
||||||
repeatMistakes.selectedProperty().bindBidirectional(AppPrefs.repeatWrong);
|
repeatMistakes.selectedProperty().bindBidirectional(AppPrefs.repeatWrong);
|
||||||
showFeedback.selectedProperty().bindBidirectional(AppPrefs.showFeedback);
|
showFeedback.selectedProperty().bindBidirectional(AppPrefs.showFeedback);
|
||||||
|
lockTabsOnTest.selectedProperty().bindBidirectional(AppPrefs.lockTabsOnTest);
|
||||||
repeatMistakes.selectedProperty().addListener((obj, o, n) -> {
|
repeatMistakes.selectedProperty().addListener((obj, o, n) -> {
|
||||||
if (!n) repeatImmediately.setSelected(false);
|
if (!n) repeatImmediately.setSelected(false);
|
||||||
});
|
});
|
||||||
|
|
|
@ -13,6 +13,7 @@ public class AppPrefs {
|
||||||
public static final BooleanPref repeatWrong = new BooleanPref(false, "repeatWrong");
|
public static final BooleanPref repeatWrong = new BooleanPref(false, "repeatWrong");
|
||||||
public static final BooleanPref showFeedback = new BooleanPref(true, "showFeedback");
|
public static final BooleanPref showFeedback = new BooleanPref(true, "showFeedback");
|
||||||
public static final BooleanPref repeatImmediately = new BooleanPref(false, "repeatImmediately");
|
public static final BooleanPref repeatImmediately = new BooleanPref(false, "repeatImmediately");
|
||||||
|
public static final BooleanPref lockTabsOnTest = new BooleanPref(false, "lockTabsOnTest");
|
||||||
public static File lastDir;
|
public static File lastDir;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
<CheckBox fx:id="repeatMistakes" text="_Repeat mistakes"/>
|
<CheckBox fx:id="repeatMistakes" text="_Repeat mistakes"/>
|
||||||
<CheckBox fx:id="repeatImmediately" text="_Always repeat immediately"/>
|
<CheckBox fx:id="repeatImmediately" text="_Always repeat immediately"/>
|
||||||
<CheckBox fx:id="showFeedback" text="Show _feedback while testing"/>
|
<CheckBox fx:id="showFeedback" text="Show _feedback while testing"/>
|
||||||
|
<CheckBox fx:id="lockTabsOnTest" text="Don't allow tab switching when on a test"/>
|
||||||
</children>
|
</children>
|
||||||
<padding>
|
<padding>
|
||||||
<Insets bottom="15.0" left="15.0" right="15.0" top="15.0"/>
|
<Insets bottom="15.0" left="15.0" right="15.0" top="15.0"/>
|
||||||
|
|
Loading…
Reference in a new issue