From 08115fabea4b89c4965ef87272c578b2a37e0102 Mon Sep 17 00:00:00 2001 From: 0xb00bface <0xboobface@gmail.com> Date: Sun, 18 Jul 2021 15:01:58 +0200 Subject: [PATCH] Use ModelMenuContributor for context menu on the RecentlyWatchedTab --- .../ctbrec/ui/tabs/RecentlyWatchedTab.java | 51 +++++-------------- 1 file changed, 12 insertions(+), 39 deletions(-) diff --git a/client/src/main/java/ctbrec/ui/tabs/RecentlyWatchedTab.java b/client/src/main/java/ctbrec/ui/tabs/RecentlyWatchedTab.java index 23f6924b..b320aa15 100644 --- a/client/src/main/java/ctbrec/ui/tabs/RecentlyWatchedTab.java +++ b/client/src/main/java/ctbrec/ui/tabs/RecentlyWatchedTab.java @@ -29,31 +29,29 @@ import ctbrec.io.InstantJsonAdapter; import ctbrec.io.ModelJsonAdapter; import ctbrec.recorder.Recorder; import ctbrec.sites.Site; -import ctbrec.ui.DesktopIntegration; import ctbrec.ui.ShutdownListener; -import ctbrec.ui.action.FollowAction; import ctbrec.ui.action.PlayAction; -import ctbrec.ui.action.StartRecordingAction; import ctbrec.ui.controls.CustomMouseBehaviorContextMenu; import ctbrec.ui.controls.DateTimeCellFactory; import ctbrec.ui.controls.SearchBox; import ctbrec.ui.event.PlayerStartedEvent; +import ctbrec.ui.menu.ModelMenuContributor; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleStringProperty; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.geometry.Insets; +import javafx.scene.Cursor; import javafx.scene.control.ContextMenu; import javafx.scene.control.MenuItem; import javafx.scene.control.ScrollPane; import javafx.scene.control.SelectionMode; +import javafx.scene.control.SeparatorMenuItem; import javafx.scene.control.Tab; import javafx.scene.control.TableCell; import javafx.scene.control.TableColumn; import javafx.scene.control.TableColumn.SortType; import javafx.scene.control.TableView; -import javafx.scene.input.Clipboard; -import javafx.scene.input.ClipboardContent; import javafx.scene.input.ContextMenuEvent; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; @@ -215,37 +213,20 @@ public class RecentlyWatchedTab extends Tab implements ShutdownListener { return null; } - List selectedModels = selectedRows.stream().map(PlayerStartedEvent::getModel).collect(Collectors.toList()); - var copyUrl = new MenuItem("Copy URL"); - copyUrl.setOnAction(e -> { - var selected = selectedModels.get(0); - final var content = new ClipboardContent(); - content.putString(selected.getUrl()); - Clipboard.getSystemClipboard().setContent(content); - }); + List selectedModels = table.getSelectionModel().getSelectedItems().stream().map(PlayerStartedEvent::getModel).collect(Collectors.toList()); + ContextMenu menu = new CustomMouseBehaviorContextMenu(); - var startRecording = new MenuItem("Start Recording"); - startRecording.setOnAction(e -> startRecording(selectedModels)); - var openInBrowser = new MenuItem("Open in Browser"); - openInBrowser.setOnAction(e -> DesktopIntegration.open(selectedModels.get(0).getUrl())); - var openInPlayer = new MenuItem("Open in Player"); - openInPlayer.setOnAction(e -> openInPlayer(selectedModels.get(0))); - var follow = new MenuItem("Follow"); - follow.setOnAction(e -> new FollowAction(getTabPane(), selectedModels).execute()); + ModelMenuContributor.newContributor(getTabPane(), Config.getInstance(), recorder) // + .withStartStopCallback(m -> getTabPane().setCursor(Cursor.DEFAULT)) // + .afterwards(table::refresh) + .contributeToMenu(selectedModels, menu); + + menu.getItems().add(new SeparatorMenuItem()); var delete = new MenuItem("Delete"); delete.setOnAction(e -> delete(selectedRows)); - var clearHistory = new MenuItem("Clear history"); clearHistory.setOnAction(e -> 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); - } + menu.getItems().addAll(delete, clearHistory); return menu; } @@ -259,14 +240,6 @@ public class RecentlyWatchedTab extends Tab implements ShutdownListener { observableModels.removeAll(selectedRows); } - private void startRecording(List selectedModels) { - new StartRecordingAction(getTabPane(), selectedModels, recorder).execute(); - } - - private void openInPlayer(Model selectedModel) { - new PlayAction(getTabPane(), selectedModel).execute(); - } - private void subscribeToPlayerEvents() { EventBusHolder.BUS.register(new Object() { @Subscribe