|
3 | 3 | import java.io.File;
|
4 | 4 | import java.io.IOException;
|
5 | 5 | import java.nio.file.Path;
|
| 6 | +import java.util.ArrayList; |
| 7 | +import java.util.Collections; |
6 | 8 | import java.util.List;
|
7 | 9 | import java.util.Objects;
|
8 | 10 | import java.util.Optional;
|
@@ -247,8 +249,9 @@ private void jumpToSearchKey(TableColumn<BibEntryTableViewModel, ?> sortedColumn
|
247 | 249 | .startsWith(columnSearchTerm))
|
248 | 250 | .findFirst()
|
249 | 251 | .ifPresent(item -> {
|
250 |
| - this.scrollTo(item); |
251 |
| - this.clearAndSelect(item.getEntry()); |
| 252 | + getSelectionModel().clearSelection(); |
| 253 | + getSelectionModel().select(item); |
| 254 | + scrollTo(item); |
252 | 255 | });
|
253 | 256 | }
|
254 | 257 |
|
@@ -289,14 +292,33 @@ public void cut() {
|
289 | 292 | }
|
290 | 293 |
|
291 | 294 | private void scrollToRank(int delta) {
|
292 |
| - int currentRank = getSelectionModel().getSelectedItem().searchRankProperty().get(); |
293 |
| - getItems().stream() |
294 |
| - .filter(item -> item.searchRankProperty().get() == currentRank + delta) |
295 |
| - .findFirst() |
296 |
| - .ifPresent(item -> { |
297 |
| - this.scrollTo(item); |
298 |
| - this.clearAndSelect(item.getEntry()); |
299 |
| - }); |
| 295 | + BibEntryTableViewModel selectedEntry = getSelectionModel().getSelectedItem(); |
| 296 | + if (selectedEntry == null) { |
| 297 | + return; |
| 298 | + } |
| 299 | + |
| 300 | + List<BibEntryTableViewModel> firstEntryOfEachRank = new ArrayList<>(Collections.nCopies(5, null)); |
| 301 | + for (BibEntryTableViewModel entry : getItems()) { |
| 302 | + int rank = entry.searchRankProperty().get(); |
| 303 | + if (firstEntryOfEachRank.get(rank) == null) { |
| 304 | + firstEntryOfEachRank.set(rank, entry); |
| 305 | + } |
| 306 | + if (rank == 4) { |
| 307 | + break; |
| 308 | + } |
| 309 | + } |
| 310 | + |
| 311 | + int targetRank = (selectedEntry.searchRankProperty().get()); |
| 312 | + while (true) { |
| 313 | + targetRank = Math.floorMod(targetRank + delta, 5); |
| 314 | + BibEntryTableViewModel entry = firstEntryOfEachRank.get(targetRank); |
| 315 | + if (entry != null) { |
| 316 | + getSelectionModel().clearSelection(); |
| 317 | + getSelectionModel().select(entry); |
| 318 | + scrollTo(entry); |
| 319 | + return; |
| 320 | + } |
| 321 | + } |
300 | 322 | }
|
301 | 323 |
|
302 | 324 | private void setupKeyBindings(KeyBindingRepository keyBindings) {
|
|
0 commit comments