forked from j62/ctbrec
1
0
Fork 0

Add checkbox to post-processing steps to disable them

This commit is contained in:
0xb00bface 2023-02-19 20:11:25 +01:00
parent 519e6a49f3
commit 9df466f0ea
3 changed files with 81 additions and 52 deletions

View File

@ -4,7 +4,12 @@ import ctbrec.recorder.postprocessing.*;
import ctbrec.ui.controls.Dialogs; import ctbrec.ui.controls.Dialogs;
import ctbrec.ui.settings.api.Preferences; import ctbrec.ui.settings.api.Preferences;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.geometry.VPos;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Region; import javafx.scene.layout.Region;
import java.io.IOException; import java.io.IOException;
@ -16,6 +21,7 @@ import java.util.Optional;
public class PostProcessingDialogFactory { public class PostProcessingDialogFactory {
static Map<Class<?>, Class<?>> ppToDialogMap = new HashMap<>(); static Map<Class<?>, Class<?>> ppToDialogMap = new HashMap<>();
static { static {
ppToDialogMap.put(Remux.class, RemuxerPaneFactory.class); ppToDialogMap.put(Remux.class, RemuxerPaneFactory.class);
ppToDialogMap.put(Script.class, ScriptPaneFactory.class); ppToDialogMap.put(Script.class, ScriptPaneFactory.class);
@ -43,7 +49,16 @@ public class PostProcessingDialogFactory {
if (preferences.isPresent()) { if (preferences.isPresent()) {
Region view = preferences.get().getView(false); Region view = preferences.get().getView(false);
view.setMinWidth(600); view.setMinWidth(600);
ok = Dialogs.showCustomInput(scene, "Configure " + pp.getName(), view); CheckBox enabledCheckbox = new CheckBox("Enabled");
enabledCheckbox.setSelected(pp.isEnabled());
enabledCheckbox.selectedProperty().addListener((src, oldV, newV) -> pp.setEnabled(newV));
GridPane container = new GridPane();
container.add(enabledCheckbox, 0, 0);
container.add(view, 0, 1);
GridPane.setMargin(enabledCheckbox, new Insets(0, 0, 10, 0));
GridPane.setValignment(view, VPos.CENTER);
GridPane.setHalignment(view, HPos.CENTER);
ok = Dialogs.showCustomInput(scene, "Configure " + pp.getName(), container);
if (ok) { if (ok) {
preferences.get().save(); preferences.get().save();
if (newEntry) { if (newEntry) {

View File

@ -1,36 +1,27 @@
package ctbrec.ui.settings; package ctbrec.ui.settings;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.util.Optional;
import ctbrec.Config; import ctbrec.Config;
import ctbrec.recorder.postprocessing.Copy; import ctbrec.recorder.postprocessing.*;
import ctbrec.recorder.postprocessing.CreateContactSheet;
import ctbrec.recorder.postprocessing.DeleteOriginal;
import ctbrec.recorder.postprocessing.DeleteTooShort;
import ctbrec.recorder.postprocessing.Move;
import ctbrec.recorder.postprocessing.PostProcessor;
import ctbrec.recorder.postprocessing.RemoveKeepFile;
import ctbrec.recorder.postprocessing.Remux;
import ctbrec.recorder.postprocessing.Rename;
import ctbrec.recorder.postprocessing.Script;
import ctbrec.ui.controls.Dialogs; import ctbrec.ui.controls.Dialogs;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener; import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.geometry.Insets; import javafx.geometry.Insets;
import javafx.scene.control.Button; import javafx.scene.control.*;
import javafx.scene.control.ChoiceDialog; import javafx.scene.control.cell.CheckBoxTableCell;
import javafx.scene.control.ListView;
import javafx.scene.control.Tooltip;
import javafx.scene.image.Image; import javafx.scene.image.Image;
import javafx.scene.layout.GridPane; import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority; import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.util.Optional;
public class PostProcessingStepPanel extends GridPane { public class PostProcessingStepPanel extends GridPane {
private final Config config; private final Config config;
@ -47,7 +38,7 @@ public class PostProcessingStepPanel extends GridPane {
CreateContactSheet.class CreateContactSheet.class
}; // @formatter: on }; // @formatter: on
ListView<PostProcessor> stepListView; TableView<PostProcessor> stepView;
ObservableList<PostProcessor> stepList; ObservableList<PostProcessor> stepList;
Button up; Button up;
@ -74,21 +65,35 @@ public class PostProcessingStepPanel extends GridPane {
var buttons = new VBox(5, add, edit, up, down, remove); var buttons = new VBox(5, add, edit, up, down, remove);
stepList = FXCollections.observableList(config.getSettings().postProcessors); stepList = FXCollections.observableList(config.getSettings().postProcessors);
stepList.addListener((ListChangeListener<PostProcessor>) change -> { stepList.addListener((ListChangeListener<PostProcessor>) change -> safelySaveConfig());
try { stepView = new TableView<>(stepList);
config.save(); stepView.setEditable(true);
} catch (IOException e) { stepView.setStyle("-fx-table-cell-border-color: transparent;");
Dialogs.showError(getScene(), "Couldn't save configuration", "An error occurred while saving the configuration", e); var postProcessorColumn = new TableColumn<PostProcessor, String>("Step");
} postProcessorColumn.setCellValueFactory(cdf -> new SimpleStringProperty(cdf.getValue().getName()));
postProcessorColumn.setStyle("-fx-alignment: CENTER-LEFT;");
var enabledColumn = new TableColumn<PostProcessor, Boolean>("Enabled");
enabledColumn.setCellValueFactory(cdf -> {
var prop = new SimpleBooleanProperty(cdf.getValue().isEnabled());
prop.addListener((src, oldV, newV) -> {
cdf.getValue().setEnabled(newV);
safelySaveConfig();
}); });
stepListView = new ListView<>(stepList); return prop;
GridPane.setHgrow(stepListView, Priority.ALWAYS); });
GridPane.setFillWidth(stepListView, true); enabledColumn.setCellFactory(CheckBoxTableCell.forTableColumn(enabledColumn));
enabledColumn.setEditable(true);
enabledColumn.setStyle("-fx-alignment: CENTER;");
postProcessorColumn.prefWidthProperty().bind(stepView.widthProperty().subtract(enabledColumn.widthProperty()).subtract(5));
stepView.getColumns().add(enabledColumn);
stepView.getColumns().add(postProcessorColumn);
GridPane.setHgrow(stepView, Priority.ALWAYS);
GridPane.setFillWidth(stepView, true);
add(stepListView, 0, 0); add(stepView, 0, 0);
add(buttons, 1, 0); add(buttons, 1, 0);
stepListView.getSelectionModel().selectedIndexProperty().addListener((obs, oldV, newV) -> { stepView.getSelectionModel().selectedIndexProperty().addListener((obs, oldV, newV) -> {
var idx = newV.intValue(); var idx = newV.intValue();
boolean noSelection = idx == -1; boolean noSelection = idx == -1;
up.setDisable(noSelection || idx == 0); up.setDisable(noSelection || idx == 0);
@ -100,14 +105,22 @@ public class PostProcessingStepPanel extends GridPane {
setPadding(new Insets(10)); setPadding(new Insets(10));
} }
private void safelySaveConfig() {
try {
config.save();
} catch (IOException e) {
Dialogs.showError(getScene(), "Couldn't save configuration", "An error occurred while saving the configuration", e);
}
}
private Button createUpButton() { private Button createUpButton() {
var button = createButton("\u25B4", "Move step up"); var button = createButton("\u25B4", "Move step up");
button.setOnAction(evt -> { button.setOnAction(evt -> {
int idx = stepListView.getSelectionModel().getSelectedIndex(); int idx = stepView.getSelectionModel().getSelectedIndex();
PostProcessor selectedItem = stepListView.getSelectionModel().getSelectedItem(); PostProcessor selectedItem = stepView.getSelectionModel().getSelectedItem();
stepList.remove(idx); stepList.remove(idx);
stepList.add(idx - 1, selectedItem); stepList.add(idx - 1, selectedItem);
stepListView.getSelectionModel().select(idx - 1); stepView.getSelectionModel().select(idx - 1);
}); });
return button; return button;
} }
@ -115,11 +128,11 @@ public class PostProcessingStepPanel extends GridPane {
private Button createDownButton() { private Button createDownButton() {
var button = createButton("\u25BE", "Move step down"); var button = createButton("\u25BE", "Move step down");
button.setOnAction(evt -> { button.setOnAction(evt -> {
int idx = stepListView.getSelectionModel().getSelectedIndex(); int idx = stepView.getSelectionModel().getSelectedIndex();
PostProcessor selectedItem = stepListView.getSelectionModel().getSelectedItem(); PostProcessor selectedItem = stepView.getSelectionModel().getSelectedItem();
stepList.remove(idx); stepList.remove(idx);
stepList.add(idx + 1, selectedItem); stepList.add(idx + 1, selectedItem);
stepListView.getSelectionModel().select(idx + 1); stepView.getSelectionModel().select(idx + 1);
}); });
return button; return button;
} }
@ -175,7 +188,7 @@ public class PostProcessingStepPanel extends GridPane {
private Button createRemoveButton() { private Button createRemoveButton() {
var button = createButton("-", "Remove selected step"); var button = createButton("-", "Remove selected step");
button.setOnAction(evt -> { button.setOnAction(evt -> {
PostProcessor selectedItem = stepListView.getSelectionModel().getSelectedItem(); PostProcessor selectedItem = stepView.getSelectionModel().getSelectedItem();
if (selectedItem != null) { if (selectedItem != null) {
stepList.remove(selectedItem); stepList.remove(selectedItem);
} }
@ -186,9 +199,9 @@ public class PostProcessingStepPanel extends GridPane {
private Button createEditButton() { private Button createEditButton() {
var button = createButton("\u270E", "Edit selected step"); var button = createButton("\u270E", "Edit selected step");
button.setOnAction(evt -> { button.setOnAction(evt -> {
PostProcessor selectedItem = stepListView.getSelectionModel().getSelectedItem(); PostProcessor selectedItem = stepView.getSelectionModel().getSelectedItem();
PostProcessingDialogFactory.openEditDialog(selectedItem, getScene(), stepList); PostProcessingDialogFactory.openEditDialog(selectedItem, getScene(), stepList);
stepListView.refresh(); stepView.refresh();
saveConfig(); saveConfig();
}); });
return button; return button;

View File

@ -91,6 +91,7 @@ public class Preferences {
} }
}); });
categoryTree.getSelectionModel().select(0); categoryTree.getSelectionModel().select(0);
main.setBorder(Border.EMPTY);
return main; return main;
} }