From 0a4f32e2baf4c5d366d6de5ec252d60e12153886 Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com> Date: Mon, 11 Mar 2024 23:41:48 +0100 Subject: [PATCH 1/4] Simplify casts Co-authored-by: Oliver Kopp --- src/main/java/org/jabref/gui/JabRefFrame.java | 2 ++ src/main/java/org/jabref/gui/LibraryTab.java | 3 ++- src/main/java/org/jabref/gui/StateManager.java | 5 +++++ .../gui/fieldeditors/LinkedEntriesEditor.java | 4 +++- .../LinkedEntriesEditorViewModel.java | 16 +++++++--------- 5 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java index 1265cac4d31..6f66180350b 100644 --- a/src/main/java/org/jabref/gui/JabRefFrame.java +++ b/src/main/java/org/jabref/gui/JabRefFrame.java @@ -574,9 +574,11 @@ public void init() { EasyBind.subscribe(tabbedPane.getSelectionModel().selectedItemProperty(), selectedTab -> { if (selectedTab instanceof LibraryTab libraryTab) { stateManager.setActiveDatabase(libraryTab.getBibDatabaseContext()); + stateManager.activeTabProperty().set(Optional.of(libraryTab)); } else if (selectedTab == null) { // All databases are closed stateManager.setActiveDatabase(null); + stateManager.activeTabProperty().set(Optional.empty()); } }); diff --git a/src/main/java/org/jabref/gui/LibraryTab.java b/src/main/java/org/jabref/gui/LibraryTab.java index 8b9488b1559..5446eb5ffd0 100644 --- a/src/main/java/org/jabref/gui/LibraryTab.java +++ b/src/main/java/org/jabref/gui/LibraryTab.java @@ -282,8 +282,9 @@ private void setDatabaseContext(BibDatabaseContext bibDatabaseContext) { return; } if (tabPane.getSelectionModel().selectedItemProperty().get().equals(this)) { - LOGGER.debug("This case should not happen."); + LOGGER.warn("This case should not happen."); stateManager.setActiveDatabase(bibDatabaseContext); + stateManager.activeTabProperty().set(Optional.of(this)); } // Remove existing dummy BibDatabaseContext and add correct BibDatabaseContext from ParserResult to trigger changes in the openDatabases list in the stateManager diff --git a/src/main/java/org/jabref/gui/StateManager.java b/src/main/java/org/jabref/gui/StateManager.java index 743ad0ef473..bdc1659ac75 100644 --- a/src/main/java/org/jabref/gui/StateManager.java +++ b/src/main/java/org/jabref/gui/StateManager.java @@ -54,6 +54,7 @@ public class StateManager { private final CustomLocalDragboard localDragboard = new CustomLocalDragboard(); private final ObservableList openDatabases = FXCollections.observableArrayList(); private final OptionalObjectProperty activeDatabase = OptionalObjectProperty.empty(); + private final OptionalObjectProperty activeTab = OptionalObjectProperty.empty(); private final ReadOnlyListWrapper activeGroups = new ReadOnlyListWrapper<>(FXCollections.observableArrayList()); private final ObservableList selectedEntries = FXCollections.observableArrayList(); private final ObservableMap> selectedGroups = FXCollections.observableHashMap(); @@ -91,6 +92,10 @@ public OptionalObjectProperty activeDatabaseProperty() { return activeDatabase; } + public OptionalObjectProperty activeTabProperty() { + return activeTab; + } + public OptionalObjectProperty activeSearchQueryProperty() { return activeSearchQuery; } diff --git a/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditor.java b/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditor.java index 3c530084dd3..06a75435b3f 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditor.java +++ b/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditor.java @@ -18,6 +18,7 @@ import org.jabref.gui.ClipBoardManager; import org.jabref.gui.DialogService; import org.jabref.gui.JabRefDialogService; +import org.jabref.gui.StateManager; import org.jabref.gui.actions.ActionFactory; import org.jabref.gui.actions.SimpleCommand; import org.jabref.gui.actions.StandardActions; @@ -48,6 +49,7 @@ public class LinkedEntriesEditor extends HBox implements FieldEditorFX { @Inject private ClipBoardManager clipBoardManager; @Inject private KeyBindingRepository keyBindingRepository; @Inject private UndoManager undoManager; + @Inject private StateManager stateManager; private final LinkedEntriesEditorViewModel viewModel; @@ -56,7 +58,7 @@ public LinkedEntriesEditor(Field field, BibDatabaseContext databaseContext, Sugg .root(this) .load(); - this.viewModel = new LinkedEntriesEditorViewModel(field, suggestionProvider, databaseContext, fieldCheckers, undoManager); + this.viewModel = new LinkedEntriesEditorViewModel(field, suggestionProvider, databaseContext, fieldCheckers, undoManager, stateManager); entryLinkField.setCellFactory(new ViewModelListCellFactory().withText(ParsedEntryLink::getKey)); // Mind the .collect(Collectors.toList()) as the list needs to be mutable diff --git a/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditorViewModel.java index 28048defa97..f8f99b78d62 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditorViewModel.java @@ -7,6 +7,7 @@ import javafx.collections.FXCollections; import javafx.util.StringConverter; +import org.jabref.gui.StateManager; import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.gui.util.BindingsHelper; import org.jabref.logic.integrity.FieldCheckers; @@ -19,11 +20,14 @@ public class LinkedEntriesEditorViewModel extends AbstractEditorViewModel { private final BibDatabaseContext databaseContext; private final ListProperty linkedEntries; + private final StateManager stateManager; - public LinkedEntriesEditorViewModel(Field field, SuggestionProvider suggestionProvider, BibDatabaseContext databaseContext, FieldCheckers fieldCheckers, UndoManager undoManager) { + public LinkedEntriesEditorViewModel(Field field, SuggestionProvider suggestionProvider, BibDatabaseContext databaseContext, FieldCheckers fieldCheckers, UndoManager undoManager, StateManager stateManager) { super(field, suggestionProvider, fieldCheckers, undoManager); this.databaseContext = databaseContext; + this.stateManager = stateManager; + linkedEntries = new SimpleListProperty<>(FXCollections.observableArrayList()); BindingsHelper.bindContentBidirectional( linkedEntries, @@ -54,13 +58,7 @@ public ParsedEntryLink fromString(String key) { } public void jumpToEntry(ParsedEntryLink parsedEntryLink) { - // TODO: Implement jump to entry - The implementation can be based on JabRefFrame.jumpToEntry - // TODO: Add toolitp for tag: Localization.lang("Jump to entry") - // This feature was removed while converting the linked entries editor to JavaFX - // Right now there is no nice way to re-implement it as we have no good interface to control the focus of the main table - // (except directly using the JabRefFrame class as below) - // parsedEntryLink.getLinkedEntry().ifPresent( - // e -> frame.getCurrentBasePanel().highlightEntry(e) - // ); + parsedEntryLink.getLinkedEntry().ifPresent(entry -> + stateManager.activeTabProperty().get().ifPresent(tab -> tab.clearAndSelect(entry))); } } From 03ead349ccfbd5c6561eb22e3717335636f3cc2d Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com> Date: Mon, 11 Mar 2024 23:44:23 +0100 Subject: [PATCH 2/4] CHANGELOG.md Co-authored-by: Oliver Kopp --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41a596a3abb..bd019eb29f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -60,6 +60,7 @@ Note that this project **does not** adhere to [Semantic Versioning](https://semv - We fixed an issue where the `CommentsTab` was not properly formatted when the `defaultOwner` contained capital or special letters. [#10870](https://github.com/JabRef/jabref/issues/10870) - We fixed an issue where the `File -> Close library` menu item was not disabled when no library was open. [#10948](https://github.com/JabRef/jabref/issues/10948) - We fixed an issue where the Document Viewer would show the PDF in only half the window when maximized. [#10934](https://github.com/JabRef/jabref/issues/10934) +- Clicking on the crossref jumps to the linked entry. [#5484](https://github.com/JabRef/jabref/issues/5484) ### Removed From e376cd00e94c08c99aa96ce24f43c68dde1af6d5 Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com> Date: Tue, 12 Mar 2024 00:09:00 +0100 Subject: [PATCH 3/4] Add control-click Co-authored-by: Oliver Kopp --- CHANGELOG.md | 2 +- .../java/org/jabref/gui/fieldeditors/FieldEditors.java | 4 +--- .../org/jabref/gui/fieldeditors/LinkedEntriesEditor.java | 2 +- .../gui/fieldeditors/LinkedEntriesEditorViewModel.java | 7 ++++++- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd019eb29f2..12b8f3c24a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -60,7 +60,7 @@ Note that this project **does not** adhere to [Semantic Versioning](https://semv - We fixed an issue where the `CommentsTab` was not properly formatted when the `defaultOwner` contained capital or special letters. [#10870](https://github.com/JabRef/jabref/issues/10870) - We fixed an issue where the `File -> Close library` menu item was not disabled when no library was open. [#10948](https://github.com/JabRef/jabref/issues/10948) - We fixed an issue where the Document Viewer would show the PDF in only half the window when maximized. [#10934](https://github.com/JabRef/jabref/issues/10934) -- Clicking on the crossref jumps to the linked entry. [#5484](https://github.com/JabRef/jabref/issues/5484) +- Clicking on the crossref and related tags in the entry editor jumps to the linked entry. [#5484](https://github.com/JabRef/jabref/issues/5484) [#9369](https://github.com/JabRef/jabref/issues/9369) ### Removed diff --git a/src/main/java/org/jabref/gui/fieldeditors/FieldEditors.java b/src/main/java/org/jabref/gui/fieldeditors/FieldEditors.java index ec921b2f523..43ad008e0be 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/FieldEditors.java +++ b/src/main/java/org/jabref/gui/fieldeditors/FieldEditors.java @@ -89,9 +89,7 @@ public static FieldEditorFX getForField(final Field field, } else { return new OptionEditor<>(new TypeEditorViewModel(field, suggestionProvider, fieldCheckers, undoManager)); } - } else if (fieldProperties.contains(FieldProperty.SINGLE_ENTRY_LINK)) { - return new LinkedEntriesEditor(field, databaseContext, (SuggestionProvider) suggestionProvider, fieldCheckers); - } else if (fieldProperties.contains(FieldProperty.MULTIPLE_ENTRY_LINK)) { + } else if (fieldProperties.contains(FieldProperty.SINGLE_ENTRY_LINK) || fieldProperties.contains(FieldProperty.MULTIPLE_ENTRY_LINK)) { return new LinkedEntriesEditor(field, databaseContext, (SuggestionProvider) suggestionProvider, fieldCheckers); } else if (fieldProperties.contains(FieldProperty.PERSON_NAMES)) { return new PersonsEditor(field, suggestionProvider, preferences, fieldCheckers, isMultiLine, undoManager); diff --git a/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditor.java b/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditor.java index 06a75435b3f..d692686f7db 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditor.java +++ b/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditor.java @@ -87,7 +87,7 @@ private Node createTag(ParsedEntryLink entryLink) { tagLabel.getGraphic().setOnMouseClicked(event -> entryLinkField.removeTags(entryLink)); tagLabel.setContentDisplay(ContentDisplay.RIGHT); tagLabel.setOnMouseClicked(event -> { - if (event.getClickCount() == 2 && event.getButton().equals(MouseButton.PRIMARY)) { + if ((event.getClickCount() == 2 || event.isControlDown()) && event.getButton().equals(MouseButton.PRIMARY)) { viewModel.jumpToEntry(entryLink); } }); diff --git a/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditorViewModel.java index f8f99b78d62..b422df06be2 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditorViewModel.java @@ -22,7 +22,12 @@ public class LinkedEntriesEditorViewModel extends AbstractEditorViewModel { private final ListProperty linkedEntries; private final StateManager stateManager; - public LinkedEntriesEditorViewModel(Field field, SuggestionProvider suggestionProvider, BibDatabaseContext databaseContext, FieldCheckers fieldCheckers, UndoManager undoManager, StateManager stateManager) { + public LinkedEntriesEditorViewModel(Field field, + SuggestionProvider suggestionProvider, + BibDatabaseContext databaseContext, + FieldCheckers fieldCheckers, + UndoManager undoManager, + StateManager stateManager) { super(field, suggestionProvider, fieldCheckers, undoManager); this.databaseContext = databaseContext; From 889137c07c4c663ffbd41afe83d1fd3e404e5925 Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com> Date: Tue, 12 Mar 2024 00:12:05 +0100 Subject: [PATCH 4/4] Fix l10n Co-authored-by: Oliver Kopp --- src/main/resources/l10n/JabRef_en.properties | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties index 26eb731b57d..2b05bedc01a 100644 --- a/src/main/resources/l10n/JabRef_en.properties +++ b/src/main/resources/l10n/JabRef_en.properties @@ -1926,7 +1926,6 @@ Group\ view\ mode\ set\ to\ union=Group view mode set to union Open\ file\ %0=Open file %0 Toggle\ intersection=Toggle intersection Toggle\ union=Toggle union -Jump\ to\ entry=Jump to entry The\ group\ name\ contains\ the\ keyword\ separator\ "%0"\ and\ thus\ probably\ does\ not\ work\ as\ expected.=The group name contains the keyword separator "%0" and thus probably does not work as expected. Blog=Blog