mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-09-28 23:31:43 +12:00
Quick access fixes
This commit is contained in:
parent
822cab45e7
commit
65607aac53
3 changed files with 30 additions and 21 deletions
|
@ -6,6 +6,7 @@ import io.xpipe.app.comp.base.VBoxViewComp;
|
||||||
import io.xpipe.app.fxcomps.Comp;
|
import io.xpipe.app.fxcomps.Comp;
|
||||||
import io.xpipe.app.fxcomps.SimpleComp;
|
import io.xpipe.app.fxcomps.SimpleComp;
|
||||||
import io.xpipe.app.fxcomps.augment.GrowAugment;
|
import io.xpipe.app.fxcomps.augment.GrowAugment;
|
||||||
|
import io.xpipe.app.fxcomps.impl.HorizontalComp;
|
||||||
import io.xpipe.core.store.FileSystem;
|
import io.xpipe.core.store.FileSystem;
|
||||||
import javafx.collections.ObservableList;
|
import javafx.collections.ObservableList;
|
||||||
import javafx.geometry.Pos;
|
import javafx.geometry.Pos;
|
||||||
|
@ -14,6 +15,7 @@ import javafx.scene.layout.Region;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.Value;
|
import lombok.Value;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
@Value
|
@Value
|
||||||
|
@ -29,7 +31,10 @@ public class BrowserFileOverviewComp extends SimpleComp {
|
||||||
Function<FileSystem.FileEntry, Comp<?>> factory = entry -> {
|
Function<FileSystem.FileEntry, Comp<?>> factory = entry -> {
|
||||||
return Comp.of(() -> {
|
return Comp.of(() -> {
|
||||||
var icon = BrowserIcons.createIcon(entry);
|
var icon = BrowserIcons.createIcon(entry);
|
||||||
var l = new Button(entry.getPath(), icon.createRegion());
|
var graphic = new HorizontalComp(List.of(icon,
|
||||||
|
new BrowserQuickAccessButtonComp(() -> new BrowserEntry(entry, model.getFileList(),false),model)));
|
||||||
|
var l = new Button(entry.getPath(), graphic.createRegion());
|
||||||
|
l.setGraphicTextGap(1);
|
||||||
l.setOnAction(event -> {
|
l.setOnAction(event -> {
|
||||||
model.cdAsync(entry.getPath());
|
model.cdAsync(entry.getPath());
|
||||||
event.consume();
|
event.consume();
|
||||||
|
|
|
@ -4,7 +4,7 @@ import io.xpipe.app.browser.icon.FileIconManager;
|
||||||
import io.xpipe.app.fxcomps.SimpleComp;
|
import io.xpipe.app.fxcomps.SimpleComp;
|
||||||
import io.xpipe.app.fxcomps.impl.IconButtonComp;
|
import io.xpipe.app.fxcomps.impl.IconButtonComp;
|
||||||
import io.xpipe.app.fxcomps.impl.PrettyImageHelper;
|
import io.xpipe.app.fxcomps.impl.PrettyImageHelper;
|
||||||
import io.xpipe.app.util.BooleanTimer;
|
import io.xpipe.app.util.BooleanAnimationTimer;
|
||||||
import io.xpipe.app.util.ThreadHelper;
|
import io.xpipe.app.util.ThreadHelper;
|
||||||
import io.xpipe.core.store.FileKind;
|
import io.xpipe.core.store.FileKind;
|
||||||
import io.xpipe.core.store.FileSystem;
|
import io.xpipe.core.store.FileSystem;
|
||||||
|
@ -36,10 +36,15 @@ public class BrowserQuickAccessButtonComp extends SimpleComp {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Region createSimple() {
|
protected Region createSimple() {
|
||||||
|
var cm = new ContextMenu();
|
||||||
var button = new IconButtonComp("mdi2c-chevron-double-right");
|
var button = new IconButtonComp("mdi2c-chevron-double-right");
|
||||||
button.apply(struc -> {
|
button.apply(struc -> {
|
||||||
struc.get().setOnAction(event -> {
|
struc.get().setOnAction(event -> {
|
||||||
showMenu(struc.get());
|
if (!cm.isShowing()) {
|
||||||
|
showMenu(cm, struc.get());
|
||||||
|
} else {
|
||||||
|
cm.hide();
|
||||||
|
}
|
||||||
event.consume();
|
event.consume();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -47,8 +52,8 @@ public class BrowserQuickAccessButtonComp extends SimpleComp {
|
||||||
return button.createRegion();
|
return button.createRegion();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showMenu(Node anchor) {
|
private void showMenu(ContextMenu cm, Node anchor) {
|
||||||
var cm = new ContextMenu();
|
cm.getItems().clear();
|
||||||
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) {
|
||||||
|
@ -126,22 +131,21 @@ public class BrowserQuickAccessButtonComp extends SimpleComp {
|
||||||
hover.set(false);
|
hover.set(false);
|
||||||
event.consume();
|
event.consume();
|
||||||
});
|
});
|
||||||
new BooleanTimer(hover, 100, () -> {
|
new BooleanAnimationTimer(hover, 100, () -> {
|
||||||
if (m.isShowing() && !m.getItems().getFirst().equals(empty)) {
|
if (m.isShowing() && !m.getItems().getFirst().equals(empty)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<MenuItem> newItems = null;
|
ThreadHelper.runFailableAsync(() -> {
|
||||||
try {
|
var newItems = updateMenuItems(contextMenu, m, fileEntry, false, showingActionsMenu);
|
||||||
newItems = updateMenuItems(contextMenu, m, fileEntry, false, showingActionsMenu);
|
Platform.runLater(() -> {
|
||||||
m.getItems().setAll(newItems);
|
m.getItems().setAll(newItems);
|
||||||
if (!browserCm.isShowing()) {
|
if (!browserCm.isShowing() && m.isShowing()) {
|
||||||
m.hide();
|
m.hide();
|
||||||
m.show();
|
m.show();
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
});
|
||||||
throw new RuntimeException(e);
|
});
|
||||||
}
|
|
||||||
})
|
})
|
||||||
.start();
|
.start();
|
||||||
m.setOnAction(event -> {
|
m.setOnAction(event -> {
|
||||||
|
@ -204,8 +208,8 @@ public class BrowserQuickAccessButtonComp extends SimpleComp {
|
||||||
updateMenuItems(
|
updateMenuItems(
|
||||||
contextMenu,
|
contextMenu,
|
||||||
(Menu) menus.get(dirs.getFirst()),
|
(Menu) menus.get(dirs.getFirst()),
|
||||||
list.getFirst(),
|
dirs.getFirst(),
|
||||||
updateInstantly,
|
true,
|
||||||
showingActionsMenu);
|
showingActionsMenu);
|
||||||
}
|
}
|
||||||
newItems.addAll(menus.values());
|
newItems.addAll(menus.values());
|
||||||
|
|
|
@ -5,13 +5,13 @@ import javafx.beans.value.ObservableBooleanValue;
|
||||||
|
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
public class BooleanTimer {
|
public class BooleanAnimationTimer {
|
||||||
|
|
||||||
private final ObservableBooleanValue value;
|
private final ObservableBooleanValue value;
|
||||||
private final int duration;
|
private final int duration;
|
||||||
private final Runnable toExecute;
|
private final Runnable toExecute;
|
||||||
|
|
||||||
public BooleanTimer(ObservableBooleanValue value, int duration, Runnable toExecute) {
|
public BooleanAnimationTimer(ObservableBooleanValue value, int duration, Runnable toExecute) {
|
||||||
this.value = value;
|
this.value = value;
|
||||||
this.duration = duration;
|
this.duration = duration;
|
||||||
this.toExecute = toExecute;
|
this.toExecute = toExecute;
|
Loading…
Reference in a new issue