Use ModelMenuContributor for context menu on the MyFreeCamsTableTab

This commit is contained in:
0xb00bface 2021-07-18 15:29:54 +02:00
parent e1dbdb00f9
commit 73631fb5c0
3 changed files with 18 additions and 41 deletions

View File

@ -1,3 +1,8 @@
4.4.3
========================
* Changed Camsoda audio codec back to AAC. Sound should be back for recordings
* Unified all model related context menus
4.4.2
========================
* Fixed memory leak caused by minimizing to tray

View File

@ -43,7 +43,7 @@ public class MyFreeCamsTabProvider implements TabProvider {
updateService = new NewModelService();
tabs.add(createTab("New", updateService));
tabs.add(new MyFreeCamsTableTab(myFreeCams));
tabs.add(new MyFreeCamsTableTab(myFreeCams, recorder));
return tabs;
}

View File

@ -36,17 +36,15 @@ import ctbrec.Config;
import ctbrec.GlobalThreadPool;
import ctbrec.Model;
import ctbrec.StringUtil;
import ctbrec.recorder.Recorder;
import ctbrec.recorder.download.StreamSource;
import ctbrec.sites.mfc.MyFreeCams;
import ctbrec.sites.mfc.MyFreeCamsModel;
import ctbrec.sites.mfc.SessionState;
import ctbrec.sites.mfc.User;
import ctbrec.ui.DesktopIntegration;
import ctbrec.ui.action.FollowAction;
import ctbrec.ui.action.PlayAction;
import ctbrec.ui.action.StartRecordingAction;
import ctbrec.ui.controls.CustomMouseBehaviorContextMenu;
import ctbrec.ui.controls.SearchBox;
import ctbrec.ui.menu.ModelMenuContributor;
import ctbrec.ui.tabs.TabSelectionListener;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.DoubleProperty;
@ -66,6 +64,7 @@ import javafx.event.ActionEvent;
import javafx.geometry.Insets;
import javafx.geometry.Point2D;
import javafx.geometry.Pos;
import javafx.scene.Cursor;
import javafx.scene.control.Button;
import javafx.scene.control.CheckMenuItem;
import javafx.scene.control.ContextMenu;
@ -73,13 +72,12 @@ import javafx.scene.control.Label;
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.TableColumn;
import javafx.scene.control.TableColumn.SortType;
import javafx.scene.control.TableView;
import javafx.scene.control.Tooltip;
import javafx.scene.input.Clipboard;
import javafx.scene.input.ClipboardContent;
import javafx.scene.input.ContextMenuEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
@ -102,9 +100,11 @@ public class MyFreeCamsTableTab extends Tab implements TabSelectionListener {
private List<TableColumn<ModelTableRow, ?>> columns = new ArrayList<>();
private ContextMenu popup;
private long lastJsonWrite = 0;
private Recorder recorder;
public MyFreeCamsTableTab(MyFreeCams mfc) {
public MyFreeCamsTableTab(MyFreeCams mfc, Recorder recorder) {
this.mfc = mfc;
this.recorder = recorder;
setText("Tabular");
setClosable(false);
createGui();
@ -306,26 +306,12 @@ public class MyFreeCamsTableTab extends Tab implements TabSelectionListener {
return null;
}
var copyUrl = new MenuItem("Copy URL");
copyUrl.setOnAction(e -> copyUrl(selectedModels.get(0)));
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());
ContextMenu menu = new CustomMouseBehaviorContextMenu();
menu.getItems().addAll(startRecording, copyUrl, openInPlayer, openInBrowser, follow);
if (selectedModels.size() > 1) {
copyUrl.setDisable(true);
openInPlayer.setDisable(true);
openInBrowser.setDisable(true);
}
ModelMenuContributor.newContributor(getTabPane(), Config.getInstance(), recorder) //
.withStartStopCallback(m -> getTabPane().setCursor(Cursor.DEFAULT)) //
.afterwards(table::refresh)
.contributeToMenu(selectedModels, menu);
addDebuggingInDevMode(menu, selectedModels);
@ -333,6 +319,7 @@ public class MyFreeCamsTableTab extends Tab implements TabSelectionListener {
}
private void addDebuggingInDevMode(ContextMenu menu, List<Model> selectedModels) {
menu.getItems().add(new SeparatorMenuItem());
if (Objects.equals(System.getenv("CTBREC_DEV"), "1")) {
var debug = new MenuItem("debug");
debug.setOnAction(e -> GlobalThreadPool.submit(() -> {
@ -365,21 +352,6 @@ public class MyFreeCamsTableTab extends Tab implements TabSelectionListener {
return selectedModels;
}
private void copyUrl(Model selected) {
final var content = new ClipboardContent();
content.putString(selected.getUrl());
Clipboard.getSystemClipboard().setContent(content);
}
private void startRecording(List<Model> selectedModels) {
new StartRecordingAction(getTabPane(), selectedModels, mfc.getRecorder()).execute();
}
private void openInPlayer(Model selectedModel) {
new PlayAction(getTabPane(), selectedModel).execute();
}
private void addTableColumnIfEnabled(TableColumn<ModelTableRow, ?> tc) {
if(isColumnEnabled(tc)) {
table.getColumns().add(tc);