Skip to content

Commit 4f0d25a

Browse files
committed
Fix scroll shortcut to handle rank gaps
1 parent 26af9f0 commit 4f0d25a

File tree

1 file changed

+28
-8
lines changed

1 file changed

+28
-8
lines changed

src/main/java/org/jabref/gui/maintable/MainTable.java

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import java.io.File;
44
import java.io.IOException;
55
import java.nio.file.Path;
6+
import java.util.ArrayList;
7+
import java.util.Collections;
68
import java.util.List;
79
import java.util.Objects;
810
import java.util.Optional;
@@ -289,14 +291,32 @@ public void cut() {
289291
}
290292

291293
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-
});
294+
BibEntryTableViewModel selectedEntry = getSelectionModel().getSelectedItem();
295+
if (selectedEntry == null) {
296+
return;
297+
}
298+
299+
List<BibEntryTableViewModel> firstEntryOfEachRank = new ArrayList<>(Collections.nCopies(5, null));
300+
for (BibEntryTableViewModel entry : getItems()) {
301+
int rank = entry.searchRankProperty().get();
302+
if (firstEntryOfEachRank.get(rank) == null) {
303+
firstEntryOfEachRank.set(rank, entry);
304+
}
305+
if (rank == 4) {
306+
break;
307+
}
308+
}
309+
310+
int targetRank = (selectedEntry.searchRankProperty().get());
311+
while (true) {
312+
targetRank = Math.floorMod(targetRank + delta, 5);
313+
BibEntryTableViewModel entry = firstEntryOfEachRank.get(targetRank);
314+
if (entry != null) {
315+
scrollTo(entry);
316+
clearAndSelect(entry.getEntry());
317+
return;
318+
}
319+
}
300320
}
301321

302322
private void setupKeyBindings(KeyBindingRepository keyBindings) {

0 commit comments

Comments
 (0)