forked from j62/ctbrec
Add notes column to recorded models tab
This commit is contained in:
parent
fb7953e045
commit
458e05d2b4
|
@ -26,6 +26,7 @@ import ctbrec.Recording;
|
|||
import ctbrec.StringUtil;
|
||||
import ctbrec.recorder.Recorder;
|
||||
import ctbrec.sites.Site;
|
||||
import ctbrec.ui.action.EditNotesAction;
|
||||
import ctbrec.ui.action.FollowAction;
|
||||
import ctbrec.ui.action.PauseAction;
|
||||
import ctbrec.ui.action.PlayAction;
|
||||
|
@ -34,6 +35,7 @@ import ctbrec.ui.action.StopRecordingAction;
|
|||
import ctbrec.ui.controls.AutoFillTextField;
|
||||
import ctbrec.ui.controls.SearchBox;
|
||||
import javafx.beans.property.SimpleStringProperty;
|
||||
import javafx.beans.property.StringPropertyBase;
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.concurrent.ScheduledService;
|
||||
|
@ -152,7 +154,30 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
|||
paused.setCellFactory(CheckBoxTableCell.forTableColumn(paused));
|
||||
paused.setPrefWidth(100);
|
||||
paused.setEditable(true);
|
||||
table.getColumns().addAll(preview, name, url, online, recording, paused);
|
||||
TableColumn<JavaFxModel, String> notes = new TableColumn<>("Notes");
|
||||
notes.setCellValueFactory(cdf -> {
|
||||
JavaFxModel m = cdf.getValue();
|
||||
return new StringPropertyBase() {
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Model Notes";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getBean() {
|
||||
return null;
|
||||
};
|
||||
|
||||
@Override
|
||||
public String get() {
|
||||
String modelNotes = Config.getInstance().getSettings().modelNotes.getOrDefault(m.getUrl(), "");
|
||||
return modelNotes;
|
||||
}
|
||||
};
|
||||
});
|
||||
notes.setPrefWidth(400);
|
||||
notes.setEditable(false);
|
||||
table.getColumns().addAll(preview, name, url, online, recording, paused, notes);
|
||||
table.setItems(observableModels);
|
||||
table.addEventHandler(ContextMenuEvent.CONTEXT_MENU_REQUESTED, event -> {
|
||||
popup = createContextMenu();
|
||||
|
@ -502,6 +527,8 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
|||
switchStreamSource.setOnAction((e) -> switchStreamSource(selectedModels.get(0)));
|
||||
MenuItem follow = new MenuItem("Follow");
|
||||
follow.setOnAction((e) -> follow(selectedModels));
|
||||
MenuItem notes = new MenuItem("Notes");
|
||||
notes.setOnAction((e) -> notes(selectedModels));
|
||||
|
||||
ContextMenu menu = new ContextMenu(stop);
|
||||
if (selectedModels.size() == 1) {
|
||||
|
@ -509,13 +536,14 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
|||
} else {
|
||||
menu.getItems().addAll(resumeRecording, pauseRecording);
|
||||
}
|
||||
menu.getItems().addAll(copyUrl, openInPlayer, openInBrowser, switchStreamSource, follow);
|
||||
menu.getItems().addAll(copyUrl, openInPlayer, openInBrowser, switchStreamSource, follow, notes);
|
||||
|
||||
if (selectedModels.size() > 1) {
|
||||
copyUrl.setDisable(true);
|
||||
openInPlayer.setDisable(true);
|
||||
openInBrowser.setDisable(true);
|
||||
switchStreamSource.setDisable(true);
|
||||
notes.setDisable(true);
|
||||
}
|
||||
|
||||
return menu;
|
||||
|
@ -525,6 +553,10 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
|||
new FollowAction(getTabPane(), new ArrayList<JavaFxModel>(selectedModels)).execute();
|
||||
}
|
||||
|
||||
private void notes(ObservableList<JavaFxModel> selectedModels) {
|
||||
new EditNotesAction(getTabPane(), selectedModels.get(0), table).execute();
|
||||
}
|
||||
|
||||
private void openInPlayer(JavaFxModel selectedModel) {
|
||||
new PlayAction(getTabPane(), selectedModel).execute();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
package ctbrec.ui.action;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import ctbrec.Config;
|
||||
import ctbrec.Model;
|
||||
import ctbrec.ui.JavaFxModel;
|
||||
import ctbrec.ui.controls.Dialogs;
|
||||
import javafx.application.Platform;
|
||||
import javafx.scene.Cursor;
|
||||
import javafx.scene.Node;
|
||||
import javafx.scene.control.TableView;
|
||||
|
||||
public class EditNotesAction {
|
||||
|
||||
private Node source;
|
||||
private Model model;
|
||||
private TableView<JavaFxModel> table;
|
||||
|
||||
public EditNotesAction(Node source, Model selectedModel, TableView<JavaFxModel> table) {
|
||||
this.source = source;
|
||||
this.model = selectedModel;
|
||||
this.table = table;
|
||||
}
|
||||
|
||||
public void execute() {
|
||||
source.setCursor(Cursor.WAIT);
|
||||
new Thread(() -> {
|
||||
Platform.runLater(() -> {
|
||||
String notes = Config.getInstance().getSettings().modelNotes.getOrDefault(model.getUrl(), "");
|
||||
Optional<String> newNotes = Dialogs.showTextInput("Model Notes", "Notes for " + model.getName(), notes);
|
||||
newNotes.ifPresent(n -> Config.getInstance().getSettings().modelNotes.put(model.getUrl(), n));
|
||||
table.refresh();
|
||||
source.setCursor(Cursor.DEFAULT);
|
||||
});
|
||||
}).start();
|
||||
}
|
||||
}
|
|
@ -1,8 +1,19 @@
|
|||
package ctbrec.ui.controls;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.Optional;
|
||||
|
||||
import ctbrec.ui.AutosizeAlert;
|
||||
import javafx.application.Platform;
|
||||
import javafx.geometry.Insets;
|
||||
import javafx.scene.control.Alert;
|
||||
import javafx.scene.control.ButtonType;
|
||||
import javafx.scene.control.Dialog;
|
||||
import javafx.scene.control.TextArea;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.scene.layout.GridPane;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
|
||||
public class Dialogs {
|
||||
public static void showError(String header, String text, Throwable t) {
|
||||
|
@ -24,4 +35,37 @@ public class Dialogs {
|
|||
Platform.runLater(r);
|
||||
}
|
||||
}
|
||||
|
||||
public static Optional<String> showTextInput(String title, String header, String text) {
|
||||
Dialog<String> dialog = new Dialog<>();
|
||||
dialog.setTitle(title);
|
||||
dialog.setHeaderText(header);
|
||||
dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL);
|
||||
dialog.initModality(Modality.APPLICATION_MODAL);
|
||||
dialog.setResizable(true);
|
||||
InputStream icon = Dialogs.class.getResourceAsStream("/icon.png");
|
||||
Stage stage = (Stage) dialog.getDialogPane().getScene().getWindow();
|
||||
stage.getIcons().add(new Image(icon));
|
||||
|
||||
GridPane grid = new GridPane();
|
||||
grid.setHgap(10);
|
||||
grid.setVgap(10);
|
||||
grid.setPadding(new Insets(20, 150, 10, 10));
|
||||
|
||||
TextArea notes = new TextArea(text);
|
||||
notes.setPrefRowCount(3);
|
||||
grid.add(notes, 0, 0);
|
||||
dialog.getDialogPane().setContent(grid);
|
||||
|
||||
Platform.runLater(() -> notes.requestFocus());
|
||||
|
||||
dialog.setResultConverter(dialogButton -> {
|
||||
if (dialogButton == ButtonType.OK) {
|
||||
return notes.getText();
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
return dialog.showAndWait();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,9 @@ package ctbrec;
|
|||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import ctbrec.event.EventHandlerConfiguration;
|
||||
|
||||
|
@ -109,4 +111,5 @@ public class Settings {
|
|||
public String recordingsSortType = "";
|
||||
public double[] recordingsColumnWidths = new double[0];
|
||||
public boolean generatePlaylist = true;
|
||||
public Map<String, String> modelNotes = new HashMap<>();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue