From d9742f5962519226e18c245fce96b229a65f3438 Mon Sep 17 00:00:00 2001 From: 0xb00bface <0xboobface@gmail.com> Date: Sat, 21 Aug 2021 16:47:10 +0200 Subject: [PATCH] Add context menu to search popup --- .../ui/controls/SearchPopoverTreeList.java | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/client/src/main/java/ctbrec/ui/controls/SearchPopoverTreeList.java b/client/src/main/java/ctbrec/ui/controls/SearchPopoverTreeList.java index 461240ed..a08cff65 100644 --- a/client/src/main/java/ctbrec/ui/controls/SearchPopoverTreeList.java +++ b/client/src/main/java/ctbrec/ui/controls/SearchPopoverTreeList.java @@ -32,16 +32,19 @@ package ctbrec.ui.controls; import java.net.URL; +import java.util.List; import java.util.Objects; import java.util.Optional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import ctbrec.Config; import ctbrec.GlobalThreadPool; import ctbrec.Model; import ctbrec.recorder.Recorder; import ctbrec.ui.action.PlayAction; +import ctbrec.ui.menu.ModelMenuContributor; import javafx.application.Platform; import javafx.concurrent.Task; import javafx.event.EventHandler; @@ -49,12 +52,15 @@ import javafx.geometry.Insets; import javafx.scene.Cursor; import javafx.scene.Node; import javafx.scene.control.Button; +import javafx.scene.control.ContextMenu; import javafx.scene.control.Label; import javafx.scene.control.ListCell; import javafx.scene.control.ListView; import javafx.scene.control.Skin; import javafx.scene.image.Image; import javafx.scene.image.ImageView; +import javafx.scene.input.ContextMenuEvent; +import javafx.scene.input.MouseButton; import javafx.scene.input.MouseEvent; import javafx.scene.shape.Rectangle; @@ -68,6 +74,8 @@ public class SearchPopoverTreeList extends PopoverTreeList implements Pop private Recorder recorder; + ContextMenu popup; + @Override public ListCell call(ListView p) { return new SearchItemListCell(); @@ -150,11 +158,22 @@ public class SearchPopoverTreeList extends PopoverTreeList implements Pop setOnMouseClicked(this); setOnMouseEntered(evt -> { getStyleClass().add(highlightClass); - title.getStyleClass().add(highlightClass); }); setOnMouseExited(evt -> { getStyleClass().remove(highlightClass); - title.getStyleClass().remove(highlightClass); + }); + addEventHandler(ContextMenuEvent.CONTEXT_MENU_REQUESTED, event -> { + popup = new CustomMouseBehaviorContextMenu(); + ModelMenuContributor.newContributor(this, Config.getInstance(), recorder) // + .withStartStopCallback(m -> setCursor(Cursor.DEFAULT)) // + .contributeToMenu(List.of(model), popup); + popup.show(this, event.getScreenX(), event.getScreenY()); + event.consume(); + }); + addEventHandler(MouseEvent.MOUSE_PRESSED, event -> { + if (popup != null) { + popup.hide(); + } }); Rectangle clip = new Rectangle(thumbSize, thumbSize); @@ -210,7 +229,9 @@ public class SearchPopoverTreeList extends PopoverTreeList implements Pop @Override public void handle(MouseEvent t) { - itemClicked(getItem()); + if (t.getButton() == MouseButton.PRIMARY && t.getClickCount() == 2) { + itemClicked(getItem()); + } } @Override