Add context menu to search popup

This commit is contained in:
0xb00bface 2021-08-21 16:47:10 +02:00
parent 4ac1bd4571
commit d9742f5962
1 changed files with 24 additions and 3 deletions

View File

@ -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<Model> implements Pop
private Recorder recorder;
ContextMenu popup;
@Override
public ListCell<Model> call(ListView<Model> p) {
return new SearchItemListCell();
@ -150,11 +158,22 @@ public class SearchPopoverTreeList extends PopoverTreeList<Model> 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<Model> implements Pop
@Override
public void handle(MouseEvent t) {
itemClicked(getItem());
if (t.getButton() == MouseButton.PRIMARY && t.getClickCount() == 2) {
itemClicked(getItem());
}
}
@Override