Make paused checkboxes clickable
This commit is contained in:
parent
ecf9fc2746
commit
0e627aef12
|
@ -3,6 +3,7 @@ package ctbrec.ui;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.security.InvalidKeyException;
|
import java.security.InvalidKeyException;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
@ -104,45 +105,50 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
scrollPane.setFitToWidth(true);
|
scrollPane.setFitToWidth(true);
|
||||||
BorderPane.setMargin(scrollPane, new Insets(5));
|
BorderPane.setMargin(scrollPane, new Insets(5));
|
||||||
|
|
||||||
table.setEditable(false);
|
table.setEditable(true);
|
||||||
table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
|
table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
|
||||||
TableColumn<JavaFxModel, String> name = new TableColumn<>("Model");
|
TableColumn<JavaFxModel, String> name = new TableColumn<>("Model");
|
||||||
name.setPrefWidth(200);
|
name.setPrefWidth(200);
|
||||||
name.setCellValueFactory(new PropertyValueFactory<JavaFxModel, String>("name"));
|
name.setCellValueFactory(new PropertyValueFactory<JavaFxModel, String>("name"));
|
||||||
|
name.setEditable(false);
|
||||||
TableColumn<JavaFxModel, String> url = new TableColumn<>("URL");
|
TableColumn<JavaFxModel, String> url = new TableColumn<>("URL");
|
||||||
url.setCellValueFactory(new PropertyValueFactory<JavaFxModel, String>("url"));
|
url.setCellValueFactory(new PropertyValueFactory<JavaFxModel, String>("url"));
|
||||||
url.setPrefWidth(400);
|
url.setPrefWidth(400);
|
||||||
|
url.setEditable(false);
|
||||||
TableColumn<JavaFxModel, Boolean> online = new TableColumn<>("Online");
|
TableColumn<JavaFxModel, Boolean> online = new TableColumn<>("Online");
|
||||||
online.setCellValueFactory((cdf) -> cdf.getValue().getOnlineProperty());
|
online.setCellValueFactory((cdf) -> cdf.getValue().getOnlineProperty());
|
||||||
online.setCellFactory(CheckBoxTableCell.forTableColumn(online));
|
online.setCellFactory(CheckBoxTableCell.forTableColumn(online));
|
||||||
online.setPrefWidth(100);
|
online.setPrefWidth(100);
|
||||||
|
online.setEditable(false);
|
||||||
TableColumn<JavaFxModel, Boolean> recording = new TableColumn<>("Recording");
|
TableColumn<JavaFxModel, Boolean> recording = new TableColumn<>("Recording");
|
||||||
recording.setCellValueFactory((cdf) -> cdf.getValue().getRecordingProperty());
|
recording.setCellValueFactory((cdf) -> cdf.getValue().getRecordingProperty());
|
||||||
recording.setCellFactory(CheckBoxTableCell.forTableColumn(recording));
|
recording.setCellFactory(CheckBoxTableCell.forTableColumn(recording));
|
||||||
recording.setPrefWidth(100);
|
recording.setPrefWidth(100);
|
||||||
|
recording.setEditable(false);
|
||||||
TableColumn<JavaFxModel, Boolean> paused = new TableColumn<>("Paused");
|
TableColumn<JavaFxModel, Boolean> paused = new TableColumn<>("Paused");
|
||||||
paused.setCellValueFactory((cdf) -> cdf.getValue().getPausedProperty());
|
paused.setCellValueFactory((cdf) -> cdf.getValue().getPausedProperty());
|
||||||
paused.setCellFactory(CheckBoxTableCell.forTableColumn(paused));
|
paused.setCellFactory(CheckBoxTableCell.forTableColumn(paused));
|
||||||
paused.setPrefWidth(100);
|
paused.setPrefWidth(100);
|
||||||
|
paused.setEditable(true);
|
||||||
table.getColumns().addAll(name, url, online, recording, paused);
|
table.getColumns().addAll(name, url, online, recording, paused);
|
||||||
table.setItems(observableModels);
|
table.setItems(observableModels);
|
||||||
table.addEventHandler(ContextMenuEvent.CONTEXT_MENU_REQUESTED, event -> {
|
table.addEventHandler(ContextMenuEvent.CONTEXT_MENU_REQUESTED, event -> {
|
||||||
popup = createContextMenu();
|
popup = createContextMenu();
|
||||||
if(popup != null) {
|
if (popup != null) {
|
||||||
popup.show(table, event.getScreenX(), event.getScreenY());
|
popup.show(table, event.getScreenX(), event.getScreenY());
|
||||||
}
|
}
|
||||||
event.consume();
|
event.consume();
|
||||||
});
|
});
|
||||||
table.addEventHandler(MouseEvent.MOUSE_PRESSED, event -> {
|
table.addEventHandler(MouseEvent.MOUSE_PRESSED, event -> {
|
||||||
if(popup != null) {
|
if (popup != null) {
|
||||||
popup.hide();
|
popup.hide();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
table.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
|
table.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
|
||||||
List<JavaFxModel> selectedModels = table.getSelectionModel().getSelectedItems();
|
List<JavaFxModel> selectedModels = table.getSelectionModel().getSelectedItems();
|
||||||
if(event.getCode() == KeyCode.DELETE) {
|
if (event.getCode() == KeyCode.DELETE) {
|
||||||
stopAction(selectedModels);
|
stopAction(selectedModels);
|
||||||
} else if(event.getCode() == KeyCode.P) {
|
} else if (event.getCode() == KeyCode.P) {
|
||||||
List<JavaFxModel> pausedModels = selectedModels.stream().filter(m -> m.isSuspended()).collect(Collectors.toList());
|
List<JavaFxModel> pausedModels = selectedModels.stream().filter(m -> m.isSuspended()).collect(Collectors.toList());
|
||||||
List<JavaFxModel> runningModels = selectedModels.stream().filter(m -> !m.isSuspended()).collect(Collectors.toList());
|
List<JavaFxModel> runningModels = selectedModels.stream().filter(m -> !m.isSuspended()).collect(Collectors.toList());
|
||||||
resumeRecording(pausedModels);
|
resumeRecording(pausedModels);
|
||||||
|
@ -179,11 +185,11 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
|
|
||||||
private void addModel(ActionEvent e) {
|
private void addModel(ActionEvent e) {
|
||||||
String input = model.getText();
|
String input = model.getText();
|
||||||
if(StringUtil.isBlank(input)) {
|
if (StringUtil.isBlank(input)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(input.startsWith("http")) {
|
if (input.startsWith("http")) {
|
||||||
addModelByUrl(input);
|
addModelByUrl(input);
|
||||||
} else {
|
} else {
|
||||||
addModelByName(input);
|
addModelByName(input);
|
||||||
|
@ -193,7 +199,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
private void addModelByUrl(String url) {
|
private void addModelByUrl(String url) {
|
||||||
for (Site site : sites) {
|
for (Site site : sites) {
|
||||||
Model model = site.createModelFromUrl(url);
|
Model model = site.createModelFromUrl(url);
|
||||||
if(model != null) {
|
if (model != null) {
|
||||||
try {
|
try {
|
||||||
recorder.startRecording(model);
|
recorder.startRecording(model);
|
||||||
} catch (IOException | InvalidKeyException | NoSuchAlgorithmException | IllegalStateException e1) {
|
} catch (IOException | InvalidKeyException | NoSuchAlgorithmException | IllegalStateException e1) {
|
||||||
|
@ -291,7 +297,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
updateService.setPeriod(new Duration(TimeUnit.SECONDS.toMillis(2)));
|
updateService.setPeriod(new Duration(TimeUnit.SECONDS.toMillis(2)));
|
||||||
updateService.setOnSucceeded((event) -> {
|
updateService.setOnSucceeded((event) -> {
|
||||||
List<JavaFxModel> models = updateService.getValue();
|
List<JavaFxModel> models = updateService.getValue();
|
||||||
if(models == null) {
|
if (models == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -299,6 +305,13 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
int index = observableModels.indexOf(updatedModel);
|
int index = observableModels.indexOf(updatedModel);
|
||||||
if (index == -1) {
|
if (index == -1) {
|
||||||
observableModels.add(updatedModel);
|
observableModels.add(updatedModel);
|
||||||
|
updatedModel.getPausedProperty().addListener((obs, oldV, newV) -> {
|
||||||
|
if(newV) {
|
||||||
|
pauseRecording(Collections.singletonList(updatedModel));
|
||||||
|
} else {
|
||||||
|
resumeRecording(Collections.singletonList(updatedModel));
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
// make sure to update the JavaFX online property, so that the table cell is updated
|
// make sure to update the JavaFX online property, so that the table cell is updated
|
||||||
JavaFxModel oldModel = observableModels.get(index);
|
JavaFxModel oldModel = observableModels.get(index);
|
||||||
|
@ -387,7 +400,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
|
|
||||||
private ContextMenu createContextMenu() {
|
private ContextMenu createContextMenu() {
|
||||||
ObservableList<JavaFxModel> selectedModels = table.getSelectionModel().getSelectedItems();
|
ObservableList<JavaFxModel> selectedModels = table.getSelectionModel().getSelectedItems();
|
||||||
if(selectedModels.isEmpty()) {
|
if (selectedModels.isEmpty()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
MenuItem stop = new MenuItem("Remove Model");
|
MenuItem stop = new MenuItem("Remove Model");
|
||||||
|
@ -414,14 +427,14 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
switchStreamSource.setOnAction((e) -> switchStreamSource(selectedModels.get(0)));
|
switchStreamSource.setOnAction((e) -> switchStreamSource(selectedModels.get(0)));
|
||||||
|
|
||||||
ContextMenu menu = new ContextMenu(stop);
|
ContextMenu menu = new ContextMenu(stop);
|
||||||
if(selectedModels.size() == 1) {
|
if (selectedModels.size() == 1) {
|
||||||
menu.getItems().add(selectedModels.get(0).isSuspended() ? resumeRecording : pauseRecording);
|
menu.getItems().add(selectedModels.get(0).isSuspended() ? resumeRecording : pauseRecording);
|
||||||
} else {
|
} else {
|
||||||
menu.getItems().addAll(resumeRecording, pauseRecording);
|
menu.getItems().addAll(resumeRecording, pauseRecording);
|
||||||
}
|
}
|
||||||
menu.getItems().addAll(copyUrl, openInPlayer, openInBrowser, switchStreamSource);
|
menu.getItems().addAll(copyUrl, openInPlayer, openInBrowser, switchStreamSource);
|
||||||
|
|
||||||
if(selectedModels.size() > 1) {
|
if (selectedModels.size() > 1) {
|
||||||
copyUrl.setDisable(true);
|
copyUrl.setDisable(true);
|
||||||
openInPlayer.setDisable(true);
|
openInPlayer.setDisable(true);
|
||||||
openInBrowser.setDisable(true);
|
openInBrowser.setDisable(true);
|
||||||
|
@ -436,7 +449,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
new Thread(() -> {
|
new Thread(() -> {
|
||||||
boolean started = Player.play(selectedModel);
|
boolean started = Player.play(selectedModel);
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
if(started && Config.getInstance().getSettings().showPlayerStarting) {
|
if (started && Config.getInstance().getSettings().showPlayerStarting) {
|
||||||
Toast.makeText(getTabPane().getScene(), "Starting Player", 2000, 500, 500);
|
Toast.makeText(getTabPane().getScene(), "Starting Player", 2000, 500, 500);
|
||||||
}
|
}
|
||||||
table.setCursor(Cursor.DEFAULT);
|
table.setCursor(Cursor.DEFAULT);
|
||||||
|
@ -446,7 +459,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
|
|
||||||
private void switchStreamSource(JavaFxModel fxModel) {
|
private void switchStreamSource(JavaFxModel fxModel) {
|
||||||
try {
|
try {
|
||||||
if(!fxModel.isOnline()) {
|
if (!fxModel.isOnline()) {
|
||||||
Alert alert = new AutosizeAlert(Alert.AlertType.INFORMATION);
|
Alert alert = new AutosizeAlert(Alert.AlertType.INFORMATION);
|
||||||
alert.setTitle("Switch resolution");
|
alert.setTitle("Switch resolution");
|
||||||
alert.setHeaderText("Couldn't switch stream resolution");
|
alert.setHeaderText("Couldn't switch stream resolution");
|
||||||
|
@ -533,7 +546,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void saveState() {
|
public void saveState() {
|
||||||
if(!table.getSortOrder().isEmpty()) {
|
if (!table.getSortOrder().isEmpty()) {
|
||||||
TableColumn<JavaFxModel, ?> col = table.getSortOrder().get(0);
|
TableColumn<JavaFxModel, ?> col = table.getSortOrder().get(0);
|
||||||
Config.getInstance().getSettings().recordedModelsSortColumn = col.getText();
|
Config.getInstance().getSettings().recordedModelsSortColumn = col.getText();
|
||||||
Config.getInstance().getSettings().recordedModelsSortType = col.getSortType().toString();
|
Config.getInstance().getSettings().recordedModelsSortType = col.getSortType().toString();
|
||||||
|
@ -547,9 +560,9 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
|
|
||||||
private void restoreState() {
|
private void restoreState() {
|
||||||
String sortCol = Config.getInstance().getSettings().recordedModelsSortColumn;
|
String sortCol = Config.getInstance().getSettings().recordedModelsSortColumn;
|
||||||
if(StringUtil.isNotBlank(sortCol)) {
|
if (StringUtil.isNotBlank(sortCol)) {
|
||||||
for (TableColumn<JavaFxModel, ?> col : table.getColumns()) {
|
for (TableColumn<JavaFxModel, ?> col : table.getColumns()) {
|
||||||
if(Objects.equals(sortCol, col.getText())) {
|
if (Objects.equals(sortCol, col.getText())) {
|
||||||
col.setSortType(SortType.valueOf(Config.getInstance().getSettings().recordedModelsSortType));
|
col.setSortType(SortType.valueOf(Config.getInstance().getSettings().recordedModelsSortType));
|
||||||
table.getSortOrder().clear();
|
table.getSortOrder().clear();
|
||||||
table.getSortOrder().add(col);
|
table.getSortOrder().add(col);
|
||||||
|
@ -559,7 +572,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
double[] columnWidths = Config.getInstance().getSettings().recordedModelsColumnWidths;
|
double[] columnWidths = Config.getInstance().getSettings().recordedModelsColumnWidths;
|
||||||
if(columnWidths != null && columnWidths.length == table.getColumns().size()) {
|
if (columnWidths != null && columnWidths.length == table.getColumns().size()) {
|
||||||
for (int i = 0; i < columnWidths.length; i++) {
|
for (int i = 0; i < columnWidths.length; i++) {
|
||||||
table.getColumns().get(i).setPrefWidth(columnWidths[i]);
|
table.getColumns().get(i).setPrefWidth(columnWidths[i]);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue