mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-10-01 09:40:35 +13:00
More quick access fixes
This commit is contained in:
parent
b1a3caad46
commit
92faa26bbc
3 changed files with 67 additions and 55 deletions
|
@ -74,7 +74,7 @@ final class BrowserContextMenu extends ContextMenu {
|
||||||
for (BrowserAction a : all) {
|
for (BrowserAction a : all) {
|
||||||
var used = resolveIfNeeded(a, selected);
|
var used = resolveIfNeeded(a, selected);
|
||||||
if (a instanceof LeafAction la) {
|
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) {
|
if (a instanceof BranchAction la) {
|
||||||
|
@ -84,7 +84,7 @@ final class BrowserContextMenu extends ContextMenu {
|
||||||
if (!sub.isApplicable(model, subUsed)) {
|
if (!sub.isApplicable(model, subUsed)) {
|
||||||
continue;
|
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);
|
var graphic = a.getIcon(model, used);
|
||||||
if (graphic != null) {
|
if (graphic != null) {
|
||||||
|
|
|
@ -45,39 +45,43 @@ public class BrowserQuickAccessButtonComp extends SimpleComp {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showMenu(Node anchor) {
|
private void showMenu(Node anchor) {
|
||||||
var cm = new ContextMenu();
|
var cm = new ContextMenu();
|
||||||
cm.addEventHandler(Menu.ON_SHOWING, e -> {
|
cm.addEventHandler(Menu.ON_SHOWING, e -> {
|
||||||
Node content = cm.getSkin().getNode();
|
Node content = cm.getSkin().getNode();
|
||||||
if (content instanceof Region r) {
|
if (content instanceof Region r) {
|
||||||
r.setMaxWidth(500);
|
r.setMaxWidth(500);
|
||||||
r.setMaxHeight(600);
|
r.setMaxHeight(600);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
cm.setAutoHide(true);
|
cm.setAutoHide(true);
|
||||||
cm.getStyleClass().add("condensed");
|
cm.getStyleClass().add("condensed");
|
||||||
|
|
||||||
ThreadHelper.runFailableAsync(() -> {
|
ThreadHelper.runFailableAsync(() -> {
|
||||||
var fileEntry = base.get().getRawFileEntry();
|
var fileEntry = base.get().getRawFileEntry();
|
||||||
if (fileEntry.getKind() != FileKind.DIRECTORY) {
|
if (fileEntry.getKind() != FileKind.DIRECTORY) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var r = new Menu();
|
var r = new Menu();
|
||||||
var newItems = updateMenuItems(cm, r, fileEntry, true);
|
var newItems = updateMenuItems(cm, r, fileEntry, true);
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
cm.getItems().addAll(r.getItems());
|
cm.getItems().addAll(r.getItems());
|
||||||
cm.show(anchor, Side.RIGHT, 0, 0);
|
cm.show(anchor, Side.RIGHT, 0, 0);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private MenuItem createItem(ContextMenu contextMenu, FileSystem.FileEntry fileEntry) {
|
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) {
|
if (fileEntry.getKind() != FileKind.DIRECTORY) {
|
||||||
var m = new Menu(
|
var m = new Menu(
|
||||||
fileEntry.getName(),
|
fileEntry.getName(),
|
||||||
PrettyImageHelper.ofFixedSizeSquare(FileIconManager.getFileIcon(fileEntry,false), 24).createRegion());
|
PrettyImageHelper.ofFixedSizeSquare(FileIconManager.getFileIcon(fileEntry, false), 24)
|
||||||
|
.createRegion());
|
||||||
m.setMnemonicParsing(false);
|
m.setMnemonicParsing(false);
|
||||||
m.setOnAction(event -> {
|
m.setOnAction(event -> {
|
||||||
if (event.getTarget() != m) {
|
if (event.getTarget() != m) {
|
||||||
|
@ -91,7 +95,8 @@ public class BrowserQuickAccessButtonComp extends SimpleComp {
|
||||||
|
|
||||||
var m = new Menu(
|
var m = new Menu(
|
||||||
fileEntry.getName(),
|
fileEntry.getName(),
|
||||||
PrettyImageHelper.ofFixedSizeSquare(FileIconManager.getFileIcon(fileEntry,false), 24).createRegion());
|
PrettyImageHelper.ofFixedSizeSquare(FileIconManager.getFileIcon(fileEntry, false), 24)
|
||||||
|
.createRegion());
|
||||||
m.setMnemonicParsing(false);
|
m.setMnemonicParsing(false);
|
||||||
var empty = new MenuItem("...");
|
var empty = new MenuItem("...");
|
||||||
m.getItems().add(empty);
|
m.getItems().add(empty);
|
||||||
|
@ -107,23 +112,24 @@ public class BrowserQuickAccessButtonComp extends SimpleComp {
|
||||||
hover.set(false);
|
hover.set(false);
|
||||||
event.consume();
|
event.consume();
|
||||||
});
|
});
|
||||||
new BooleanTimer(hover,500, () -> {
|
new BooleanTimer(hover, 500, () -> {
|
||||||
if (m.isShowing() && !m.getItems().getFirst().equals(empty)) {
|
if (m.isShowing() && !m.getItems().getFirst().equals(empty)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<MenuItem> newItems = null;
|
List<MenuItem> newItems = null;
|
||||||
try {
|
try {
|
||||||
newItems = updateMenuItems(contextMenu, m, fileEntry, false);
|
newItems = updateMenuItems(contextMenu, m, fileEntry, false);
|
||||||
m.getItems().setAll(newItems);
|
m.getItems().setAll(newItems);
|
||||||
if (!browserCm.isShowing()) {
|
if (!browserCm.isShowing()) {
|
||||||
m.hide();
|
m.hide();
|
||||||
m.show();
|
m.show();
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}).start();
|
})
|
||||||
|
.start();
|
||||||
m.setOnAction(event -> {
|
m.setOnAction(event -> {
|
||||||
if (event.getTarget() != m) {
|
if (event.getTarget() != m) {
|
||||||
return;
|
return;
|
||||||
|
@ -142,7 +148,8 @@ public class BrowserQuickAccessButtonComp extends SimpleComp {
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<MenuItem> updateMenuItems(ContextMenu contextMenu, Menu m, FileSystem.FileEntry fileEntry, boolean updateInstantly) throws Exception {
|
private List<MenuItem> updateMenuItems(
|
||||||
|
ContextMenu contextMenu, Menu m, FileSystem.FileEntry fileEntry, boolean updateInstantly) throws Exception {
|
||||||
var newFiles = model.getFileSystem().listFiles(fileEntry.getPath());
|
var newFiles = model.getFileSystem().listFiles(fileEntry.getPath());
|
||||||
try (var s = newFiles) {
|
try (var s = newFiles) {
|
||||||
var list = s.toList();
|
var list = s.toList();
|
||||||
|
@ -151,16 +158,21 @@ public class BrowserQuickAccessButtonComp extends SimpleComp {
|
||||||
if (list.isEmpty()) {
|
if (list.isEmpty()) {
|
||||||
newItems.add(new MenuItem("<empty>"));
|
newItems.add(new MenuItem("<empty>"));
|
||||||
} else {
|
} else {
|
||||||
var menus = list.stream().sorted((o1, o2) -> {
|
var menus = list.stream()
|
||||||
if (o1.getKind() == FileKind.DIRECTORY && o2.getKind() != FileKind.DIRECTORY) {
|
.sorted((o1, o2) -> {
|
||||||
return -1;
|
if (o1.getKind() == FileKind.DIRECTORY && o2.getKind() != FileKind.DIRECTORY) {
|
||||||
}
|
return -1;
|
||||||
if (o2.getKind() == FileKind.DIRECTORY && o1.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));
|
return o1.getName().compareToIgnoreCase(o2.getName());
|
||||||
var dirs = list.stream().filter(e -> e.getKind() == FileKind.DIRECTORY).toList();
|
})
|
||||||
|
.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) {
|
if (dirs.size() == 1) {
|
||||||
updateMenuItems(contextMenu, (Menu) menus.get(dirs.getFirst()), list.getFirst(), updateInstantly);
|
updateMenuItems(contextMenu, (Menu) menus.get(dirs.getFirst()), list.getFirst(), updateInstantly);
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,7 +61,7 @@ public interface LeafAction extends BrowserAction {
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
default MenuItem toItem(OpenFileSystemModel model, List<BrowserEntry> selected, UnaryOperator<String> nameFunc) {
|
default MenuItem toMenuItem(OpenFileSystemModel model, List<BrowserEntry> selected, UnaryOperator<String> nameFunc) {
|
||||||
var name = nameFunc.apply(getName(model, selected));
|
var name = nameFunc.apply(getName(model, selected));
|
||||||
var mi = new MenuItem(name);
|
var mi = new MenuItem(name);
|
||||||
mi.setOnAction(event -> {
|
mi.setOnAction(event -> {
|
||||||
|
|
Loading…
Reference in a new issue