From 9791427aeb9ab00bc0314482c2a7198b239abd7a Mon Sep 17 00:00:00 2001 From: 0xboobface <0xboobface@gmail.com> Date: Tue, 4 Dec 2018 17:09:19 +0100 Subject: [PATCH] Add "Follow" to the context menu of the recorded models tab --- .../java/ctbrec/ui/RecordedModelsTab.java | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/client/src/main/java/ctbrec/ui/RecordedModelsTab.java b/client/src/main/java/ctbrec/ui/RecordedModelsTab.java index f636b424..1d815ed6 100644 --- a/client/src/main/java/ctbrec/ui/RecordedModelsTab.java +++ b/client/src/main/java/ctbrec/ui/RecordedModelsTab.java @@ -3,6 +3,7 @@ package ctbrec.ui; import java.io.IOException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -296,13 +297,13 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener { massEdit(models, action); } - private void massEdit(List models, Consumer action) { - getTabPane().setCursor(Cursor.WAIT); + private void massEdit(List models, Consumer action) { + table.setCursor(Cursor.WAIT); threadPool.submit(() -> { for (Model model : models) { action.accept(model); } - Platform.runLater(() -> getTabPane().setCursor(Cursor.DEFAULT)); + Platform.runLater(() -> table.setCursor(Cursor.DEFAULT)); }); } @@ -443,6 +444,8 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener { openInPlayer.setOnAction((e) -> openInPlayer(selectedModels.get(0))); MenuItem switchStreamSource = new MenuItem("Switch resolution"); switchStreamSource.setOnAction((e) -> switchStreamSource(selectedModels.get(0))); + MenuItem follow = new MenuItem("Follow"); + follow.setOnAction((e) -> follow(selectedModels)); ContextMenu menu = new ContextMenu(stop); if (selectedModels.size() == 1) { @@ -450,7 +453,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener { } else { menu.getItems().addAll(resumeRecording, pauseRecording); } - menu.getItems().addAll(copyUrl, openInPlayer, openInBrowser, switchStreamSource); + menu.getItems().addAll(copyUrl, openInPlayer, openInBrowser, switchStreamSource, follow); if (selectedModels.size() > 1) { copyUrl.setDisable(true); @@ -462,6 +465,19 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener { return menu; } + private void follow(ObservableList selectedModels) { + Consumer action = (m) -> { + try { + m.follow(); + } catch(Throwable e) { + LOG.error("Couldn't follow model {}", m, e); + Platform.runLater(() -> + showErrorDialog(e, "Couldn't follow model", "Following " + m.getName() + " failed: " + e.getMessage())); + } + }; + massEdit(new ArrayList(selectedModels), action); + } + private void openInPlayer(JavaFxModel selectedModel) { table.setCursor(Cursor.WAIT); new Thread(() -> { @@ -533,8 +549,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener { showErrorDialog(e, "Couldn't stop recording", "Stopping recording of " + m.getName() + " failed")); } }; - List models = selectedModels.stream().map(jfxm -> jfxm.getDelegate()).collect(Collectors.toList()); - massEdit(models, action); + massEdit(new ArrayList(selectedModels), action); }; private void pauseRecording(List selectedModels) { @@ -547,8 +562,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener { showErrorDialog(e, "Couldn't pause recording of model", "Pausing recording of " + m.getName() + " failed")); } }; - List models = selectedModels.stream().map(jfxm -> jfxm.getDelegate()).collect(Collectors.toList()); - massEdit(models, action); + massEdit(new ArrayList(selectedModels), action); }; private void resumeRecording(List selectedModels) { @@ -561,8 +575,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener { showErrorDialog(e, "Couldn't resume recording of model", "Resuming recording of " + m.getName() + " failed")); } }; - List models = selectedModels.stream().map(jfxm -> jfxm.getDelegate()).collect(Collectors.toList()); - massEdit(models, action); + massEdit(new ArrayList(selectedModels), action); } public void saveState() {