mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-11-22 07:30:24 +00:00
Fix typed selection
This commit is contained in:
parent
17069267da
commit
a4b7d42f83
1 changed files with 38 additions and 34 deletions
|
@ -136,40 +136,7 @@ public final class BrowserFileListComp extends SimpleComp {
|
|||
private void prepareTypedSelectionModel(TableView<BrowserEntry> table) {
|
||||
AtomicReference<Instant> lastFail = new AtomicReference<>();
|
||||
table.addEventHandler(KeyEvent.KEY_PRESSED, event -> {
|
||||
var typed = event.getText();
|
||||
if (typed.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
var updated = typedSelection.get() + typed;
|
||||
var found = fileList.getShown().getValue().stream()
|
||||
.filter(browserEntry ->
|
||||
browserEntry.getFileName().toLowerCase().startsWith(updated.toLowerCase()))
|
||||
.findFirst();
|
||||
if (found.isEmpty()) {
|
||||
if (lastFail.get() == null) {
|
||||
lastFail.set(Instant.now());
|
||||
}
|
||||
var inCooldown = Duration.between(lastFail.get(), Instant.now()).toMillis() < 1000;
|
||||
if (inCooldown) {
|
||||
lastFail.set(Instant.now());
|
||||
event.consume();
|
||||
return;
|
||||
} else {
|
||||
lastFail.set(null);
|
||||
typedSelection.set(typed);
|
||||
table.getSelectionModel().clearSelection();
|
||||
event.consume();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
lastFail.set(null);
|
||||
typedSelection.set(updated);
|
||||
table.scrollTo(found.get());
|
||||
table.getSelectionModel()
|
||||
.clearAndSelect(fileList.getShown().getValue().indexOf(found.get()));
|
||||
event.consume();
|
||||
updateTypedSelection(table, lastFail, event);
|
||||
});
|
||||
|
||||
table.addEventFilter(MouseEvent.MOUSE_PRESSED, event -> {
|
||||
|
@ -190,6 +157,43 @@ public final class BrowserFileListComp extends SimpleComp {
|
|||
});
|
||||
}
|
||||
|
||||
private void updateTypedSelection(TableView<BrowserEntry> table, AtomicReference<Instant> lastType, KeyEvent event) {
|
||||
var typed = event.getText();
|
||||
if (typed.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
System.out.println(typedSelection.get() + " vs " + typed);
|
||||
var updated = typedSelection.get() + typed;
|
||||
var found = fileList.getShown().getValue().stream()
|
||||
.filter(browserEntry ->
|
||||
browserEntry.getFileName().toLowerCase().startsWith(updated.toLowerCase()))
|
||||
.findFirst();
|
||||
if (found.isEmpty()) {
|
||||
var inCooldown = lastType.get() != null && Duration.between(lastType.get(), Instant.now()).toMillis() < 1000;
|
||||
if (inCooldown) {
|
||||
System.out.println("cool");
|
||||
lastType.set(Instant.now());
|
||||
event.consume();
|
||||
return;
|
||||
} else {
|
||||
System.out.println("cancel");
|
||||
lastType.set(null);
|
||||
typedSelection.set("");
|
||||
table.getSelectionModel().clearSelection();
|
||||
updateTypedSelection(table, lastType, event);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("norm");
|
||||
lastType.set(Instant.now());
|
||||
typedSelection.set(updated);
|
||||
table.scrollTo(found.get());
|
||||
table.getSelectionModel().clearAndSelect(fileList.getShown().getValue().indexOf(found.get()));
|
||||
event.consume();
|
||||
}
|
||||
|
||||
private void prepareTableSelectionModel(TableView<BrowserEntry> table) {
|
||||
if (!fileList.getSelectionMode().isMultiple()) {
|
||||
table.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
|
||||
|
|
Loading…
Reference in a new issue