forked from j62/ctbrec
1
0
Fork 0

Use ModelMenuContributor for context menu on the RecentlyWatchedTab

This commit is contained in:
0xb00bface 2021-07-18 15:01:58 +02:00
parent a5ca45940d
commit 08115fabea
1 changed files with 12 additions and 39 deletions

View File

@ -29,31 +29,29 @@ import ctbrec.io.InstantJsonAdapter;
import ctbrec.io.ModelJsonAdapter; import ctbrec.io.ModelJsonAdapter;
import ctbrec.recorder.Recorder; import ctbrec.recorder.Recorder;
import ctbrec.sites.Site; import ctbrec.sites.Site;
import ctbrec.ui.DesktopIntegration;
import ctbrec.ui.ShutdownListener; import ctbrec.ui.ShutdownListener;
import ctbrec.ui.action.FollowAction;
import ctbrec.ui.action.PlayAction; import ctbrec.ui.action.PlayAction;
import ctbrec.ui.action.StartRecordingAction;
import ctbrec.ui.controls.CustomMouseBehaviorContextMenu; import ctbrec.ui.controls.CustomMouseBehaviorContextMenu;
import ctbrec.ui.controls.DateTimeCellFactory; import ctbrec.ui.controls.DateTimeCellFactory;
import ctbrec.ui.controls.SearchBox; import ctbrec.ui.controls.SearchBox;
import ctbrec.ui.event.PlayerStartedEvent; import ctbrec.ui.event.PlayerStartedEvent;
import ctbrec.ui.menu.ModelMenuContributor;
import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.geometry.Insets; import javafx.geometry.Insets;
import javafx.scene.Cursor;
import javafx.scene.control.ContextMenu; import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem; import javafx.scene.control.MenuItem;
import javafx.scene.control.ScrollPane; import javafx.scene.control.ScrollPane;
import javafx.scene.control.SelectionMode; import javafx.scene.control.SelectionMode;
import javafx.scene.control.SeparatorMenuItem;
import javafx.scene.control.Tab; import javafx.scene.control.Tab;
import javafx.scene.control.TableCell; import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn; import javafx.scene.control.TableColumn;
import javafx.scene.control.TableColumn.SortType; import javafx.scene.control.TableColumn.SortType;
import javafx.scene.control.TableView; import javafx.scene.control.TableView;
import javafx.scene.input.Clipboard;
import javafx.scene.input.ClipboardContent;
import javafx.scene.input.ContextMenuEvent; import javafx.scene.input.ContextMenuEvent;
import javafx.scene.input.KeyCode; import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent; import javafx.scene.input.KeyEvent;
@ -215,37 +213,20 @@ public class RecentlyWatchedTab extends Tab implements ShutdownListener {
return null; return null;
} }
List<Model> selectedModels = selectedRows.stream().map(PlayerStartedEvent::getModel).collect(Collectors.toList()); List<Model> selectedModels = table.getSelectionModel().getSelectedItems().stream().map(PlayerStartedEvent::getModel).collect(Collectors.toList());
var copyUrl = new MenuItem("Copy URL"); ContextMenu menu = new CustomMouseBehaviorContextMenu();
copyUrl.setOnAction(e -> {
var selected = selectedModels.get(0);
final var content = new ClipboardContent();
content.putString(selected.getUrl());
Clipboard.getSystemClipboard().setContent(content);
});
var startRecording = new MenuItem("Start Recording"); ModelMenuContributor.newContributor(getTabPane(), Config.getInstance(), recorder) //
startRecording.setOnAction(e -> startRecording(selectedModels)); .withStartStopCallback(m -> getTabPane().setCursor(Cursor.DEFAULT)) //
var openInBrowser = new MenuItem("Open in Browser"); .afterwards(table::refresh)
openInBrowser.setOnAction(e -> DesktopIntegration.open(selectedModels.get(0).getUrl())); .contributeToMenu(selectedModels, menu);
var openInPlayer = new MenuItem("Open in Player");
openInPlayer.setOnAction(e -> openInPlayer(selectedModels.get(0))); menu.getItems().add(new SeparatorMenuItem());
var follow = new MenuItem("Follow");
follow.setOnAction(e -> new FollowAction(getTabPane(), selectedModels).execute());
var delete = new MenuItem("Delete"); var delete = new MenuItem("Delete");
delete.setOnAction(e -> delete(selectedRows)); delete.setOnAction(e -> delete(selectedRows));
var clearHistory = new MenuItem("Clear history"); var clearHistory = new MenuItem("Clear history");
clearHistory.setOnAction(e -> clearHistory()); clearHistory.setOnAction(e -> clearHistory());
menu.getItems().addAll(delete, clearHistory);
ContextMenu menu = new CustomMouseBehaviorContextMenu();
menu.getItems().addAll(startRecording, copyUrl, openInPlayer, openInBrowser, follow, delete, clearHistory);
if (selectedModels.size() > 1) {
copyUrl.setDisable(true);
openInPlayer.setDisable(true);
openInBrowser.setDisable(true);
}
return menu; return menu;
} }
@ -259,14 +240,6 @@ public class RecentlyWatchedTab extends Tab implements ShutdownListener {
observableModels.removeAll(selectedRows); observableModels.removeAll(selectedRows);
} }
private void startRecording(List<Model> selectedModels) {
new StartRecordingAction(getTabPane(), selectedModels, recorder).execute();
}
private void openInPlayer(Model selectedModel) {
new PlayAction(getTabPane(), selectedModel).execute();
}
private void subscribeToPlayerEvents() { private void subscribeToPlayerEvents() {
EventBusHolder.BUS.register(new Object() { EventBusHolder.BUS.register(new Object() {
@Subscribe @Subscribe