From 92faa26bbcbcab42cb0bb0761baad4a758549d59 Mon Sep 17 00:00:00 2001 From: crschnick Date: Tue, 26 Mar 2024 22:58:03 +0000 Subject: [PATCH] More quick access fixes --- .../xpipe/app/browser/BrowserContextMenu.java | 4 +- .../browser/BrowserQuickAccessButtonComp.java | 116 ++++++++++-------- .../xpipe/app/browser/action/LeafAction.java | 2 +- 3 files changed, 67 insertions(+), 55 deletions(-) diff --git a/app/src/main/java/io/xpipe/app/browser/BrowserContextMenu.java b/app/src/main/java/io/xpipe/app/browser/BrowserContextMenu.java index dfc94472f..a31eb56e9 100644 --- a/app/src/main/java/io/xpipe/app/browser/BrowserContextMenu.java +++ b/app/src/main/java/io/xpipe/app/browser/BrowserContextMenu.java @@ -74,7 +74,7 @@ final class BrowserContextMenu extends ContextMenu { for (BrowserAction a : all) { var used = resolveIfNeeded(a, selected); if (a instanceof LeafAction la) { - getItems().add(la.toItem(model, used, s -> s)); + getItems().add(la.toMenuItem(model, used, s -> s)); } if (a instanceof BranchAction la) { @@ -84,7 +84,7 @@ final class BrowserContextMenu extends ContextMenu { if (!sub.isApplicable(model, subUsed)) { continue; } - m.getItems().add(sub.toItem(model, subUsed, s -> s)); + m.getItems().add(sub.toMenuItem(model, subUsed, s -> s)); } var graphic = a.getIcon(model, used); if (graphic != null) { diff --git a/app/src/main/java/io/xpipe/app/browser/BrowserQuickAccessButtonComp.java b/app/src/main/java/io/xpipe/app/browser/BrowserQuickAccessButtonComp.java index 56d43bfa4..549cd06ee 100644 --- a/app/src/main/java/io/xpipe/app/browser/BrowserQuickAccessButtonComp.java +++ b/app/src/main/java/io/xpipe/app/browser/BrowserQuickAccessButtonComp.java @@ -45,39 +45,43 @@ public class BrowserQuickAccessButtonComp extends SimpleComp { } private void showMenu(Node anchor) { - var cm = new ContextMenu(); - cm.addEventHandler(Menu.ON_SHOWING, e -> { - Node content = cm.getSkin().getNode(); - if (content instanceof Region r) { - r.setMaxWidth(500); - r.setMaxHeight(600); - } - }); - cm.setAutoHide(true); - cm.getStyleClass().add("condensed"); + var cm = new ContextMenu(); + cm.addEventHandler(Menu.ON_SHOWING, e -> { + Node content = cm.getSkin().getNode(); + if (content instanceof Region r) { + r.setMaxWidth(500); + r.setMaxHeight(600); + } + }); + cm.setAutoHide(true); + cm.getStyleClass().add("condensed"); - ThreadHelper.runFailableAsync(() -> { - var fileEntry = base.get().getRawFileEntry(); - if (fileEntry.getKind() != FileKind.DIRECTORY) { - return; - } + ThreadHelper.runFailableAsync(() -> { + var fileEntry = base.get().getRawFileEntry(); + if (fileEntry.getKind() != FileKind.DIRECTORY) { + return; + } - var r = new Menu(); - var newItems = updateMenuItems(cm, r, fileEntry, true); - Platform.runLater(() -> { - cm.getItems().addAll(r.getItems()); - cm.show(anchor, Side.RIGHT, 0, 0); - }); - }); + var r = new Menu(); + var newItems = updateMenuItems(cm, r, fileEntry, true); + Platform.runLater(() -> { + cm.getItems().addAll(r.getItems()); + cm.show(anchor, Side.RIGHT, 0, 0); + }); + }); } private MenuItem createItem(ContextMenu contextMenu, FileSystem.FileEntry fileEntry) { - var browserCm = new BrowserContextMenu(model, new BrowserEntry(fileEntry,model.getFileList(), false)); + var browserCm = new BrowserContextMenu(model, new BrowserEntry(fileEntry, model.getFileList(), false)); + browserCm.setOnAction(e -> { + contextMenu.hide(); + }); if (fileEntry.getKind() != FileKind.DIRECTORY) { var m = new Menu( fileEntry.getName(), - PrettyImageHelper.ofFixedSizeSquare(FileIconManager.getFileIcon(fileEntry,false), 24).createRegion()); + PrettyImageHelper.ofFixedSizeSquare(FileIconManager.getFileIcon(fileEntry, false), 24) + .createRegion()); m.setMnemonicParsing(false); m.setOnAction(event -> { if (event.getTarget() != m) { @@ -91,7 +95,8 @@ public class BrowserQuickAccessButtonComp extends SimpleComp { var m = new Menu( fileEntry.getName(), - PrettyImageHelper.ofFixedSizeSquare(FileIconManager.getFileIcon(fileEntry,false), 24).createRegion()); + PrettyImageHelper.ofFixedSizeSquare(FileIconManager.getFileIcon(fileEntry, false), 24) + .createRegion()); m.setMnemonicParsing(false); var empty = new MenuItem("..."); m.getItems().add(empty); @@ -107,23 +112,24 @@ public class BrowserQuickAccessButtonComp extends SimpleComp { hover.set(false); event.consume(); }); - new BooleanTimer(hover,500, () -> { - if (m.isShowing() && !m.getItems().getFirst().equals(empty)) { - return; - } + new BooleanTimer(hover, 500, () -> { + if (m.isShowing() && !m.getItems().getFirst().equals(empty)) { + return; + } - List newItems = null; - try { - newItems = updateMenuItems(contextMenu, m, fileEntry, false); - m.getItems().setAll(newItems); - if (!browserCm.isShowing()) { - m.hide(); - m.show(); - } - } catch (Exception e) { - throw new RuntimeException(e); - } - }).start(); + List newItems = null; + try { + newItems = updateMenuItems(contextMenu, m, fileEntry, false); + m.getItems().setAll(newItems); + if (!browserCm.isShowing()) { + m.hide(); + m.show(); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + }) + .start(); m.setOnAction(event -> { if (event.getTarget() != m) { return; @@ -142,7 +148,8 @@ public class BrowserQuickAccessButtonComp extends SimpleComp { return m; } - private List updateMenuItems(ContextMenu contextMenu, Menu m, FileSystem.FileEntry fileEntry, boolean updateInstantly) throws Exception { + private List updateMenuItems( + ContextMenu contextMenu, Menu m, FileSystem.FileEntry fileEntry, boolean updateInstantly) throws Exception { var newFiles = model.getFileSystem().listFiles(fileEntry.getPath()); try (var s = newFiles) { var list = s.toList(); @@ -151,16 +158,21 @@ public class BrowserQuickAccessButtonComp extends SimpleComp { if (list.isEmpty()) { newItems.add(new MenuItem("")); } else { - var menus = list.stream().sorted((o1, o2) -> { - if (o1.getKind() == FileKind.DIRECTORY && o2.getKind() != FileKind.DIRECTORY) { - return -1; - } - if (o2.getKind() == FileKind.DIRECTORY && o1.getKind() != FileKind.DIRECTORY) { - return 1; - } - return o1.getName().compareToIgnoreCase(o2.getName()); - }).collect(Collectors.toMap(e -> e, e -> createItem(contextMenu, e), (v1, v2) -> v2, LinkedHashMap::new)); - var dirs = list.stream().filter(e -> e.getKind() == FileKind.DIRECTORY).toList(); + var menus = list.stream() + .sorted((o1, o2) -> { + if (o1.getKind() == FileKind.DIRECTORY && o2.getKind() != FileKind.DIRECTORY) { + return -1; + } + if (o2.getKind() == FileKind.DIRECTORY && o1.getKind() != FileKind.DIRECTORY) { + return 1; + } + return o1.getName().compareToIgnoreCase(o2.getName()); + }) + .collect(Collectors.toMap( + e -> e, e -> createItem(contextMenu, e), (v1, v2) -> v2, LinkedHashMap::new)); + var dirs = list.stream() + .filter(e -> e.getKind() == FileKind.DIRECTORY) + .toList(); if (dirs.size() == 1) { updateMenuItems(contextMenu, (Menu) menus.get(dirs.getFirst()), list.getFirst(), updateInstantly); } diff --git a/app/src/main/java/io/xpipe/app/browser/action/LeafAction.java b/app/src/main/java/io/xpipe/app/browser/action/LeafAction.java index 89b7a6713..612331795 100644 --- a/app/src/main/java/io/xpipe/app/browser/action/LeafAction.java +++ b/app/src/main/java/io/xpipe/app/browser/action/LeafAction.java @@ -61,7 +61,7 @@ public interface LeafAction extends BrowserAction { return b; } - default MenuItem toItem(OpenFileSystemModel model, List selected, UnaryOperator nameFunc) { + default MenuItem toMenuItem(OpenFileSystemModel model, List selected, UnaryOperator nameFunc) { var name = nameFunc.apply(getName(model, selected)); var mi = new MenuItem(name); mi.setOnAction(event -> {