Add validation to actions panel
This commit is contained in:
parent
86ae660218
commit
878b25c55c
|
@ -23,9 +23,11 @@ public class Wizard extends BorderPane {
|
||||||
private Button prev;
|
private Button prev;
|
||||||
private Button finish;
|
private Button finish;
|
||||||
private boolean cancelled = true;
|
private boolean cancelled = true;
|
||||||
|
private Runnable validator;
|
||||||
|
|
||||||
public Wizard(Stage stage, Pane... pages) {
|
public Wizard(Stage stage, Runnable validator, Pane... pages) {
|
||||||
this.stage = stage;
|
this.stage = stage;
|
||||||
|
this.validator = validator;
|
||||||
this.pages = pages;
|
this.pages = pages;
|
||||||
|
|
||||||
if (pages.length == 0) {
|
if (pages.length == 0) {
|
||||||
|
@ -49,6 +51,14 @@ public class Wizard extends BorderPane {
|
||||||
cancel.setOnAction(evt -> stage.close());
|
cancel.setOnAction(evt -> stage.close());
|
||||||
finish = new Button("Finish");
|
finish = new Button("Finish");
|
||||||
finish.setOnAction(evt -> {
|
finish.setOnAction(evt -> {
|
||||||
|
if(validator != null) {
|
||||||
|
try {
|
||||||
|
validator.run();
|
||||||
|
} catch(IllegalStateException e) {
|
||||||
|
Dialogs.showError("Settings invalid", e.getMessage(), null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
cancelled = false;
|
cancelled = false;
|
||||||
stage.close();
|
stage.close();
|
||||||
});
|
});
|
||||||
|
|
|
@ -16,6 +16,7 @@ import ctbrec.Config;
|
||||||
import ctbrec.Model;
|
import ctbrec.Model;
|
||||||
import ctbrec.OS;
|
import ctbrec.OS;
|
||||||
import ctbrec.Recording;
|
import ctbrec.Recording;
|
||||||
|
import ctbrec.StringUtil;
|
||||||
import ctbrec.event.Event;
|
import ctbrec.event.Event;
|
||||||
import ctbrec.event.EventBusHolder;
|
import ctbrec.event.EventBusHolder;
|
||||||
import ctbrec.event.EventHandler;
|
import ctbrec.event.EventHandler;
|
||||||
|
@ -128,7 +129,7 @@ public class ActionSettingsPanel extends TitledPane {
|
||||||
dialog.setTitle("New Action");
|
dialog.setTitle("New Action");
|
||||||
InputStream icon = getClass().getResourceAsStream("/icon.png");
|
InputStream icon = getClass().getResourceAsStream("/icon.png");
|
||||||
dialog.getIcons().add(new Image(icon));
|
dialog.getIcons().add(new Image(icon));
|
||||||
Wizard root = new Wizard(dialog, actionPane);
|
Wizard root = new Wizard(dialog, this::validateSettings, actionPane);
|
||||||
Scene scene = new Scene(root, 800, 540);
|
Scene scene = new Scene(root, 800, 540);
|
||||||
scene.getStylesheets().addAll(getScene().getStylesheets());
|
scene.getStylesheets().addAll(getScene().getStylesheets());
|
||||||
dialog.setScene(scene);
|
dialog.setScene(scene);
|
||||||
|
@ -193,6 +194,21 @@ public class ActionSettingsPanel extends TitledPane {
|
||||||
LOG.debug("Registered event handler for {} {}", config.getEvent(), config.getName());
|
LOG.debug("Registered event handler for {} {}", config.getEvent(), config.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void validateSettings() {
|
||||||
|
if(StringUtil.isBlank(name.getText())) {
|
||||||
|
throw new IllegalStateException("Name cannot be empty");
|
||||||
|
}
|
||||||
|
if(event.getValue() == Event.Type.MODEL_STATUS_CHANGED && modelState.getValue() == null) {
|
||||||
|
throw new IllegalStateException("Select a state");
|
||||||
|
}
|
||||||
|
if(modelSelectionPane.getSelectedItems().isEmpty() && !modelSelectionPane.isAllSelected()) {
|
||||||
|
throw new IllegalStateException("Select one or more models or tick off \"all\"");
|
||||||
|
}
|
||||||
|
if(!(showNotification.isSelected() || playSound.isSelected() || executeProgram.isSelected())) {
|
||||||
|
throw new IllegalStateException("No action selected");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void delete(ActionEvent evt) {
|
private void delete(ActionEvent evt) {
|
||||||
List<EventHandlerConfiguration> selected = new ArrayList<>(actionTable.getSelectionModel().getSelectedItems());
|
List<EventHandlerConfiguration> selected = new ArrayList<>(actionTable.getSelectionModel().getSelectedItems());
|
||||||
for (EventHandlerConfiguration config : selected) {
|
for (EventHandlerConfiguration config : selected) {
|
||||||
|
|
Loading…
Reference in New Issue