Skip to content

Show compound patterns in the dropdown for citation key patterns #12580

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
Original file line number Diff line number Diff line change
Expand Up @@ -121,13 +121,50 @@ private void populatePopup(List<String> searchResult) {

suggestionsList.getItems().clear();
suggestionsList.getItems().add(createPatternsSubMenu());
suggestionsList.getItems().add(createCompoundPatternsSubMenu());
suggestionsList.getItems().addAll(menuItems);

if (!menuItems.isEmpty()) {
menuItems.getFirst().getContent().requestFocus();
}
}

private Menu createCompoundPatternsSubMenu() {
Menu compoundPatternsSubMenu = new Menu(Localization.lang("All patterns"));

Map<CitationKeyPattern.Category, List<CitationKeyPattern>> categorizedPatterns =
CitationKeyPattern.getAllPatterns().stream()
.collect(Collectors.groupingBy(CitationKeyPattern::getCategory));

Map<CitationKeyPattern.Category, String> categoryNames = Map.of(
CitationKeyPattern.Category.AUTHOR_RELATED, Localization.lang("Author related"),
CitationKeyPattern.Category.EDITOR_RELATED, Localization.lang("Editor related"),
CitationKeyPattern.Category.TITLE_RELATED, Localization.lang("Title related"),
CitationKeyPattern.Category.OTHER_FIELDS, Localization.lang("Other fields"),
CitationKeyPattern.Category.BIBENTRY_FIELDS, Localization.lang("BibEntry fields")
);

for (Map.Entry<CitationKeyPattern.Category, String> entry : categoryNames.entrySet()) {
CitationKeyPattern.Category category = entry.getKey();
String categoryName = entry.getValue();

Menu categoryMenu = new Menu(categoryName);
List<CitationKeyPattern> patterns = categorizedPatterns.getOrDefault(category, List.of());

for (CitationKeyPattern pattern : patterns) {
MenuItem menuItem = new MenuItem(pattern.stringRepresentation());
menuItem.setOnAction(event -> {
setText(pattern.stringRepresentation());
positionCaret(pattern.stringRepresentation().length());
suggestionsList.hide();
});
categoryMenu.getItems().add(menuItem);
}
compoundPatternsSubMenu.getItems().add(categoryMenu);
}
return compoundPatternsSubMenu;
}

private Menu createPatternsSubMenu() {
Menu patternsSubMenu = new Menu(Localization.lang("All patterns"));

Expand Down
1 change: 1 addition & 0 deletions src/main/resources/l10n/JabRef_en.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2858,6 +2858,7 @@ Entries\ copied\ successfully,\ including\ cross-references.=Entries copied succ
Entries\ copied\ successfully,\ without\ cross-references.=Entries copied successfully, without cross-references.

All\ patterns=All patterns
Create\ compound\ patterns=Create compound patterns
Author\ related=Author related
Editor\ related=Editor related
Title\ related=Title related
Expand Down