From 633ac6e6eef9c6021df116e049e63cd95ef5cb98 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Thu, 5 Jan 2023 17:40:50 +0100 Subject: [PATCH 01/30] Show source and preview for entry changes/deleted/added --- .../gui/collab/DatabaseChangeDetailsView.java | 5 +- .../DatabaseChangeDetailsViewFactory.java | 7 +- .../collab/entryadd/EntryAddDetailsView.java | 25 ------- .../EntryWithPreviewAndSourceDetailsView.java | 72 +++++++++++++++++++ .../entrydelete/EntryDeleteDetailsView.java | 25 ------- 5 files changed, 77 insertions(+), 57 deletions(-) delete mode 100644 src/main/java/org/jabref/gui/collab/entryadd/EntryAddDetailsView.java create mode 100644 src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java delete mode 100644 src/main/java/org/jabref/gui/collab/entrydelete/EntryDeleteDetailsView.java diff --git a/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsView.java b/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsView.java index fa13bc804a4..d6792b4f965 100644 --- a/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsView.java +++ b/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsView.java @@ -2,9 +2,8 @@ import javafx.scene.layout.AnchorPane; -import org.jabref.gui.collab.entryadd.EntryAddDetailsView; import org.jabref.gui.collab.entrychange.EntryChangeDetailsView; -import org.jabref.gui.collab.entrydelete.EntryDeleteDetailsView; +import org.jabref.gui.collab.entrychange.EntryWithPreviewAndSourceDetailsView; import org.jabref.gui.collab.groupchange.GroupChangeDetailsView; import org.jabref.gui.collab.metedatachange.MetadataChangeDetailsView; import org.jabref.gui.collab.preamblechange.PreambleChangeDetailsView; @@ -13,5 +12,5 @@ import org.jabref.gui.collab.stringdelete.BibTexStringDeleteDetailsView; import org.jabref.gui.collab.stringrename.BibTexStringRenameDetailsView; -public sealed abstract class DatabaseChangeDetailsView extends AnchorPane permits EntryAddDetailsView, EntryChangeDetailsView, EntryDeleteDetailsView, GroupChangeDetailsView, MetadataChangeDetailsView, PreambleChangeDetailsView, BibTexStringAddDetailsView, BibTexStringChangeDetailsView, BibTexStringDeleteDetailsView, BibTexStringRenameDetailsView { +public sealed abstract class DatabaseChangeDetailsView extends AnchorPane permits EntryWithPreviewAndSourceDetailsView, EntryChangeDetailsView, GroupChangeDetailsView, MetadataChangeDetailsView, PreambleChangeDetailsView, BibTexStringAddDetailsView, BibTexStringChangeDetailsView, BibTexStringDeleteDetailsView, BibTexStringRenameDetailsView { } diff --git a/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsViewFactory.java b/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsViewFactory.java index dcb8dfaf407..bbefd0cfc80 100644 --- a/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsViewFactory.java +++ b/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsViewFactory.java @@ -3,11 +3,10 @@ import org.jabref.gui.DialogService; import org.jabref.gui.StateManager; import org.jabref.gui.collab.entryadd.EntryAdd; -import org.jabref.gui.collab.entryadd.EntryAddDetailsView; import org.jabref.gui.collab.entrychange.EntryChange; import org.jabref.gui.collab.entrychange.EntryChangeDetailsView; +import org.jabref.gui.collab.entrychange.EntryWithPreviewAndSourceDetailsView; import org.jabref.gui.collab.entrydelete.EntryDelete; -import org.jabref.gui.collab.entrydelete.EntryDeleteDetailsView; import org.jabref.gui.collab.groupchange.GroupChange; import org.jabref.gui.collab.groupchange.GroupChangeDetailsView; import org.jabref.gui.collab.metedatachange.MetadataChange; @@ -46,9 +45,9 @@ public DatabaseChangeDetailsView create(DatabaseChange databaseChange) { if (databaseChange instanceof EntryChange entryChange) { return new EntryChangeDetailsView(entryChange, databaseContext, dialogService, stateManager, themeManager, preferencesService); } else if (databaseChange instanceof EntryAdd entryAdd) { - return new EntryAddDetailsView(entryAdd, databaseContext, dialogService, stateManager, themeManager, preferencesService); + return new EntryWithPreviewAndSourceDetailsView(entryAdd.getAddedEntry(), databaseContext, dialogService, stateManager, themeManager, preferencesService); } else if (databaseChange instanceof EntryDelete entryDelete) { - return new EntryDeleteDetailsView(entryDelete, databaseContext, dialogService, stateManager, themeManager, preferencesService); + return new EntryWithPreviewAndSourceDetailsView(entryDelete.getDeletedEntry(), databaseContext, dialogService, stateManager, themeManager, preferencesService); } else if (databaseChange instanceof BibTexStringAdd stringAdd) { return new BibTexStringAddDetailsView(stringAdd); } else if (databaseChange instanceof BibTexStringDelete stringDelete) { diff --git a/src/main/java/org/jabref/gui/collab/entryadd/EntryAddDetailsView.java b/src/main/java/org/jabref/gui/collab/entryadd/EntryAddDetailsView.java deleted file mode 100644 index 81cc8740e8c..00000000000 --- a/src/main/java/org/jabref/gui/collab/entryadd/EntryAddDetailsView.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.jabref.gui.collab.entryadd; - -import org.jabref.gui.DialogService; -import org.jabref.gui.StateManager; -import org.jabref.gui.collab.DatabaseChangeDetailsView; -import org.jabref.gui.preview.PreviewViewer; -import org.jabref.gui.theme.ThemeManager; -import org.jabref.model.database.BibDatabaseContext; -import org.jabref.preferences.PreferencesService; - -public final class EntryAddDetailsView extends DatabaseChangeDetailsView { - - public EntryAddDetailsView(EntryAdd entryAdd, BibDatabaseContext bibDatabaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService) { - PreviewViewer previewViewer = new PreviewViewer(bibDatabaseContext, dialogService, stateManager, themeManager); - previewViewer.setLayout(preferencesService.getPreviewPreferences().getSelectedPreviewLayout()); - previewViewer.setEntry(entryAdd.getAddedEntry()); - - setLeftAnchor(previewViewer, 8d); - setTopAnchor(previewViewer, 8d); - setRightAnchor(previewViewer, 8d); - setBottomAnchor(previewViewer, 8d); - - getChildren().setAll(previewViewer); - } -} diff --git a/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java b/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java new file mode 100644 index 00000000000..ed3827467a9 --- /dev/null +++ b/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java @@ -0,0 +1,72 @@ +package org.jabref.gui.collab.entrychange; + +import java.io.IOException; +import java.io.StringWriter; + +import javafx.scene.control.Tab; +import javafx.scene.control.TabPane; + +import org.jabref.gui.DialogService; +import org.jabref.gui.Globals; +import org.jabref.gui.StateManager; +import org.jabref.gui.collab.DatabaseChangeDetailsView; +import org.jabref.gui.preview.PreviewViewer; +import org.jabref.gui.theme.ThemeManager; +import org.jabref.logic.bibtex.BibEntryWriter; +import org.jabref.logic.bibtex.FieldWriter; +import org.jabref.logic.bibtex.FieldWriterPreferences; +import org.jabref.logic.exporter.BibWriter; +import org.jabref.logic.l10n.Localization; +import org.jabref.logic.util.OS; +import org.jabref.model.database.BibDatabaseContext; +import org.jabref.model.database.BibDatabaseMode; +import org.jabref.model.entry.BibEntry; +import org.jabref.preferences.PreferencesService; + +import org.fxmisc.flowless.VirtualizedScrollPane; +import org.fxmisc.richtext.CodeArea; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public final class EntryWithPreviewAndSourceDetailsView extends DatabaseChangeDetailsView { + + private static final Logger LOGGER = LoggerFactory.getLogger(EntryWithPreviewAndSourceDetailsView.class); + + public EntryWithPreviewAndSourceDetailsView(BibEntry entry, BibDatabaseContext bibDatabaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService) { + PreviewViewer previewViewer = new PreviewViewer(bibDatabaseContext, dialogService, stateManager, themeManager); + previewViewer.setLayout(preferencesService.getPreviewPreferences().getSelectedPreviewLayout()); + previewViewer.setEntry(entry); + + CodeArea codeArea = new CodeArea(); + codeArea.setWrapText(true); + + TabPane tabPanePreviewCode = new TabPane(); + Tab previewTab = new Tab(Localization.lang("Entry preview"), previewViewer); + + try { + codeArea.appendText(getSourceString(entry, bibDatabaseContext.getMode(), preferencesService.getFieldWriterPreferences())); + } catch (IOException e) { + LOGGER.error("Error getting Bibtex", entry); + } + codeArea.setEditable(true); + VirtualizedScrollPane scrollableCodeArea = new VirtualizedScrollPane<>(codeArea); + Tab codeTab = new Tab(Localization.lang("%0 source", bibDatabaseContext.getMode().getFormattedName()), scrollableCodeArea); + + tabPanePreviewCode.getTabs().addAll(previewTab, codeTab); + + setLeftAnchor(tabPanePreviewCode, 8d); + setTopAnchor(tabPanePreviewCode, 8d); + setRightAnchor(tabPanePreviewCode, 8d); + setBottomAnchor(tabPanePreviewCode, 8d); + + getChildren().setAll(tabPanePreviewCode); + } + + private String getSourceString(BibEntry entry, BibDatabaseMode type, FieldWriterPreferences fieldWriterPreferences) throws IOException { + StringWriter writer = new StringWriter(); + BibWriter bibWriter = new BibWriter(writer, OS.NEWLINE); + FieldWriter fieldWriter = FieldWriter.buildIgnoreHashes(fieldWriterPreferences); + new BibEntryWriter(fieldWriter, Globals.entryTypesManager).write(entry, bibWriter, type); + return writer.toString(); + } +} diff --git a/src/main/java/org/jabref/gui/collab/entrydelete/EntryDeleteDetailsView.java b/src/main/java/org/jabref/gui/collab/entrydelete/EntryDeleteDetailsView.java deleted file mode 100644 index a1630805435..00000000000 --- a/src/main/java/org/jabref/gui/collab/entrydelete/EntryDeleteDetailsView.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.jabref.gui.collab.entrydelete; - -import org.jabref.gui.DialogService; -import org.jabref.gui.StateManager; -import org.jabref.gui.collab.DatabaseChangeDetailsView; -import org.jabref.gui.preview.PreviewViewer; -import org.jabref.gui.theme.ThemeManager; -import org.jabref.model.database.BibDatabaseContext; -import org.jabref.preferences.PreferencesService; - -public final class EntryDeleteDetailsView extends DatabaseChangeDetailsView { - - public EntryDeleteDetailsView(EntryDelete entryDelete, BibDatabaseContext bibDatabaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService) { - PreviewViewer previewViewer = new PreviewViewer(bibDatabaseContext, dialogService, stateManager, themeManager); - previewViewer.setLayout(preferencesService.getPreviewPreferences().getSelectedPreviewLayout()); - previewViewer.setEntry(entryDelete.getDeletedEntry()); - - setLeftAnchor(previewViewer, 8d); - setTopAnchor(previewViewer, 8d); - setRightAnchor(previewViewer, 8d); - setBottomAnchor(previewViewer, 8d); - - getChildren().setAll(previewViewer); - } -} From 8b3d26de318a5054690872d2eb8a6b7da51106b4 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Thu, 5 Jan 2023 17:51:46 +0100 Subject: [PATCH 02/30] remove preview from EntryChanged, better to use the diff dialog --- .../collab/entrychange/EntryChangeDetailsView.java | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java b/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java index ef7abeeb86b..7e6c671c98a 100644 --- a/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java +++ b/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java @@ -3,22 +3,12 @@ import org.jabref.gui.DialogService; import org.jabref.gui.StateManager; import org.jabref.gui.collab.DatabaseChangeDetailsView; -import org.jabref.gui.preview.PreviewViewer; import org.jabref.gui.theme.ThemeManager; import org.jabref.model.database.BibDatabaseContext; import org.jabref.preferences.PreferencesService; public final class EntryChangeDetailsView extends DatabaseChangeDetailsView { public EntryChangeDetailsView(EntryChange entryChange, BibDatabaseContext bibDatabaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService) { - PreviewViewer previewViewer = new PreviewViewer(bibDatabaseContext, dialogService, stateManager, themeManager); - previewViewer.setLayout(preferencesService.getPreviewPreferences().getSelectedPreviewLayout()); - previewViewer.setEntry(entryChange.getNewEntry()); - - setLeftAnchor(previewViewer, 8d); - setTopAnchor(previewViewer, 8d); - setRightAnchor(previewViewer, 8d); - setBottomAnchor(previewViewer, 8d); - - getChildren().setAll(previewViewer); + // TOOD: Show maybe diff of preview and source? } } From f00bbe175afb4be5fa5dca5f033e2721aa86d671 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Thu, 5 Jan 2023 18:00:56 +0100 Subject: [PATCH 03/30] add changelog entry and make readonly --- CHANGELOG.md | 2 +- .../entrychange/EntryWithPreviewAndSourceDetailsView.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 47f177c8103..197bf8a6433 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve - We added a dropdown menu to let users change the library they want to import into during import. [#6177](https://github.com/JabRef/jabref/issues/6177) - We added the possibility to add/remove a preview style from the selected list using a double click. [#9490](https://github.com/JabRef/jabref/issues/9490) - We added the option to define fields as "multine" directly in the custom entry types dialog. [#6448](https://github.com/JabRef/jabref/issues/6448) - +- We added a field showing the BibTeX/biblatex source for added and deleted entries in the "External Changes Resolver" dialog. [#9509](https://github.com/JabRef/jabref/issues/9509) ### Changed diff --git a/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java b/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java index ed3827467a9..ee112d6c535 100644 --- a/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java +++ b/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java @@ -39,6 +39,7 @@ public EntryWithPreviewAndSourceDetailsView(BibEntry entry, BibDatabaseContext b CodeArea codeArea = new CodeArea(); codeArea.setWrapText(true); + codeArea.setDisable(true); TabPane tabPanePreviewCode = new TabPane(); Tab previewTab = new Tab(Localization.lang("Entry preview"), previewViewer); From 6d04e514537a823a1947fddf1b1ca01ccd58e563 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Thu, 5 Jan 2023 19:51:56 +0100 Subject: [PATCH 04/30] add padding, show previe and source also for entry change --- src/main/java/org/jabref/gui/Base.css | 6 ++++++ .../collab/DatabaseChangeDetailsViewFactory.java | 3 +-- .../collab/entrychange/EntryChangeDetailsView.java | 14 -------------- .../EntryWithPreviewAndSourceDetailsView.java | 1 + 4 files changed, 8 insertions(+), 16 deletions(-) delete mode 100644 src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java diff --git a/src/main/java/org/jabref/gui/Base.css b/src/main/java/org/jabref/gui/Base.css index b25946fc658..a0288e9dea4 100644 --- a/src/main/java/org/jabref/gui/Base.css +++ b/src/main/java/org/jabref/gui/Base.css @@ -1310,6 +1310,12 @@ We want to have a look that matches our icons in the tool-bar */ -fx-fill: -fx-text-background-color; } + +#bibtexcodearea { + -fx-padding: 4 4 4 4; + -fx-background-color: -fx-control-inner-background; +} + .code-area .selection { -fx-fill: -jr-accent; } diff --git a/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsViewFactory.java b/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsViewFactory.java index bbefd0cfc80..fe835a7e736 100644 --- a/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsViewFactory.java +++ b/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsViewFactory.java @@ -4,7 +4,6 @@ import org.jabref.gui.StateManager; import org.jabref.gui.collab.entryadd.EntryAdd; import org.jabref.gui.collab.entrychange.EntryChange; -import org.jabref.gui.collab.entrychange.EntryChangeDetailsView; import org.jabref.gui.collab.entrychange.EntryWithPreviewAndSourceDetailsView; import org.jabref.gui.collab.entrydelete.EntryDelete; import org.jabref.gui.collab.groupchange.GroupChange; @@ -43,7 +42,7 @@ public DatabaseChangeDetailsViewFactory(BibDatabaseContext databaseContext, Dial public DatabaseChangeDetailsView create(DatabaseChange databaseChange) { // TODO: Use Pattern Matching for switch once it's out of preview if (databaseChange instanceof EntryChange entryChange) { - return new EntryChangeDetailsView(entryChange, databaseContext, dialogService, stateManager, themeManager, preferencesService); + return new EntryWithPreviewAndSourceDetailsView(entryChange.getNewEntry(), databaseContext, dialogService, stateManager, themeManager, preferencesService); } else if (databaseChange instanceof EntryAdd entryAdd) { return new EntryWithPreviewAndSourceDetailsView(entryAdd.getAddedEntry(), databaseContext, dialogService, stateManager, themeManager, preferencesService); } else if (databaseChange instanceof EntryDelete entryDelete) { diff --git a/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java b/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java deleted file mode 100644 index 7e6c671c98a..00000000000 --- a/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.jabref.gui.collab.entrychange; - -import org.jabref.gui.DialogService; -import org.jabref.gui.StateManager; -import org.jabref.gui.collab.DatabaseChangeDetailsView; -import org.jabref.gui.theme.ThemeManager; -import org.jabref.model.database.BibDatabaseContext; -import org.jabref.preferences.PreferencesService; - -public final class EntryChangeDetailsView extends DatabaseChangeDetailsView { - public EntryChangeDetailsView(EntryChange entryChange, BibDatabaseContext bibDatabaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService) { - // TOOD: Show maybe diff of preview and source? - } -} diff --git a/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java b/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java index ee112d6c535..bdb3f287795 100644 --- a/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java +++ b/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java @@ -38,6 +38,7 @@ public EntryWithPreviewAndSourceDetailsView(BibEntry entry, BibDatabaseContext b previewViewer.setEntry(entry); CodeArea codeArea = new CodeArea(); + codeArea.setId("bibtexcodearea"); codeArea.setWrapText(true); codeArea.setDisable(true); From a194e2b61426d391baf3122de8aa061d0fa37519 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Thu, 5 Jan 2023 20:07:51 +0100 Subject: [PATCH 05/30] spaces... --- src/main/java/org/jabref/gui/Base.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/jabref/gui/Base.css b/src/main/java/org/jabref/gui/Base.css index a0288e9dea4..0d70cc6f1f5 100644 --- a/src/main/java/org/jabref/gui/Base.css +++ b/src/main/java/org/jabref/gui/Base.css @@ -1312,7 +1312,7 @@ We want to have a look that matches our icons in the tool-bar */ #bibtexcodearea { - -fx-padding: 4 4 4 4; + -fx-padding: 4 4 4 4; -fx-background-color: -fx-control-inner-background; } From a4abb6da11babd47ec5cf0b75bfa8c8589c34cf6 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Thu, 5 Jan 2023 20:15:07 +0100 Subject: [PATCH 06/30] remove from permit --- .../java/org/jabref/gui/collab/DatabaseChangeDetailsView.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsView.java b/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsView.java index d6792b4f965..565cb7a74c0 100644 --- a/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsView.java +++ b/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsView.java @@ -2,7 +2,6 @@ import javafx.scene.layout.AnchorPane; -import org.jabref.gui.collab.entrychange.EntryChangeDetailsView; import org.jabref.gui.collab.entrychange.EntryWithPreviewAndSourceDetailsView; import org.jabref.gui.collab.groupchange.GroupChangeDetailsView; import org.jabref.gui.collab.metedatachange.MetadataChangeDetailsView; @@ -12,5 +11,5 @@ import org.jabref.gui.collab.stringdelete.BibTexStringDeleteDetailsView; import org.jabref.gui.collab.stringrename.BibTexStringRenameDetailsView; -public sealed abstract class DatabaseChangeDetailsView extends AnchorPane permits EntryWithPreviewAndSourceDetailsView, EntryChangeDetailsView, GroupChangeDetailsView, MetadataChangeDetailsView, PreambleChangeDetailsView, BibTexStringAddDetailsView, BibTexStringChangeDetailsView, BibTexStringDeleteDetailsView, BibTexStringRenameDetailsView { +public sealed abstract class DatabaseChangeDetailsView extends AnchorPane permits EntryWithPreviewAndSourceDetailsView, GroupChangeDetailsView, MetadataChangeDetailsView, PreambleChangeDetailsView, BibTexStringAddDetailsView, BibTexStringChangeDetailsView, BibTexStringDeleteDetailsView, BibTexStringRenameDetailsView { } From 3168b7896d666152c5fb56ff3160a239ac36ce51 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Fri, 6 Jan 2023 20:22:35 +0100 Subject: [PATCH 07/30] Hide and show rows add to string methods simplify enum parsing --- .../newmergedialog/FieldRowView.java | 33 +++++++++++++++++++ .../newmergedialog/ThreeWayMergeView.java | 15 ++++++++- .../newmergedialog/cell/FieldValueCell.java | 8 +++-- .../cell/ThreeWayMergeCell.java | 5 +++ .../toolbar/ThreeWayMergeToolbar.fxml | 2 ++ .../toolbar/ThreeWayMergeToolbar.java | 28 ++++++++++------ 6 files changed, 77 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java index 16d104a572e..6bcc70c7940 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java @@ -145,6 +145,7 @@ public MergedFieldCell getMergedValueCell() { } public void showDiff(ShowDiffConfig diffConfig) { + showRow(); if (!rightValueCell.isVisible() || StringUtil.isNullOrEmpty(viewModel.getLeftFieldValue()) || StringUtil.isNullOrEmpty(viewModel.getRightFieldValue())) { return; } @@ -163,6 +164,31 @@ public void showDiff(ShowDiffConfig diffConfig) { } } + public void hideRow() { + this.leftValueCell.setVisible(false); + this.rightValueCell.setVisible(false); + this.fieldNameCell.setVisible(false); + this.mergedValueCell.setVisible(false); + + // TODO restore style? + this.leftValueCell.setManaged(false); + this.rightValueCell.setManaged(false); + this.fieldNameCell.setManaged(false); + this.mergedValueCell.setManaged(false); + } + + public void showRow() { + this.leftValueCell.setManaged(true); + this.rightValueCell.setManaged(true); + this.fieldNameCell.setManaged(true); + this.mergedValueCell.setManaged(true); + + this.leftValueCell.setVisible(true); + this.rightValueCell.setVisible(true); + this.fieldNameCell.setVisible(true); + this.mergedValueCell.setVisible(true); + } + public void hideDiff() { if (!rightValueCell.isVisible()) { return; @@ -178,4 +204,11 @@ public void hideDiff() { getRightValueCell().getStyleClassedLabel().clearStyle(0, rightValueLength); getRightValueCell().getStyleClassedLabel().replaceText(viewModel.getRightFieldValue()); } + + @Override + public String toString() { + return "FieldRowView [shouldShowDiffs=" + shouldShowDiffs.get() + ", fieldNameCell=" + fieldNameCell + ", leftValueCell=" + leftValueCell + ", rightValueCell=" + rightValueCell + ", mergedValueCell=" + mergedValueCell +"]"; + } + + } diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java index e2114338fa9..f82aff37bc6 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java @@ -74,12 +74,18 @@ private void initializeToolbar() { toolbar.showDiffProperty().addListener(e -> updateDiff()); toolbar.diffViewProperty().addListener(e -> updateDiff()); toolbar.diffHighlightingMethodProperty().addListener(e -> updateDiff()); + toolbar.showAllFieldsProperty().addListener(e -> updateDiff()); this.updateDiff(); } private void updateDiff() { if (toolbar.isShowDiffEnabled()) { for (FieldRowView row : fieldRows) { + if (!toolbar.isShowAllFields() && + row.getLeftValueCell().getText().trim().equals(row.getRightValueCell().getText().trim())) { + row.hideRow(); + continue; + } if (row.getFieldNameCell().getText().equals("Groups") && (row.getLeftValueCell().getText().contains(keywordSeparator) || row.getRightValueCell().getText().contains(keywordSeparator))) { row.showDiff(new ShowDiffConfig(toolbar.getDiffView(), new GroupDiffMode(keywordSeparator))); } else { @@ -87,7 +93,14 @@ private void updateDiff() { } } } else { - fieldRows.forEach(FieldRowView::hideDiff); + for(FieldRowView row: fieldRows) { + if (!toolbar.isShowAllFields() && + row.getLeftValueCell().getText().trim().equals(row.getRightValueCell().getText().trim())) { + row.hideRow(); + continue; + } + row.hideDiff(); + } } } diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/cell/FieldValueCell.java b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/cell/FieldValueCell.java index 4d3c1e57fd8..924d9b3f8b6 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/cell/FieldValueCell.java +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/cell/FieldValueCell.java @@ -153,9 +153,9 @@ private void initializeScrollPane() { private void preventTextSelectionViaMouseEvents() { label.addEventFilter(MouseEvent.ANY, e -> { - if (e.getEventType() == MouseEvent.MOUSE_DRAGGED || - e.getEventType() == MouseEvent.DRAG_DETECTED || - e.getEventType() == MouseEvent.MOUSE_ENTERED) { + if ((e.getEventType() == MouseEvent.MOUSE_DRAGGED) || + (e.getEventType() == MouseEvent.DRAG_DETECTED) || + (e.getEventType() == MouseEvent.MOUSE_ENTERED)) { e.consume(); } else if (e.getEventType() == MouseEvent.MOUSE_PRESSED) { if (e.getClickCount() > 1) { @@ -198,4 +198,6 @@ public BooleanProperty selectedProperty() { public StyleClassedTextArea getStyleClassedLabel() { return label; } + + } diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/cell/ThreeWayMergeCell.java b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/cell/ThreeWayMergeCell.java index a7afc813698..2a4b020aaef 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/cell/ThreeWayMergeCell.java +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/cell/ThreeWayMergeCell.java @@ -40,4 +40,9 @@ public StringProperty textProperty() { public void setText(String text) { viewModel.setText(text); } + + @Override + public String toString() { + return "ThreeWayMergeCell [getText()=" + getText() + "]"; + } } diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.fxml b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.fxml index 59fde5d824b..fa8b587ee1b 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.fxml +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.fxml @@ -2,6 +2,7 @@ + @@ -42,6 +43,7 @@ + diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java index 3b24ae8406a..272ef907797 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java @@ -1,12 +1,13 @@ package org.jabref.gui.mergeentries.newmergedialog.toolbar; -import java.util.Arrays; - import javafx.beans.binding.BooleanExpression; +import javafx.beans.property.BooleanProperty; import javafx.beans.property.ObjectProperty; +import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.fxml.FXML; import javafx.scene.control.Button; +import javafx.scene.control.CheckBox; import javafx.scene.control.ComboBox; import javafx.scene.control.RadioButton; import javafx.scene.control.ToggleGroup; @@ -43,7 +44,11 @@ public class ThreeWayMergeToolbar extends AnchorPane { @FXML private Button selectRightEntryValuesButton; + @FXML + private CheckBox showAllFieldsBox; + private final ObjectProperty diffHighlightingMethod = new SimpleObjectProperty<>(); + private final BooleanProperty showAllFields = new SimpleBooleanProperty(); private EasyBinding showDiff; public ThreeWayMergeToolbar() { @@ -97,6 +102,7 @@ public DiffView fromString(String string) { diffHighlightingMethodToggleGroup.selectToggle(highlightWordsRadioButton); plainTextOrDiffComboBox.valueProperty().set(PlainTextOrDiff.Diff); + showAllFields.bind(showAllFieldsBox.selectedProperty()); } public ObjectProperty diffViewProperty() { @@ -119,6 +125,14 @@ public void setShowDiff(boolean showDiff) { plainTextOrDiffComboBox.valueProperty().set(showDiff ? PlainTextOrDiff.Diff : PlainTextOrDiff.PLAIN_TEXT); } + public BooleanProperty showAllFieldsProperty() { + return showAllFields; + } + + public boolean isShowAllFields() { + return showAllFields.get(); + } + /** * Convenience method used to disable diff related views when diff is not selected. * @@ -169,10 +183,7 @@ public String getValue() { } public static PlainTextOrDiff fromString(String str) { - return Arrays.stream(values()) - .filter(plainTextOrDiff -> plainTextOrDiff.getValue().equals(str)) - .findAny() - .orElseThrow(IllegalArgumentException::new); + return Enum.valueOf(PlainTextOrDiff.class, str); } } @@ -190,10 +201,7 @@ public String getValue() { } public static DiffView fromString(String str) { - return Arrays.stream(values()) - .filter(diffView -> diffView.getValue().equals(str)) - .findAny() - .orElseThrow(IllegalArgumentException::new); + return Enum.valueOf(DiffView.class, str); } } } From 351142040f64347431edd6f17a053575f4d37b8e Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Fri, 6 Jan 2023 21:20:47 +0100 Subject: [PATCH 08/30] fix checkstlye --- .../jabref/gui/mergeentries/newmergedialog/FieldRowView.java | 4 +--- .../gui/mergeentries/newmergedialog/ThreeWayMergeView.java | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java index 6bcc70c7940..56ab13f1df9 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java @@ -207,8 +207,6 @@ public void hideDiff() { @Override public String toString() { - return "FieldRowView [shouldShowDiffs=" + shouldShowDiffs.get() + ", fieldNameCell=" + fieldNameCell + ", leftValueCell=" + leftValueCell + ", rightValueCell=" + rightValueCell + ", mergedValueCell=" + mergedValueCell +"]"; + return "FieldRowView [shouldShowDiffs=" + shouldShowDiffs.get() + ", fieldNameCell=" + fieldNameCell + ", leftValueCell=" + leftValueCell + ", rightValueCell=" + rightValueCell + ", mergedValueCell=" + mergedValueCell + "]"; } - - } diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java index f82aff37bc6..027494669d9 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java @@ -93,7 +93,7 @@ private void updateDiff() { } } } else { - for(FieldRowView row: fieldRows) { + for (FieldRowView row : fieldRows) { if (!toolbar.isShowAllFields() && row.getLeftValueCell().getText().trim().equals(row.getRightValueCell().getText().trim())) { row.hideRow(); From a2649c861fa4cd58796b6d9a1d16d17b981ddae7 Mon Sep 17 00:00:00 2001 From: Houssem Nasri Date: Sat, 7 Jan 2023 11:43:59 +0100 Subject: [PATCH 09/30] Show/hide indifferent field rows --- .../newmergedialog/FieldRowView.java | 36 +++++++++---------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java index 56ab13f1df9..d8e43c139d7 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java @@ -40,6 +40,8 @@ public class FieldRowView { private final ToggleGroup toggleGroup = new ToggleGroup(); + private GridPane parent; + public FieldRowView(Field field, BibEntry leftEntry, BibEntry rightEntry, BibEntry mergedEntry, FieldMergerFactory fieldMergerFactory, int rowIndex) { viewModel = new FieldRowViewModel(field, leftEntry, rightEntry, mergedEntry, fieldMergerFactory); @@ -48,6 +50,13 @@ public FieldRowView(Field field, BibEntry leftEntry, BibEntry rightEntry, BibEnt rightValueCell = new FieldValueCell(viewModel.getRightFieldValue(), rowIndex); mergedValueCell = new MergedFieldCell(viewModel.getMergedFieldValue(), rowIndex); + // We need to have a reference to the parent grid pane to be able to show/hide the row. F**** you JavaFX + leftValueCell.parentProperty().addListener(e -> { + if (leftValueCell.getParent() instanceof GridPane grid) { + parent = grid; + } + }); + if (FieldMergerFactory.canMerge(field)) { ToggleMergeUnmergeButton toggleMergeUnmergeButton = new ToggleMergeUnmergeButton(field); toggleMergeUnmergeButton.setCanMerge(!viewModel.hasEqualLeftAndRightValues()); @@ -165,28 +174,17 @@ public void showDiff(ShowDiffConfig diffConfig) { } public void hideRow() { - this.leftValueCell.setVisible(false); - this.rightValueCell.setVisible(false); - this.fieldNameCell.setVisible(false); - this.mergedValueCell.setVisible(false); - - // TODO restore style? - this.leftValueCell.setManaged(false); - this.rightValueCell.setManaged(false); - this.fieldNameCell.setManaged(false); - this.mergedValueCell.setManaged(false); + if (parent != null) { + parent.getChildren().removeAll(leftValueCell, rightValueCell, mergedValueCell, fieldNameCell); + } } public void showRow() { - this.leftValueCell.setManaged(true); - this.rightValueCell.setManaged(true); - this.fieldNameCell.setManaged(true); - this.mergedValueCell.setManaged(true); - - this.leftValueCell.setVisible(true); - this.rightValueCell.setVisible(true); - this.fieldNameCell.setVisible(true); - this.mergedValueCell.setVisible(true); + if (parent != null) { + if (!parent.getChildren().contains(leftValueCell)) { + parent.getChildren().addAll(leftValueCell, rightValueCell, mergedValueCell, fieldNameCell); + } + } } public void hideDiff() { From c4de530a32ab860eda61b747cdf864f64b0f4768 Mon Sep 17 00:00:00 2001 From: Houssem Nasri Date: Mon, 16 Jan 2023 11:48:04 +0100 Subject: [PATCH 10/30] Update FieldRowView.java --- .../jabref/gui/mergeentries/newmergedialog/FieldRowView.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java index d8e43c139d7..5e6a6f3c381 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java @@ -50,7 +50,8 @@ public FieldRowView(Field field, BibEntry leftEntry, BibEntry rightEntry, BibEnt rightValueCell = new FieldValueCell(viewModel.getRightFieldValue(), rowIndex); mergedValueCell = new MergedFieldCell(viewModel.getMergedFieldValue(), rowIndex); - // We need to have a reference to the parent grid pane to be able to show/hide the row. F**** you JavaFX + // As a workaround we need to have a reference to the parent grid pane to be able to show/hide the row. + // This won't be necessary when https://bugs.openjdk.org/browse/JDK-8136901 is fixed. leftValueCell.parentProperty().addListener(e -> { if (leftValueCell.getParent() instanceof GridPane grid) { parent = grid; From fe2385e2c9980ba9cbf5cc241413e31c8037a068 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Mon, 16 Jan 2023 20:01:22 +0100 Subject: [PATCH 11/30] checkstyle --- .../gui/mergeentries/newmergedialog/cell/FieldValueCell.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/cell/FieldValueCell.java b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/cell/FieldValueCell.java index 924d9b3f8b6..2a3c3030ac6 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/cell/FieldValueCell.java +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/cell/FieldValueCell.java @@ -198,6 +198,4 @@ public BooleanProperty selectedProperty() { public StyleClassedTextArea getStyleClassedLabel() { return label; } - - } From d2b1f63719810e8ea87e945a266d4006ff8ec440 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Tue, 17 Jan 2023 23:45:46 +0100 Subject: [PATCH 12/30] Add SplitPane to show both entries with preview together Refactor to be able to use inject --- src/main/java/org/jabref/gui/LibraryTab.java | 2 - .../gui/collab/DatabaseChangeDetailsView.java | 3 +- .../DatabaseChangeDetailsViewFactory.java | 12 ++-- .../gui/collab/DatabaseChangeMonitor.java | 6 +- .../collab/DatabaseChangesResolverDialog.java | 15 +++-- .../entrychange/EntryChangeDetailsView.java | 46 +++++++++++++ .../EntryWithPreviewAndSourceDetailsView.java | 54 ++------------- .../entrychange/PreviewWithSourceTab.java | 67 +++++++++++++++++++ .../jabref/gui/dialogs/BackupUIManager.java | 2 +- 9 files changed, 140 insertions(+), 67 deletions(-) create mode 100644 src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java create mode 100644 src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java diff --git a/src/main/java/org/jabref/gui/LibraryTab.java b/src/main/java/org/jabref/gui/LibraryTab.java index ec6e301dd0f..7b43719d7fd 100644 --- a/src/main/java/org/jabref/gui/LibraryTab.java +++ b/src/main/java/org/jabref/gui/LibraryTab.java @@ -770,8 +770,6 @@ public void resetChangeMonitor() { Globals.TASK_EXECUTOR, dialogService, preferencesService, - stateManager, - themeManager, databaseNotificationPane)); } diff --git a/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsView.java b/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsView.java index 565cb7a74c0..7e3d6c18ff5 100644 --- a/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsView.java +++ b/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsView.java @@ -2,6 +2,7 @@ import javafx.scene.layout.AnchorPane; +import org.jabref.gui.collab.entrychange.EntryChangeDetailsView; import org.jabref.gui.collab.entrychange.EntryWithPreviewAndSourceDetailsView; import org.jabref.gui.collab.groupchange.GroupChangeDetailsView; import org.jabref.gui.collab.metedatachange.MetadataChangeDetailsView; @@ -11,5 +12,5 @@ import org.jabref.gui.collab.stringdelete.BibTexStringDeleteDetailsView; import org.jabref.gui.collab.stringrename.BibTexStringRenameDetailsView; -public sealed abstract class DatabaseChangeDetailsView extends AnchorPane permits EntryWithPreviewAndSourceDetailsView, GroupChangeDetailsView, MetadataChangeDetailsView, PreambleChangeDetailsView, BibTexStringAddDetailsView, BibTexStringChangeDetailsView, BibTexStringDeleteDetailsView, BibTexStringRenameDetailsView { +public sealed abstract class DatabaseChangeDetailsView extends AnchorPane permits EntryWithPreviewAndSourceDetailsView, GroupChangeDetailsView, MetadataChangeDetailsView, PreambleChangeDetailsView, BibTexStringAddDetailsView, BibTexStringChangeDetailsView, BibTexStringDeleteDetailsView, BibTexStringRenameDetailsView, EntryChangeDetailsView { } diff --git a/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsViewFactory.java b/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsViewFactory.java index fe835a7e736..b4571f85f2c 100644 --- a/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsViewFactory.java +++ b/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsViewFactory.java @@ -4,6 +4,7 @@ import org.jabref.gui.StateManager; import org.jabref.gui.collab.entryadd.EntryAdd; import org.jabref.gui.collab.entrychange.EntryChange; +import org.jabref.gui.collab.entrychange.EntryChangeDetailsView; import org.jabref.gui.collab.entrychange.EntryWithPreviewAndSourceDetailsView; import org.jabref.gui.collab.entrydelete.EntryDelete; import org.jabref.gui.collab.groupchange.GroupChange; @@ -22,6 +23,7 @@ import org.jabref.gui.collab.stringrename.BibTexStringRenameDetailsView; import org.jabref.gui.theme.ThemeManager; import org.jabref.model.database.BibDatabaseContext; +import org.jabref.model.entry.BibEntryTypesManager; import org.jabref.preferences.PreferencesService; public class DatabaseChangeDetailsViewFactory { @@ -30,23 +32,25 @@ public class DatabaseChangeDetailsViewFactory { private final StateManager stateManager; private final ThemeManager themeManager; private final PreferencesService preferencesService; + private final BibEntryTypesManager entryTypesManager; - public DatabaseChangeDetailsViewFactory(BibDatabaseContext databaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService) { + public DatabaseChangeDetailsViewFactory(BibDatabaseContext databaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService, BibEntryTypesManager entryTypesManager) { this.databaseContext = databaseContext; this.dialogService = dialogService; this.stateManager = stateManager; this.themeManager = themeManager; this.preferencesService = preferencesService; + this.entryTypesManager = entryTypesManager; } public DatabaseChangeDetailsView create(DatabaseChange databaseChange) { // TODO: Use Pattern Matching for switch once it's out of preview if (databaseChange instanceof EntryChange entryChange) { - return new EntryWithPreviewAndSourceDetailsView(entryChange.getNewEntry(), databaseContext, dialogService, stateManager, themeManager, preferencesService); + return new EntryChangeDetailsView(entryChange.getOldEntry(), entryChange.getNewEntry(), databaseContext, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); } else if (databaseChange instanceof EntryAdd entryAdd) { - return new EntryWithPreviewAndSourceDetailsView(entryAdd.getAddedEntry(), databaseContext, dialogService, stateManager, themeManager, preferencesService); + return new EntryWithPreviewAndSourceDetailsView(entryAdd.getAddedEntry(), databaseContext, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); } else if (databaseChange instanceof EntryDelete entryDelete) { - return new EntryWithPreviewAndSourceDetailsView(entryDelete.getDeletedEntry(), databaseContext, dialogService, stateManager, themeManager, preferencesService); + return new EntryWithPreviewAndSourceDetailsView(entryDelete.getDeletedEntry(), databaseContext, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); } else if (databaseChange instanceof BibTexStringAdd stringAdd) { return new BibTexStringAddDetailsView(stringAdd); } else if (databaseChange instanceof BibTexStringDelete stringDelete) { diff --git a/src/main/java/org/jabref/gui/collab/DatabaseChangeMonitor.java b/src/main/java/org/jabref/gui/collab/DatabaseChangeMonitor.java index 2369f1aedad..fed43800e19 100644 --- a/src/main/java/org/jabref/gui/collab/DatabaseChangeMonitor.java +++ b/src/main/java/org/jabref/gui/collab/DatabaseChangeMonitor.java @@ -8,9 +8,7 @@ import org.jabref.gui.DialogService; import org.jabref.gui.LibraryTab; -import org.jabref.gui.StateManager; import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.theme.ThemeManager; import org.jabref.gui.util.BackgroundTask; import org.jabref.gui.util.TaskExecutor; import org.jabref.logic.l10n.Localization; @@ -39,8 +37,6 @@ public DatabaseChangeMonitor(BibDatabaseContext database, TaskExecutor taskExecutor, DialogService dialogService, PreferencesService preferencesService, - StateManager stateManager, - ThemeManager themeManager, LibraryTab.DatabaseNotification notificationPane) { this.database = database; this.fileMonitor = fileMonitor; @@ -63,7 +59,7 @@ public DatabaseChangeMonitor(BibDatabaseContext database, Localization.lang("The library has been modified by another program."), List.of(new Action(Localization.lang("Dismiss changes"), event -> notificationPane.hide()), new Action(Localization.lang("Review changes"), event -> { - dialogService.showCustomDialogAndWait(new DatabaseChangesResolverDialog(changes, database, dialogService, stateManager, themeManager, preferencesService, Localization.lang("External Changes Resolver"))); + dialogService.showCustomDialogAndWait(new DatabaseChangesResolverDialog(changes, database, Localization.lang("External Changes Resolver"))); notificationPane.hide(); })), Duration.ZERO)); diff --git a/src/main/java/org/jabref/gui/collab/DatabaseChangesResolverDialog.java b/src/main/java/org/jabref/gui/collab/DatabaseChangesResolverDialog.java index 5e0f32739c2..5e452d8a562 100644 --- a/src/main/java/org/jabref/gui/collab/DatabaseChangesResolverDialog.java +++ b/src/main/java/org/jabref/gui/collab/DatabaseChangesResolverDialog.java @@ -19,6 +19,7 @@ import org.jabref.gui.theme.ThemeManager; import org.jabref.gui.util.BaseDialog; import org.jabref.model.database.BibDatabaseContext; +import org.jabref.model.entry.BibEntryTypesManager; import org.jabref.preferences.PreferencesService; import com.airhacks.afterburner.views.ViewLoader; @@ -46,12 +47,16 @@ public class DatabaseChangesResolverDialog extends BaseDialog { private BorderPane changeInfoPane; private final List changes; + private final BibDatabaseContext database; private ExternalChangesResolverViewModel viewModel; - private final DatabaseChangeDetailsViewFactory databaseChangeDetailsViewFactory; - @Inject private UndoManager undoManager; + @Inject private StateManager stateManager; + @Inject private DialogService dialogService; + @Inject private PreferencesService preferencesService; + @Inject private ThemeManager themeManager; + @Inject private BibEntryTypesManager entryTypesManager; /** * A dialog going through given changes, which are diffs to the provided database. @@ -60,9 +65,9 @@ public class DatabaseChangesResolverDialog extends BaseDialog { * @param changes The list of changes * @param database The database to apply the changes to */ - public DatabaseChangesResolverDialog(List changes, BibDatabaseContext database, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService, String dialogTitle) { + public DatabaseChangesResolverDialog(List changes, BibDatabaseContext database, String dialogTitle) { this.changes = changes; - this.databaseChangeDetailsViewFactory = new DatabaseChangeDetailsViewFactory(database, dialogService, stateManager, themeManager, preferencesService); + this.database = database; this.setTitle(dialogTitle); ViewLoader.view(this) @@ -82,6 +87,8 @@ public DatabaseChangesResolverDialog(List changes, BibDatabaseCo @FXML private void initialize() { + DatabaseChangeDetailsViewFactory databaseChangeDetailsViewFactory = new DatabaseChangeDetailsViewFactory(database, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); + viewModel = new ExternalChangesResolverViewModel(changes, undoManager); changeName.setCellValueFactory(data -> new SimpleStringProperty(data.getValue().getName())); diff --git a/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java b/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java new file mode 100644 index 00000000000..774b0d91423 --- /dev/null +++ b/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java @@ -0,0 +1,46 @@ +package org.jabref.gui.collab.entrychange; + +import javafx.geometry.Orientation; +import javafx.scene.control.SplitPane; +import javafx.scene.control.TabPane; + +import org.jabref.gui.DialogService; +import org.jabref.gui.StateManager; +import org.jabref.gui.collab.DatabaseChangeDetailsView; +import org.jabref.gui.theme.ThemeManager; +import org.jabref.model.database.BibDatabaseContext; +import org.jabref.model.entry.BibEntry; +import org.jabref.model.entry.BibEntryTypesManager; +import org.jabref.preferences.PreferencesService; + +import com.tobiasdiez.easybind.EasyBind; + +public final class EntryChangeDetailsView extends DatabaseChangeDetailsView { + + private final PreviewWithSourceTab previewWithSourceTab = new PreviewWithSourceTab(); + + public EntryChangeDetailsView(BibEntry oldEntry, BibEntry newEntry, BibDatabaseContext databaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService, BibEntryTypesManager entryTypesManager) { + + TabPane oldEntryTabPane = previewWithSourceTab.getPreviewWithSourceTab(oldEntry, databaseContext, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); + TabPane newEntryTabPane = previewWithSourceTab.getPreviewWithSourceTab(newEntry, databaseContext, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); + + EasyBind.subscribe(oldEntryTabPane.getSelectionModel().selectedIndexProperty(), selectedIndex -> { + newEntryTabPane.getSelectionModel().select(selectedIndex.intValue()); + }); + + EasyBind.subscribe(newEntryTabPane.getSelectionModel().selectedIndexProperty(), selectedIndex -> { + if (oldEntryTabPane.getSelectionModel().getSelectedIndex() != selectedIndex.intValue()) { + oldEntryTabPane.getSelectionModel().select(selectedIndex.intValue()); + } + }); + + SplitPane split = new SplitPane(oldEntryTabPane, newEntryTabPane); + split.setOrientation(Orientation.HORIZONTAL); + + setLeftAnchor(split, 8d); + setTopAnchor(split, 8d); + setRightAnchor(split, 8d); + setBottomAnchor(split, 8d); + this.getChildren().add(split); + } +} diff --git a/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java b/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java index bdb3f287795..2e0af86d7f0 100644 --- a/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java +++ b/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java @@ -1,61 +1,23 @@ package org.jabref.gui.collab.entrychange; -import java.io.IOException; -import java.io.StringWriter; - -import javafx.scene.control.Tab; import javafx.scene.control.TabPane; import org.jabref.gui.DialogService; -import org.jabref.gui.Globals; import org.jabref.gui.StateManager; import org.jabref.gui.collab.DatabaseChangeDetailsView; -import org.jabref.gui.preview.PreviewViewer; import org.jabref.gui.theme.ThemeManager; -import org.jabref.logic.bibtex.BibEntryWriter; -import org.jabref.logic.bibtex.FieldWriter; -import org.jabref.logic.bibtex.FieldWriterPreferences; -import org.jabref.logic.exporter.BibWriter; -import org.jabref.logic.l10n.Localization; -import org.jabref.logic.util.OS; import org.jabref.model.database.BibDatabaseContext; -import org.jabref.model.database.BibDatabaseMode; import org.jabref.model.entry.BibEntry; +import org.jabref.model.entry.BibEntryTypesManager; import org.jabref.preferences.PreferencesService; -import org.fxmisc.flowless.VirtualizedScrollPane; -import org.fxmisc.richtext.CodeArea; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - public final class EntryWithPreviewAndSourceDetailsView extends DatabaseChangeDetailsView { - private static final Logger LOGGER = LoggerFactory.getLogger(EntryWithPreviewAndSourceDetailsView.class); - - public EntryWithPreviewAndSourceDetailsView(BibEntry entry, BibDatabaseContext bibDatabaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService) { - PreviewViewer previewViewer = new PreviewViewer(bibDatabaseContext, dialogService, stateManager, themeManager); - previewViewer.setLayout(preferencesService.getPreviewPreferences().getSelectedPreviewLayout()); - previewViewer.setEntry(entry); - - CodeArea codeArea = new CodeArea(); - codeArea.setId("bibtexcodearea"); - codeArea.setWrapText(true); - codeArea.setDisable(true); + private final PreviewWithSourceTab previewWithSourceTab = new PreviewWithSourceTab(); - TabPane tabPanePreviewCode = new TabPane(); - Tab previewTab = new Tab(Localization.lang("Entry preview"), previewViewer); - - try { - codeArea.appendText(getSourceString(entry, bibDatabaseContext.getMode(), preferencesService.getFieldWriterPreferences())); - } catch (IOException e) { - LOGGER.error("Error getting Bibtex", entry); - } - codeArea.setEditable(true); - VirtualizedScrollPane scrollableCodeArea = new VirtualizedScrollPane<>(codeArea); - Tab codeTab = new Tab(Localization.lang("%0 source", bibDatabaseContext.getMode().getFormattedName()), scrollableCodeArea); - - tabPanePreviewCode.getTabs().addAll(previewTab, codeTab); + public EntryWithPreviewAndSourceDetailsView(BibEntry entry, BibDatabaseContext bibDatabaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService, BibEntryTypesManager entryTypesManager) { + TabPane tabPanePreviewCode = previewWithSourceTab.getPreviewWithSourceTab(entry, bibDatabaseContext, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); setLeftAnchor(tabPanePreviewCode, 8d); setTopAnchor(tabPanePreviewCode, 8d); setRightAnchor(tabPanePreviewCode, 8d); @@ -63,12 +25,4 @@ public EntryWithPreviewAndSourceDetailsView(BibEntry entry, BibDatabaseContext b getChildren().setAll(tabPanePreviewCode); } - - private String getSourceString(BibEntry entry, BibDatabaseMode type, FieldWriterPreferences fieldWriterPreferences) throws IOException { - StringWriter writer = new StringWriter(); - BibWriter bibWriter = new BibWriter(writer, OS.NEWLINE); - FieldWriter fieldWriter = FieldWriter.buildIgnoreHashes(fieldWriterPreferences); - new BibEntryWriter(fieldWriter, Globals.entryTypesManager).write(entry, bibWriter, type); - return writer.toString(); - } } diff --git a/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java b/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java new file mode 100644 index 00000000000..89f330987d0 --- /dev/null +++ b/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java @@ -0,0 +1,67 @@ +package org.jabref.gui.collab.entrychange; + +import java.io.IOException; +import java.io.StringWriter; + +import javafx.scene.control.Tab; +import javafx.scene.control.TabPane; + +import org.jabref.gui.DialogService; +import org.jabref.gui.StateManager; +import org.jabref.gui.preview.PreviewViewer; +import org.jabref.gui.theme.ThemeManager; +import org.jabref.logic.bibtex.BibEntryWriter; +import org.jabref.logic.bibtex.FieldWriter; +import org.jabref.logic.bibtex.FieldWriterPreferences; +import org.jabref.logic.exporter.BibWriter; +import org.jabref.logic.l10n.Localization; +import org.jabref.logic.util.OS; +import org.jabref.model.database.BibDatabaseContext; +import org.jabref.model.database.BibDatabaseMode; +import org.jabref.model.entry.BibEntry; +import org.jabref.model.entry.BibEntryTypesManager; +import org.jabref.preferences.PreferencesService; + +import org.fxmisc.flowless.VirtualizedScrollPane; +import org.fxmisc.richtext.CodeArea; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class PreviewWithSourceTab { + + private static final Logger LOGGER = LoggerFactory.getLogger(PreviewWithSourceTab.class); + + public TabPane getPreviewWithSourceTab(BibEntry entry, BibDatabaseContext bibDatabaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService, BibEntryTypesManager entryTypesManager) { + PreviewViewer previewViewer = new PreviewViewer(bibDatabaseContext, dialogService, stateManager, themeManager); + previewViewer.setLayout(preferencesService.getPreviewPreferences().getSelectedPreviewLayout()); + previewViewer.setEntry(entry); + + CodeArea codeArea = new CodeArea(); + codeArea.setId("bibtexcodearea"); + codeArea.setWrapText(true); + codeArea.setDisable(true); + + TabPane tabPanePreviewCode = new TabPane(); + Tab previewTab = new Tab(Localization.lang("Entry preview"), previewViewer); + + try { + codeArea.appendText(getSourceString(entry, bibDatabaseContext.getMode(), preferencesService.getFieldWriterPreferences(), entryTypesManager)); + } catch (IOException e) { + LOGGER.error("Error getting Bibtex", entry); + } + codeArea.setEditable(true); + VirtualizedScrollPane scrollableCodeArea = new VirtualizedScrollPane<>(codeArea); + Tab codeTab = new Tab(Localization.lang("%0 source", bibDatabaseContext.getMode().getFormattedName()), scrollableCodeArea); + + tabPanePreviewCode.getTabs().addAll(previewTab, codeTab); + return tabPanePreviewCode; + } + + private String getSourceString(BibEntry entry, BibDatabaseMode type, FieldWriterPreferences fieldWriterPreferences, BibEntryTypesManager entryTypesManager) throws IOException { + StringWriter writer = new StringWriter(); + BibWriter bibWriter = new BibWriter(writer, OS.NEWLINE); + FieldWriter fieldWriter = FieldWriter.buildIgnoreHashes(fieldWriterPreferences); + new BibEntryWriter(fieldWriter, entryTypesManager).write(entry, bibWriter, type); + return writer.toString(); + } +} diff --git a/src/main/java/org/jabref/gui/dialogs/BackupUIManager.java b/src/main/java/org/jabref/gui/dialogs/BackupUIManager.java index 1d07ac2b982..3c0536bf4af 100644 --- a/src/main/java/org/jabref/gui/dialogs/BackupUIManager.java +++ b/src/main/java/org/jabref/gui/dialogs/BackupUIManager.java @@ -72,7 +72,7 @@ private static Optional showReviewBackupDialog(DialogService dialo List changes = DatabaseChangeList.compareAndGetChanges(originalDatabase, backupDatabase, changeResolverFactory); DatabaseChangesResolverDialog reviewBackupDialog = new DatabaseChangesResolverDialog( changes, - originalDatabase, dialogService, Globals.stateManager, Globals.getThemeManager(), Globals.prefs, "Review Backup" + originalDatabase, "Review Backup" ); var allChangesResolved = dialogService.showCustomDialogAndWait(reviewBackupDialog); if (allChangesResolved.isEmpty() || !allChangesResolved.get()) { From fab00232ce2c7892e45ca668cb77a0885a4497ad Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Tue, 17 Jan 2023 23:50:38 +0100 Subject: [PATCH 13/30] checkstyle --- .../jabref/gui/collab/entrychange/EntryChangeDetailsView.java | 1 - .../collab/entrychange/EntryWithPreviewAndSourceDetailsView.java | 1 - 2 files changed, 2 deletions(-) diff --git a/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java b/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java index 774b0d91423..13eaf841bf9 100644 --- a/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java +++ b/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java @@ -20,7 +20,6 @@ public final class EntryChangeDetailsView extends DatabaseChangeDetailsView { private final PreviewWithSourceTab previewWithSourceTab = new PreviewWithSourceTab(); public EntryChangeDetailsView(BibEntry oldEntry, BibEntry newEntry, BibDatabaseContext databaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService, BibEntryTypesManager entryTypesManager) { - TabPane oldEntryTabPane = previewWithSourceTab.getPreviewWithSourceTab(oldEntry, databaseContext, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); TabPane newEntryTabPane = previewWithSourceTab.getPreviewWithSourceTab(newEntry, databaseContext, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); diff --git a/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java b/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java index 2e0af86d7f0..b8ddecd804c 100644 --- a/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java +++ b/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java @@ -16,7 +16,6 @@ public final class EntryWithPreviewAndSourceDetailsView extends DatabaseChangeDe private final PreviewWithSourceTab previewWithSourceTab = new PreviewWithSourceTab(); public EntryWithPreviewAndSourceDetailsView(BibEntry entry, BibDatabaseContext bibDatabaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService, BibEntryTypesManager entryTypesManager) { - TabPane tabPanePreviewCode = previewWithSourceTab.getPreviewWithSourceTab(entry, bibDatabaseContext, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); setLeftAnchor(tabPanePreviewCode, 8d); setTopAnchor(tabPanePreviewCode, 8d); From c35de7bc970ccf4c57340b155b669f5f8f851d29 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Sat, 21 Jan 2023 18:51:40 +0100 Subject: [PATCH 14/30] Change boolean logic, default show all fields Fix bug in plain text selection with hiding/showing all fields --- .../newmergedialog/ThreeWayMergeView.java | 7 ++++--- .../toolbar/ThreeWayMergeToolbar.fxml | 2 +- .../toolbar/ThreeWayMergeToolbar.java | 14 +++++++------- src/main/resources/l10n/JabRef_en.properties | 1 + 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java index 027494669d9..638f1789a7c 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java @@ -74,14 +74,14 @@ private void initializeToolbar() { toolbar.showDiffProperty().addListener(e -> updateDiff()); toolbar.diffViewProperty().addListener(e -> updateDiff()); toolbar.diffHighlightingMethodProperty().addListener(e -> updateDiff()); - toolbar.showAllFieldsProperty().addListener(e -> updateDiff()); + toolbar.hideEqualFieldsProperty().addListener(e -> updateDiff()); this.updateDiff(); } private void updateDiff() { if (toolbar.isShowDiffEnabled()) { for (FieldRowView row : fieldRows) { - if (!toolbar.isShowAllFields() && + if (toolbar.hideEqualsField()&& row.getLeftValueCell().getText().trim().equals(row.getRightValueCell().getText().trim())) { row.hideRow(); continue; @@ -94,11 +94,12 @@ private void updateDiff() { } } else { for (FieldRowView row : fieldRows) { - if (!toolbar.isShowAllFields() && + if (toolbar.hideEqualsField() && row.getLeftValueCell().getText().trim().equals(row.getRightValueCell().getText().trim())) { row.hideRow(); continue; } + row.showRow(); row.hideDiff(); } } diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.fxml b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.fxml index fa8b587ee1b..9504a090063 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.fxml +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.fxml @@ -43,7 +43,7 @@ - + diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java index 272ef907797..a261d6daf06 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java @@ -45,10 +45,10 @@ public class ThreeWayMergeToolbar extends AnchorPane { private Button selectRightEntryValuesButton; @FXML - private CheckBox showAllFieldsBox; + private CheckBox hideEqualFieldsCheck; private final ObjectProperty diffHighlightingMethod = new SimpleObjectProperty<>(); - private final BooleanProperty showAllFields = new SimpleBooleanProperty(); + private final BooleanProperty hideEqualFields = new SimpleBooleanProperty(); private EasyBinding showDiff; public ThreeWayMergeToolbar() { @@ -102,7 +102,7 @@ public DiffView fromString(String string) { diffHighlightingMethodToggleGroup.selectToggle(highlightWordsRadioButton); plainTextOrDiffComboBox.valueProperty().set(PlainTextOrDiff.Diff); - showAllFields.bind(showAllFieldsBox.selectedProperty()); + hideEqualFields.bind(hideEqualFieldsCheck.selectedProperty()); } public ObjectProperty diffViewProperty() { @@ -125,12 +125,12 @@ public void setShowDiff(boolean showDiff) { plainTextOrDiffComboBox.valueProperty().set(showDiff ? PlainTextOrDiff.Diff : PlainTextOrDiff.PLAIN_TEXT); } - public BooleanProperty showAllFieldsProperty() { - return showAllFields; + public BooleanProperty hideEqualFieldsProperty() { + return hideEqualFields; } - public boolean isShowAllFields() { - return showAllFields.get(); + public boolean hideEqualsField() { + return hideEqualFields.get(); } /** diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties index bc02566d0be..f3dc38d1a83 100644 --- a/src/main/resources/l10n/JabRef_en.properties +++ b/src/main/resources/l10n/JabRef_en.properties @@ -2493,6 +2493,7 @@ Split\ View=Split View Plain\ Text=Plain Text Show\ Diff=Show Diff Merged\ Entry=Merged Entry +Hide\ equal\ fields=Hide equal fields Edit\ file\ link=Edit file link From ce792af44effdc0fe886f7867fbfe4bf52ec08f6 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Sat, 21 Jan 2023 19:29:44 +0100 Subject: [PATCH 15/30] remove virtualized scrollpane breaks mouse scrolling fix checkstyle --- .../gui/collab/entrychange/EntryChangeDetailsView.java | 8 +++++--- .../gui/collab/entrychange/PreviewWithSourceTab.java | 4 +--- .../mergeentries/newmergedialog/ThreeWayMergeView.java | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java b/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java index 13eaf841bf9..c4f35fffe25 100644 --- a/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java +++ b/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java @@ -17,11 +17,13 @@ public final class EntryChangeDetailsView extends DatabaseChangeDetailsView { - private final PreviewWithSourceTab previewWithSourceTab = new PreviewWithSourceTab(); + private final PreviewWithSourceTab oldPreviewWithSourcesTab = new PreviewWithSourceTab(); + private final PreviewWithSourceTab newPreviewWithSourcesTab = new PreviewWithSourceTab(); public EntryChangeDetailsView(BibEntry oldEntry, BibEntry newEntry, BibDatabaseContext databaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService, BibEntryTypesManager entryTypesManager) { - TabPane oldEntryTabPane = previewWithSourceTab.getPreviewWithSourceTab(oldEntry, databaseContext, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); - TabPane newEntryTabPane = previewWithSourceTab.getPreviewWithSourceTab(newEntry, databaseContext, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); + + TabPane oldEntryTabPane = oldPreviewWithSourcesTab.getPreviewWithSourceTab(oldEntry, databaseContext, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); + TabPane newEntryTabPane = newPreviewWithSourcesTab.getPreviewWithSourceTab(newEntry, databaseContext, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); EasyBind.subscribe(oldEntryTabPane.getSelectionModel().selectedIndexProperty(), selectedIndex -> { newEntryTabPane.getSelectionModel().select(selectedIndex.intValue()); diff --git a/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java b/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java index 89f330987d0..fa925bd41c4 100644 --- a/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java +++ b/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java @@ -22,7 +22,6 @@ import org.jabref.model.entry.BibEntryTypesManager; import org.jabref.preferences.PreferencesService; -import org.fxmisc.flowless.VirtualizedScrollPane; import org.fxmisc.richtext.CodeArea; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -50,8 +49,7 @@ public TabPane getPreviewWithSourceTab(BibEntry entry, BibDatabaseContext bibDat LOGGER.error("Error getting Bibtex", entry); } codeArea.setEditable(true); - VirtualizedScrollPane scrollableCodeArea = new VirtualizedScrollPane<>(codeArea); - Tab codeTab = new Tab(Localization.lang("%0 source", bibDatabaseContext.getMode().getFormattedName()), scrollableCodeArea); + Tab codeTab = new Tab(Localization.lang("%0 source", bibDatabaseContext.getMode().getFormattedName()), codeArea); tabPanePreviewCode.getTabs().addAll(previewTab, codeTab); return tabPanePreviewCode; diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java index 638f1789a7c..d3762bc3b30 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java @@ -81,7 +81,7 @@ private void initializeToolbar() { private void updateDiff() { if (toolbar.isShowDiffEnabled()) { for (FieldRowView row : fieldRows) { - if (toolbar.hideEqualsField()&& + if (toolbar.hideEqualsField() && row.getLeftValueCell().getText().trim().equals(row.getRightValueCell().getText().trim())) { row.hideRow(); continue; From ae715edcf9aa9a5dc3071cfce9081e4a6d1f837b Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Sat, 21 Jan 2023 19:34:01 +0100 Subject: [PATCH 16/30] checkstyle --- .../jabref/gui/collab/entrychange/EntryChangeDetailsView.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java b/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java index c4f35fffe25..765e0d0bfcd 100644 --- a/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java +++ b/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java @@ -16,12 +16,10 @@ import com.tobiasdiez.easybind.EasyBind; public final class EntryChangeDetailsView extends DatabaseChangeDetailsView { - private final PreviewWithSourceTab oldPreviewWithSourcesTab = new PreviewWithSourceTab(); private final PreviewWithSourceTab newPreviewWithSourcesTab = new PreviewWithSourceTab(); public EntryChangeDetailsView(BibEntry oldEntry, BibEntry newEntry, BibDatabaseContext databaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService, BibEntryTypesManager entryTypesManager) { - TabPane oldEntryTabPane = oldPreviewWithSourcesTab.getPreviewWithSourceTab(oldEntry, databaseContext, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); TabPane newEntryTabPane = newPreviewWithSourcesTab.getPreviewWithSourceTab(newEntry, databaseContext, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); From 1d899b6e2fe7e4f3004cb786c6f566cd02ad0fc9 Mon Sep 17 00:00:00 2001 From: Houssem Nasri Date: Sat, 21 Jan 2023 23:41:29 +0100 Subject: [PATCH 17/30] Add TODO for optimization --- .../org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java b/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java index fa925bd41c4..7d2dd92234b 100644 --- a/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java +++ b/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java @@ -31,6 +31,8 @@ public class PreviewWithSourceTab { private static final Logger LOGGER = LoggerFactory.getLogger(PreviewWithSourceTab.class); public TabPane getPreviewWithSourceTab(BibEntry entry, BibDatabaseContext bibDatabaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService, BibEntryTypesManager entryTypesManager) { + // TODO: Optimization: Each PreviewViewer instance creates a WebView on initialization. WebView instances are + // very heavy on CPU and memory. Thus, we should consider sharing PreviewViewer between entry changes. PreviewViewer previewViewer = new PreviewViewer(bibDatabaseContext, dialogService, stateManager, themeManager); previewViewer.setLayout(preferencesService.getPreviewPreferences().getSelectedPreviewLayout()); previewViewer.setEntry(entry); From 175e2ffa365808ca5ea92df3d8f948b5a17faf57 Mon Sep 17 00:00:00 2001 From: Houssem Nasri Date: Sat, 21 Jan 2023 23:42:15 +0100 Subject: [PATCH 18/30] Fix typo --- .../org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java b/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java index 7d2dd92234b..d5439a42595 100644 --- a/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java +++ b/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java @@ -48,7 +48,7 @@ public TabPane getPreviewWithSourceTab(BibEntry entry, BibDatabaseContext bibDat try { codeArea.appendText(getSourceString(entry, bibDatabaseContext.getMode(), preferencesService.getFieldWriterPreferences(), entryTypesManager)); } catch (IOException e) { - LOGGER.error("Error getting Bibtex", entry); + LOGGER.error("Error getting Bibtex: {}", entry); } codeArea.setEditable(true); Tab codeTab = new Tab(Localization.lang("%0 source", bibDatabaseContext.getMode().getFormattedName()), codeArea); From cfa9e407e5970838db66b42f7081e80c64b227fe Mon Sep 17 00:00:00 2001 From: Houssem Nasri Date: Sun, 22 Jan 2023 00:01:42 +0100 Subject: [PATCH 19/30] row.show() reads better than row.showRow() --- .../gui/mergeentries/newmergedialog/FieldRowView.java | 6 +++--- .../gui/mergeentries/newmergedialog/ThreeWayMergeView.java | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java index 5e6a6f3c381..00e55a4b42a 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java @@ -155,7 +155,7 @@ public MergedFieldCell getMergedValueCell() { } public void showDiff(ShowDiffConfig diffConfig) { - showRow(); + show(); if (!rightValueCell.isVisible() || StringUtil.isNullOrEmpty(viewModel.getLeftFieldValue()) || StringUtil.isNullOrEmpty(viewModel.getRightFieldValue())) { return; } @@ -174,13 +174,13 @@ public void showDiff(ShowDiffConfig diffConfig) { } } - public void hideRow() { + public void hide() { if (parent != null) { parent.getChildren().removeAll(leftValueCell, rightValueCell, mergedValueCell, fieldNameCell); } } - public void showRow() { + public void show() { if (parent != null) { if (!parent.getChildren().contains(leftValueCell)) { parent.getChildren().addAll(leftValueCell, rightValueCell, mergedValueCell, fieldNameCell); diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java index d3762bc3b30..36796ca94ef 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java @@ -83,7 +83,7 @@ private void updateDiff() { for (FieldRowView row : fieldRows) { if (toolbar.hideEqualsField() && row.getLeftValueCell().getText().trim().equals(row.getRightValueCell().getText().trim())) { - row.hideRow(); + row.hide(); continue; } if (row.getFieldNameCell().getText().equals("Groups") && (row.getLeftValueCell().getText().contains(keywordSeparator) || row.getRightValueCell().getText().contains(keywordSeparator))) { @@ -96,10 +96,10 @@ private void updateDiff() { for (FieldRowView row : fieldRows) { if (toolbar.hideEqualsField() && row.getLeftValueCell().getText().trim().equals(row.getRightValueCell().getText().trim())) { - row.hideRow(); + row.hide(); continue; } - row.showRow(); + row.show(); row.hideDiff(); } } From 4dd0b0b25ff63f77d8f5b5fe69000824bb92c681 Mon Sep 17 00:00:00 2001 From: Houssem Nasri Date: Sun, 22 Jan 2023 00:38:16 +0100 Subject: [PATCH 20/30] Refactor code --- .../newmergedialog/FieldRowView.java | 5 ++- .../newmergedialog/ThreeWayMergeView.java | 34 +++++++++---------- .../toolbar/ThreeWayMergeToolbar.java | 4 +-- 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java index 00e55a4b42a..e2522a05f21 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/FieldRowView.java @@ -155,7 +155,6 @@ public MergedFieldCell getMergedValueCell() { } public void showDiff(ShowDiffConfig diffConfig) { - show(); if (!rightValueCell.isVisible() || StringUtil.isNullOrEmpty(viewModel.getLeftFieldValue()) || StringUtil.isNullOrEmpty(viewModel.getRightFieldValue())) { return; } @@ -204,6 +203,10 @@ public void hideDiff() { getRightValueCell().getStyleClassedLabel().replaceText(viewModel.getRightFieldValue()); } + public boolean hasEqualLeftAndRightValues() { + return viewModel.hasEqualLeftAndRightValues(); + } + @Override public String toString() { return "FieldRowView [shouldShowDiffs=" + shouldShowDiffs.get() + ", fieldNameCell=" + fieldNameCell + ", leftValueCell=" + leftValueCell + ", rightValueCell=" + rightValueCell + ", mergedValueCell=" + mergedValueCell + "]"; diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java index 36796ca94ef..aa6ae8cbd8e 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java @@ -74,18 +74,26 @@ private void initializeToolbar() { toolbar.showDiffProperty().addListener(e -> updateDiff()); toolbar.diffViewProperty().addListener(e -> updateDiff()); toolbar.diffHighlightingMethodProperty().addListener(e -> updateDiff()); - toolbar.hideEqualFieldsProperty().addListener(e -> updateDiff()); - this.updateDiff(); + toolbar.hideEqualFieldsProperty().addListener(e -> showOrHideEqualFields()); + updateDiff(); + showOrHideEqualFields(); } - private void updateDiff() { - if (toolbar.isShowDiffEnabled()) { - for (FieldRowView row : fieldRows) { - if (toolbar.hideEqualsField() && - row.getLeftValueCell().getText().trim().equals(row.getRightValueCell().getText().trim())) { + private void showOrHideEqualFields() { + for (FieldRowView row : fieldRows) { + if (toolbar.shouldHideEqualFields()) { + if (row.hasEqualLeftAndRightValues()) { row.hide(); - continue; } + } else { + row.show(); + } + } + } + + private void updateDiff() { + if (toolbar.shouldShowDiffs()) { + for (FieldRowView row : fieldRows) { if (row.getFieldNameCell().getText().equals("Groups") && (row.getLeftValueCell().getText().contains(keywordSeparator) || row.getRightValueCell().getText().contains(keywordSeparator))) { row.showDiff(new ShowDiffConfig(toolbar.getDiffView(), new GroupDiffMode(keywordSeparator))); } else { @@ -93,15 +101,7 @@ private void updateDiff() { } } } else { - for (FieldRowView row : fieldRows) { - if (toolbar.hideEqualsField() && - row.getLeftValueCell().getText().trim().equals(row.getRightValueCell().getText().trim())) { - row.hide(); - continue; - } - row.show(); - row.hideDiff(); - } + fieldRows.forEach(FieldRowView::hideDiff); } } diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java index a261d6daf06..505641bafba 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java @@ -129,7 +129,7 @@ public BooleanProperty hideEqualFieldsProperty() { return hideEqualFields; } - public boolean hideEqualsField() { + public boolean shouldHideEqualFields() { return hideEqualFields.get(); } @@ -145,7 +145,7 @@ public EasyBinding notShowDiffProperty() { return showDiffProperty().map(showDiff -> !showDiff); } - public Boolean isShowDiffEnabled() { + public Boolean shouldShowDiffs() { return showDiffProperty().get(); } From e970e884fe00e8bd71f04e8ac61aeecffb0b1203 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Sat, 28 Jan 2023 20:22:32 +0100 Subject: [PATCH 21/30] Create PreviewView in advance at least for added and removed Add in JabRef/On Disk as title --- .../DatabaseChangeDetailsViewFactory.java | 11 ++++++---- .../collab/DatabaseChangesResolverDialog.java | 5 ++++- .../entrychange/EntryChangeDetailsView.java | 12 +++++++--- .../entrychange/EntryChangeResolver.java | 2 +- .../EntryWithPreviewAndSourceDetailsView.java | 8 +++---- .../entrychange/PreviewWithSourceTab.java | 22 ++++++++++++------- src/main/resources/l10n/JabRef_en.properties | 8 +++++-- 7 files changed, 44 insertions(+), 24 deletions(-) diff --git a/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsViewFactory.java b/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsViewFactory.java index b4571f85f2c..d72d0fb0cb8 100644 --- a/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsViewFactory.java +++ b/src/main/java/org/jabref/gui/collab/DatabaseChangeDetailsViewFactory.java @@ -21,6 +21,7 @@ import org.jabref.gui.collab.stringdelete.BibTexStringDeleteDetailsView; import org.jabref.gui.collab.stringrename.BibTexStringRename; import org.jabref.gui.collab.stringrename.BibTexStringRenameDetailsView; +import org.jabref.gui.preview.PreviewViewer; import org.jabref.gui.theme.ThemeManager; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntryTypesManager; @@ -33,24 +34,26 @@ public class DatabaseChangeDetailsViewFactory { private final ThemeManager themeManager; private final PreferencesService preferencesService; private final BibEntryTypesManager entryTypesManager; + private final PreviewViewer previewViewer; - public DatabaseChangeDetailsViewFactory(BibDatabaseContext databaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService, BibEntryTypesManager entryTypesManager) { + public DatabaseChangeDetailsViewFactory(BibDatabaseContext databaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService, BibEntryTypesManager entryTypesManager, PreviewViewer previewViewer) { this.databaseContext = databaseContext; this.dialogService = dialogService; this.stateManager = stateManager; this.themeManager = themeManager; this.preferencesService = preferencesService; this.entryTypesManager = entryTypesManager; + this.previewViewer = previewViewer; } public DatabaseChangeDetailsView create(DatabaseChange databaseChange) { // TODO: Use Pattern Matching for switch once it's out of preview if (databaseChange instanceof EntryChange entryChange) { - return new EntryChangeDetailsView(entryChange.getOldEntry(), entryChange.getNewEntry(), databaseContext, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); + return new EntryChangeDetailsView(entryChange.getOldEntry(), entryChange.getNewEntry(), databaseContext, dialogService, stateManager, themeManager, preferencesService, entryTypesManager, previewViewer); } else if (databaseChange instanceof EntryAdd entryAdd) { - return new EntryWithPreviewAndSourceDetailsView(entryAdd.getAddedEntry(), databaseContext, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); + return new EntryWithPreviewAndSourceDetailsView(entryAdd.getAddedEntry(), databaseContext, preferencesService, entryTypesManager, previewViewer); } else if (databaseChange instanceof EntryDelete entryDelete) { - return new EntryWithPreviewAndSourceDetailsView(entryDelete.getDeletedEntry(), databaseContext, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); + return new EntryWithPreviewAndSourceDetailsView(entryDelete.getDeletedEntry(), databaseContext, preferencesService, entryTypesManager, previewViewer); } else if (databaseChange instanceof BibTexStringAdd stringAdd) { return new BibTexStringAddDetailsView(stringAdd); } else if (databaseChange instanceof BibTexStringDelete stringDelete) { diff --git a/src/main/java/org/jabref/gui/collab/DatabaseChangesResolverDialog.java b/src/main/java/org/jabref/gui/collab/DatabaseChangesResolverDialog.java index 5e452d8a562..3851d5b4da3 100644 --- a/src/main/java/org/jabref/gui/collab/DatabaseChangesResolverDialog.java +++ b/src/main/java/org/jabref/gui/collab/DatabaseChangesResolverDialog.java @@ -16,6 +16,7 @@ import org.jabref.gui.DialogService; import org.jabref.gui.StateManager; +import org.jabref.gui.preview.PreviewViewer; import org.jabref.gui.theme.ThemeManager; import org.jabref.gui.util.BaseDialog; import org.jabref.model.database.BibDatabaseContext; @@ -37,6 +38,7 @@ public class DatabaseChangesResolverDialog extends BaseDialog { */ private final Map DETAILS_VIEW_CACHE = new HashMap<>(); + @FXML private TableView changesTableView; @FXML @@ -87,7 +89,8 @@ public DatabaseChangesResolverDialog(List changes, BibDatabaseCo @FXML private void initialize() { - DatabaseChangeDetailsViewFactory databaseChangeDetailsViewFactory = new DatabaseChangeDetailsViewFactory(database, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); + PreviewViewer previewViewer = new PreviewViewer(database, dialogService, stateManager, themeManager); + DatabaseChangeDetailsViewFactory databaseChangeDetailsViewFactory = new DatabaseChangeDetailsViewFactory(database, dialogService, stateManager, themeManager, preferencesService, entryTypesManager, previewViewer); viewModel = new ExternalChangesResolverViewModel(changes, undoManager); diff --git a/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java b/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java index 765e0d0bfcd..ed9fbb51b95 100644 --- a/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java +++ b/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java @@ -7,7 +7,9 @@ import org.jabref.gui.DialogService; import org.jabref.gui.StateManager; import org.jabref.gui.collab.DatabaseChangeDetailsView; +import org.jabref.gui.preview.PreviewViewer; import org.jabref.gui.theme.ThemeManager; +import org.jabref.logic.l10n.Localization; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.BibEntryTypesManager; @@ -19,9 +21,13 @@ public final class EntryChangeDetailsView extends DatabaseChangeDetailsView { private final PreviewWithSourceTab oldPreviewWithSourcesTab = new PreviewWithSourceTab(); private final PreviewWithSourceTab newPreviewWithSourcesTab = new PreviewWithSourceTab(); - public EntryChangeDetailsView(BibEntry oldEntry, BibEntry newEntry, BibDatabaseContext databaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService, BibEntryTypesManager entryTypesManager) { - TabPane oldEntryTabPane = oldPreviewWithSourcesTab.getPreviewWithSourceTab(oldEntry, databaseContext, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); - TabPane newEntryTabPane = newPreviewWithSourcesTab.getPreviewWithSourceTab(newEntry, databaseContext, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); + public EntryChangeDetailsView(BibEntry oldEntry, BibEntry newEntry, BibDatabaseContext databaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService, BibEntryTypesManager entryTypesManager, PreviewViewer previewViewer) { + + // we need a copy here as we otherwise would set the same entry twice + PreviewViewer previewClone = new PreviewViewer(databaseContext, dialogService, stateManager, themeManager); + + TabPane oldEntryTabPane = oldPreviewWithSourcesTab.getPreviewWithSourceTab(oldEntry, databaseContext, preferencesService, entryTypesManager, previewClone, Localization.lang("Entry Preview - in JabRef")); + TabPane newEntryTabPane = newPreviewWithSourcesTab.getPreviewWithSourceTab(newEntry, databaseContext, preferencesService, entryTypesManager, previewViewer, Localization.lang("Entry Preview - on disk")); EasyBind.subscribe(oldEntryTabPane.getSelectionModel().selectedIndexProperty(), selectedIndex -> { newEntryTabPane.getSelectionModel().select(selectedIndex.intValue()); diff --git a/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeResolver.java b/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeResolver.java index 53445107d4a..8e5575f4196 100644 --- a/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeResolver.java +++ b/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeResolver.java @@ -30,7 +30,7 @@ public EntryChangeResolver(EntryChange entryChange, DialogService dialogService, @Override public Optional askUserToResolveChange() { MergeEntriesDialog mergeEntriesDialog = new MergeEntriesDialog(entryChange.getOldEntry(), entryChange.getNewEntry(), bibEntryPreferences); - mergeEntriesDialog.setLeftHeaderText(Localization.lang("On JabRef")); + mergeEntriesDialog.setLeftHeaderText(Localization.lang("In JabRef")); mergeEntriesDialog.setRightHeaderText(Localization.lang("On disk")); mergeEntriesDialog.configureDiff(new ShowDiffConfig(ThreeWayMergeToolbar.DiffView.SPLIT, BasicDiffMethod.WORDS)); diff --git a/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java b/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java index b8ddecd804c..4567dfd91fc 100644 --- a/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java +++ b/src/main/java/org/jabref/gui/collab/entrychange/EntryWithPreviewAndSourceDetailsView.java @@ -2,10 +2,8 @@ import javafx.scene.control.TabPane; -import org.jabref.gui.DialogService; -import org.jabref.gui.StateManager; import org.jabref.gui.collab.DatabaseChangeDetailsView; -import org.jabref.gui.theme.ThemeManager; +import org.jabref.gui.preview.PreviewViewer; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.BibEntryTypesManager; @@ -15,8 +13,8 @@ public final class EntryWithPreviewAndSourceDetailsView extends DatabaseChangeDe private final PreviewWithSourceTab previewWithSourceTab = new PreviewWithSourceTab(); - public EntryWithPreviewAndSourceDetailsView(BibEntry entry, BibDatabaseContext bibDatabaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService, BibEntryTypesManager entryTypesManager) { - TabPane tabPanePreviewCode = previewWithSourceTab.getPreviewWithSourceTab(entry, bibDatabaseContext, dialogService, stateManager, themeManager, preferencesService, entryTypesManager); + public EntryWithPreviewAndSourceDetailsView(BibEntry entry, BibDatabaseContext bibDatabaseContext, PreferencesService preferencesService, BibEntryTypesManager entryTypesManager, PreviewViewer previewViewer) { + TabPane tabPanePreviewCode = previewWithSourceTab.getPreviewWithSourceTab(entry, bibDatabaseContext, preferencesService, entryTypesManager, previewViewer); setLeftAnchor(tabPanePreviewCode, 8d); setTopAnchor(tabPanePreviewCode, 8d); setRightAnchor(tabPanePreviewCode, 8d); diff --git a/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java b/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java index d5439a42595..878e6078adc 100644 --- a/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java +++ b/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java @@ -6,10 +6,7 @@ import javafx.scene.control.Tab; import javafx.scene.control.TabPane; -import org.jabref.gui.DialogService; -import org.jabref.gui.StateManager; import org.jabref.gui.preview.PreviewViewer; -import org.jabref.gui.theme.ThemeManager; import org.jabref.logic.bibtex.BibEntryWriter; import org.jabref.logic.bibtex.FieldWriter; import org.jabref.logic.bibtex.FieldWriterPreferences; @@ -20,6 +17,7 @@ import org.jabref.model.database.BibDatabaseMode; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.BibEntryTypesManager; +import org.jabref.model.strings.StringUtil; import org.jabref.preferences.PreferencesService; import org.fxmisc.richtext.CodeArea; @@ -30,10 +28,11 @@ public class PreviewWithSourceTab { private static final Logger LOGGER = LoggerFactory.getLogger(PreviewWithSourceTab.class); - public TabPane getPreviewWithSourceTab(BibEntry entry, BibDatabaseContext bibDatabaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService, BibEntryTypesManager entryTypesManager) { - // TODO: Optimization: Each PreviewViewer instance creates a WebView on initialization. WebView instances are - // very heavy on CPU and memory. Thus, we should consider sharing PreviewViewer between entry changes. - PreviewViewer previewViewer = new PreviewViewer(bibDatabaseContext, dialogService, stateManager, themeManager); + public TabPane getPreviewWithSourceTab(BibEntry entry, BibDatabaseContext bibDatabaseContext, PreferencesService preferencesService, BibEntryTypesManager entryTypesManager, PreviewViewer previewViewer) { + return getPreviewWithSourceTab(entry, bibDatabaseContext, preferencesService, entryTypesManager, previewViewer, ""); + } + + public TabPane getPreviewWithSourceTab(BibEntry entry, BibDatabaseContext bibDatabaseContext, PreferencesService preferencesService, BibEntryTypesManager entryTypesManager, PreviewViewer previewViewer, String label) { previewViewer.setLayout(preferencesService.getPreviewPreferences().getSelectedPreviewLayout()); previewViewer.setEntry(entry); @@ -43,7 +42,14 @@ public TabPane getPreviewWithSourceTab(BibEntry entry, BibDatabaseContext bibDat codeArea.setDisable(true); TabPane tabPanePreviewCode = new TabPane(); - Tab previewTab = new Tab(Localization.lang("Entry preview"), previewViewer); + Tab previewTab = new Tab(); + previewTab.setContent(previewViewer); + + if (StringUtil.isNullOrEmpty(label)) { + previewTab.setText(Localization.lang("Entry preview")); + } else { + previewTab.setText(label); + } try { codeArea.appendText(getSourceString(entry, bibDatabaseContext.getMode(), preferencesService.getFieldWriterPreferences(), entryTypesManager)); diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties index f3dc38d1a83..6b3a6f2309f 100644 --- a/src/main/resources/l10n/JabRef_en.properties +++ b/src/main/resources/l10n/JabRef_en.properties @@ -1340,7 +1340,7 @@ Removed\ all\ groups=Removed all groups %0.\ Accepting\ the\ change\ replaces\ the\ complete\ groups\ tree\ with\ the\ externally\ modified\ groups\ tree.=%0. Accepting the change replaces the complete groups tree with the externally modified groups tree. Select\ export\ format=Select export format Return\ to\ library=Return to library -On\ JabRef=On JabRef + Could\ not\ connect\ to\ %0=Could not connect to %0 Warning\:\ %0\ out\ of\ %1\ entries\ have\ undefined\ title.=Warning: %0 out of %1 entries have undefined title. Warning\:\ %0\ out\ of\ %1\ entries\ have\ undefined\ citation\ key.=Warning: %0 out of %1 entries have undefined citation key. @@ -1348,6 +1348,11 @@ Warning\:\ %0\ out\ of\ %1\ entries\ have\ undefined\ DOIs.=Warning: %0 out of % Really\ delete\ the\ selected\ entry?=Really delete the selected entry? Really\ delete\ the\ %0\ selected\ entries?=Really delete the %0 selected entries? +On\ disk=On disk +In\ JabRef=In JabRef +Entry\ Preview\ -\ in\ JabRef=Entry Preview - in JabRef +Entry\ Preview\ -\ on\ disk=Entry Preview - on disk + Keep\ left=Keep left Keep\ right=Keep right Old\ entry=Old entry @@ -2073,7 +2078,6 @@ Reset\ All=Reset All Linked\ identifiers=Linked identifiers insert\ entries=insert entries -On\ disk=On disk Independent=Independent Intersection=Intersection From cc418bf589f84f93af48fb9b1367f3be594cf9ce Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Sat, 28 Jan 2023 20:39:09 +0100 Subject: [PATCH 22/30] checkstyle --- .../jabref/gui/collab/entrychange/EntryChangeDetailsView.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java b/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java index ed9fbb51b95..225b071619d 100644 --- a/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java +++ b/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java @@ -22,7 +22,6 @@ public final class EntryChangeDetailsView extends DatabaseChangeDetailsView { private final PreviewWithSourceTab newPreviewWithSourcesTab = new PreviewWithSourceTab(); public EntryChangeDetailsView(BibEntry oldEntry, BibEntry newEntry, BibDatabaseContext databaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService, BibEntryTypesManager entryTypesManager, PreviewViewer previewViewer) { - // we need a copy here as we otherwise would set the same entry twice PreviewViewer previewClone = new PreviewViewer(databaseContext, dialogService, stateManager, themeManager); From 4e2336a610b91ed4bce72f49ff3eacc2d2674a7b Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Fri, 3 Feb 2023 22:22:30 +0100 Subject: [PATCH 23/30] Add label header for tab pane todo needs styling rename hide equal fields to -> Only show changed fields --- .../entrychange/EntryChangeDetailsView.java | 15 ++++++++++++--- .../toolbar/ThreeWayMergeToolbar.fxml | 2 +- .../toolbar/ThreeWayMergeToolbar.java | 10 +++++----- src/main/resources/l10n/JabRef_en.properties | 5 ++--- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java b/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java index 225b071619d..574b202d524 100644 --- a/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java +++ b/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java @@ -1,8 +1,10 @@ package org.jabref.gui.collab.entrychange; import javafx.geometry.Orientation; +import javafx.scene.control.Label; import javafx.scene.control.SplitPane; import javafx.scene.control.TabPane; +import javafx.scene.layout.VBox; import org.jabref.gui.DialogService; import org.jabref.gui.StateManager; @@ -22,11 +24,14 @@ public final class EntryChangeDetailsView extends DatabaseChangeDetailsView { private final PreviewWithSourceTab newPreviewWithSourcesTab = new PreviewWithSourceTab(); public EntryChangeDetailsView(BibEntry oldEntry, BibEntry newEntry, BibDatabaseContext databaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService, BibEntryTypesManager entryTypesManager, PreviewViewer previewViewer) { + Label inJabRef = new Label(Localization.lang("In JabRef")); + Label onDisk = new Label(Localization.lang("On disk")); + // we need a copy here as we otherwise would set the same entry twice PreviewViewer previewClone = new PreviewViewer(databaseContext, dialogService, stateManager, themeManager); - TabPane oldEntryTabPane = oldPreviewWithSourcesTab.getPreviewWithSourceTab(oldEntry, databaseContext, preferencesService, entryTypesManager, previewClone, Localization.lang("Entry Preview - in JabRef")); - TabPane newEntryTabPane = newPreviewWithSourcesTab.getPreviewWithSourceTab(newEntry, databaseContext, preferencesService, entryTypesManager, previewViewer, Localization.lang("Entry Preview - on disk")); + TabPane oldEntryTabPane = oldPreviewWithSourcesTab.getPreviewWithSourceTab(oldEntry, databaseContext, preferencesService, entryTypesManager, previewClone, Localization.lang("Entry Preview")); + TabPane newEntryTabPane = newPreviewWithSourcesTab.getPreviewWithSourceTab(newEntry, databaseContext, preferencesService, entryTypesManager, previewViewer, Localization.lang("Entry Preview")); EasyBind.subscribe(oldEntryTabPane.getSelectionModel().selectedIndexProperty(), selectedIndex -> { newEntryTabPane.getSelectionModel().select(selectedIndex.intValue()); @@ -38,13 +43,17 @@ public EntryChangeDetailsView(BibEntry oldEntry, BibEntry newEntry, BibDatabaseC } }); - SplitPane split = new SplitPane(oldEntryTabPane, newEntryTabPane); + VBox containerOld = new VBox(inJabRef, oldEntryTabPane); + VBox containerNew = new VBox(onDisk, newEntryTabPane); + + SplitPane split = new SplitPane(containerOld, containerNew); split.setOrientation(Orientation.HORIZONTAL); setLeftAnchor(split, 8d); setTopAnchor(split, 8d); setRightAnchor(split, 8d); setBottomAnchor(split, 8d); + this.getChildren().add(split); } } diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.fxml b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.fxml index 9504a090063..2a3988e768a 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.fxml +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.fxml @@ -43,7 +43,7 @@ - + diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java index 505641bafba..93053299783 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java @@ -45,10 +45,10 @@ public class ThreeWayMergeToolbar extends AnchorPane { private Button selectRightEntryValuesButton; @FXML - private CheckBox hideEqualFieldsCheck; + private CheckBox onlyShowChangedFieldsCheck; private final ObjectProperty diffHighlightingMethod = new SimpleObjectProperty<>(); - private final BooleanProperty hideEqualFields = new SimpleBooleanProperty(); + private final BooleanProperty onlyShowChangedFields = new SimpleBooleanProperty(); private EasyBinding showDiff; public ThreeWayMergeToolbar() { @@ -102,7 +102,7 @@ public DiffView fromString(String string) { diffHighlightingMethodToggleGroup.selectToggle(highlightWordsRadioButton); plainTextOrDiffComboBox.valueProperty().set(PlainTextOrDiff.Diff); - hideEqualFields.bind(hideEqualFieldsCheck.selectedProperty()); + onlyShowChangedFields.bind(onlyShowChangedFieldsCheck.selectedProperty()); } public ObjectProperty diffViewProperty() { @@ -126,11 +126,11 @@ public void setShowDiff(boolean showDiff) { } public BooleanProperty hideEqualFieldsProperty() { - return hideEqualFields; + return onlyShowChangedFields; } public boolean shouldHideEqualFields() { - return hideEqualFields.get(); + return onlyShowChangedFields.get(); } /** diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties index 6b3a6f2309f..5f117b17085 100644 --- a/src/main/resources/l10n/JabRef_en.properties +++ b/src/main/resources/l10n/JabRef_en.properties @@ -1350,8 +1350,7 @@ Really\ delete\ the\ %0\ selected\ entries?=Really delete the %0 selected entrie On\ disk=On disk In\ JabRef=In JabRef -Entry\ Preview\ -\ in\ JabRef=Entry Preview - in JabRef -Entry\ Preview\ -\ on\ disk=Entry Preview - on disk +Entry\ Preview=Entry Preview Keep\ left=Keep left Keep\ right=Keep right @@ -2497,7 +2496,7 @@ Split\ View=Split View Plain\ Text=Plain Text Show\ Diff=Show Diff Merged\ Entry=Merged Entry -Hide\ equal\ fields=Hide equal fields +Only\ show\ changed\ fields=Only show changed fields Edit\ file\ link=Edit file link From 2efa489111f3559647f5b9c1cf1a4bd5b57b70e2 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Sat, 4 Feb 2023 14:50:18 +0100 Subject: [PATCH 24/30] add css class --- src/main/java/org/jabref/gui/Base.css | 5 +++++ .../gui/collab/entrychange/EntryChangeDetailsView.java | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/main/java/org/jabref/gui/Base.css b/src/main/java/org/jabref/gui/Base.css index 0d70cc6f1f5..f6acf35cc8d 100644 --- a/src/main/java/org/jabref/gui/Base.css +++ b/src/main/java/org/jabref/gui/Base.css @@ -676,6 +676,11 @@ TextFlow > .tooltip-text-monospaced { -fx-background-color: -jr-row-even-background; } +.lib-change-header { + -fx-font-size: 130%; + -fx-padding: 0.2em 0em 0.2em 0.2em; +} + .table-view .groupColumnBackground { -fx-stroke: -jr-gray-2; } diff --git a/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java b/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java index 574b202d524..7782a6919bc 100644 --- a/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java +++ b/src/main/java/org/jabref/gui/collab/entrychange/EntryChangeDetailsView.java @@ -25,7 +25,9 @@ public final class EntryChangeDetailsView extends DatabaseChangeDetailsView { public EntryChangeDetailsView(BibEntry oldEntry, BibEntry newEntry, BibDatabaseContext databaseContext, DialogService dialogService, StateManager stateManager, ThemeManager themeManager, PreferencesService preferencesService, BibEntryTypesManager entryTypesManager, PreviewViewer previewViewer) { Label inJabRef = new Label(Localization.lang("In JabRef")); + inJabRef.getStyleClass().add("lib-change-header"); Label onDisk = new Label(Localization.lang("On disk")); + onDisk.getStyleClass().add("lib-change-header"); // we need a copy here as we otherwise would set the same entry twice PreviewViewer previewClone = new PreviewViewer(databaseContext, dialogService, stateManager, themeManager); From 2a3a3413f2e023c40071d6016fb05b463014ae79 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Sat, 4 Feb 2023 15:17:33 +0100 Subject: [PATCH 25/30] Store value of chekcbox in prefs --- .../newmergedialog/ThreeWayMergeView.java | 1 + .../toolbar/ThreeWayMergeToolbar.java | 6 ++++++ .../org/jabref/preferences/GuiPreferences.java | 17 ++++++++++++++++- .../jabref/preferences/JabRefPreferences.java | 9 ++++++++- 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java index aa6ae8cbd8e..5767d747a4c 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/ThreeWayMergeView.java @@ -75,6 +75,7 @@ private void initializeToolbar() { toolbar.diffViewProperty().addListener(e -> updateDiff()); toolbar.diffHighlightingMethodProperty().addListener(e -> updateDiff()); toolbar.hideEqualFieldsProperty().addListener(e -> showOrHideEqualFields()); + updateDiff(); showOrHideEqualFields(); } diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java index 93053299783..950b33a4c6f 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java @@ -17,10 +17,12 @@ import org.jabref.gui.mergeentries.newmergedialog.DiffMethod; import org.jabref.gui.mergeentries.newmergedialog.diffhighlighter.DiffHighlighter.BasicDiffMethod; import org.jabref.logic.l10n.Localization; +import org.jabref.preferences.PreferencesService; import com.airhacks.afterburner.views.ViewLoader; import com.tobiasdiez.easybind.EasyBind; import com.tobiasdiez.easybind.EasyBinding; +import jakarta.inject.Inject; public class ThreeWayMergeToolbar extends AnchorPane { @FXML @@ -47,6 +49,8 @@ public class ThreeWayMergeToolbar extends AnchorPane { @FXML private CheckBox onlyShowChangedFieldsCheck; + @Inject PreferencesService preferencesService; + private final ObjectProperty diffHighlightingMethod = new SimpleObjectProperty<>(); private final BooleanProperty onlyShowChangedFields = new SimpleBooleanProperty(); private EasyBinding showDiff; @@ -102,6 +106,8 @@ public DiffView fromString(String string) { diffHighlightingMethodToggleGroup.selectToggle(highlightWordsRadioButton); plainTextOrDiffComboBox.valueProperty().set(PlainTextOrDiff.Diff); + + onlyShowChangedFieldsCheck.selectedProperty().bindBidirectional(preferencesService.getGuiPreferences().mergeShowChangedFieldOnlyProperty()); onlyShowChangedFields.bind(onlyShowChangedFieldsCheck.selectedProperty()); } diff --git a/src/main/java/org/jabref/preferences/GuiPreferences.java b/src/main/java/org/jabref/preferences/GuiPreferences.java index b8ca00d69d0..fc0bd899286 100644 --- a/src/main/java/org/jabref/preferences/GuiPreferences.java +++ b/src/main/java/org/jabref/preferences/GuiPreferences.java @@ -33,6 +33,7 @@ public class GuiPreferences { private final StringProperty lastSelectedIdBasedFetcher; private final ObjectProperty mergeDiffMode; + private final BooleanProperty mergeShowChangedFieldsOnly; private final DoubleProperty sidePaneWidth; public GuiPreferences(double positionX, @@ -45,7 +46,8 @@ public GuiPreferences(double positionX, FileHistory fileHistory, String lastSelectedIdBasedFetcher, DiffMode mergeDiffMode, - double sidePaneWidth) { + double sidePaneWidth, + boolean mergeShowChangedFieldsOnly) { this.positionX = new SimpleDoubleProperty(positionX); this.positionY = new SimpleDoubleProperty(positionY); this.sizeX = new SimpleDoubleProperty(sizeX); @@ -57,6 +59,7 @@ public GuiPreferences(double positionX, this.mergeDiffMode = new SimpleObjectProperty<>(mergeDiffMode); this.sidePaneWidth = new SimpleDoubleProperty(sidePaneWidth); this.fileHistory = fileHistory; + this.mergeShowChangedFieldsOnly = new SimpleBooleanProperty(mergeShowChangedFieldsOnly); } public double getPositionX() { @@ -178,4 +181,16 @@ public DoubleProperty sidePaneWidthProperty() { public void setSidePaneWidth(double sidePaneWidth) { this.sidePaneWidth.set(sidePaneWidth); } + + public BooleanProperty mergeShowChangedFieldOnlyProperty() { + return mergeShowChangedFieldsOnly; + } + + public boolean isMergeShowChangedFieldsOnly() { + return mergeShowChangedFieldsOnly.getValue(); + } + + public void setIsMergedShowChangedFielsOnly(boolean showChangedFieldsOnly) { + mergeShowChangedFieldsOnly.setValue(showChangedFieldsOnly); + } } diff --git a/src/main/java/org/jabref/preferences/JabRefPreferences.java b/src/main/java/org/jabref/preferences/JabRefPreferences.java index 00ff48b42ec..0db7cef661f 100644 --- a/src/main/java/org/jabref/preferences/JabRefPreferences.java +++ b/src/main/java/org/jabref/preferences/JabRefPreferences.java @@ -234,7 +234,11 @@ public class JabRefPreferences implements PreferencesService { public static final String NON_WRAPPABLE_FIELDS = "nonWrappableFields"; public static final String RESOLVE_STRINGS_FOR_FIELDS = "resolveStringsForFields"; public static final String DO_NOT_RESOLVE_STRINGS = "doNotResolveStrings"; + + // merge related public static final String MERGE_ENTRIES_DIFF_MODE = "mergeEntriesDiffMode"; + public static final String MERGE_SHOW_ONLY_CHANGED_FIELDS = "mergeShowOnlyChangedFields"; + public static final String CUSTOM_EXPORT_FORMAT = "customExportFormat"; public static final String CUSTOM_IMPORT_FORMAT = "customImportFormat"; public static final String KEY_PATTERN_REGEX = "KeyPatternRegex"; @@ -577,6 +581,7 @@ private JabRefPreferences() { defaults.put(DEFAULT_SHOW_SOURCE, Boolean.FALSE); defaults.put(MERGE_ENTRIES_DIFF_MODE, DiffMode.WORD.name()); + defaults.put(MERGE_SHOW_ONLY_CHANGED_FIELDS, Boolean.FALSE); defaults.put(SHOW_RECOMMENDATIONS, Boolean.TRUE); defaults.put(ACCEPT_RECOMMENDATIONS, Boolean.FALSE); @@ -2489,7 +2494,8 @@ public GuiPreferences getGuiPreferences() { getFileHistory(), get(ID_ENTRY_GENERATOR), DiffMode.parse(get(MERGE_ENTRIES_DIFF_MODE)), - getDouble(SIDE_PANE_WIDTH)); + getDouble(SIDE_PANE_WIDTH), + getBoolean(MERGE_SHOW_ONLY_CHANGED_FIELDS)); EasyBind.listen(guiPreferences.positionXProperty(), (obs, oldValue, newValue) -> putDouble(POS_X, newValue.doubleValue())); EasyBind.listen(guiPreferences.positionYProperty(), (obs, oldValue, newValue) -> putDouble(POS_Y, newValue.doubleValue())); @@ -2514,6 +2520,7 @@ public GuiPreferences getGuiPreferences() { EasyBind.listen(guiPreferences.lastSelectedIdBasedFetcherProperty(), (obs, oldValue, newValue) -> put(ID_ENTRY_GENERATOR, newValue)); EasyBind.listen(guiPreferences.mergeDiffModeProperty(), (obs, oldValue, newValue) -> put(MERGE_ENTRIES_DIFF_MODE, newValue.name())); EasyBind.listen(guiPreferences.sidePaneWidthProperty(), (obs, oldValue, newValue) -> putDouble(SIDE_PANE_WIDTH, newValue.doubleValue())); + EasyBind.listen(guiPreferences.mergeShowChangedFieldOnlyProperty(), (obs, oldValue, newValue) -> putBoolean(MERGE_SHOW_ONLY_CHANGED_FIELDS, newValue.booleanValue())); return guiPreferences; } From 22899e7701397c3f9ef68ae0be5b1c10e9018daa Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Sat, 4 Feb 2023 15:18:27 +0100 Subject: [PATCH 26/30] remove tab chars --- src/main/java/org/jabref/gui/Base.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/jabref/gui/Base.css b/src/main/java/org/jabref/gui/Base.css index f6acf35cc8d..09b7a680c20 100644 --- a/src/main/java/org/jabref/gui/Base.css +++ b/src/main/java/org/jabref/gui/Base.css @@ -677,7 +677,7 @@ TextFlow > .tooltip-text-monospaced { } .lib-change-header { - -fx-font-size: 130%; + -fx-font-size: 130%; -fx-padding: 0.2em 0em 0.2em 0.2em; } From ef6cfc3e169b58e33764c1536861697b3f5bb34b Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Sat, 4 Feb 2023 15:22:42 +0100 Subject: [PATCH 27/30] make prefs inject private --- .../newmergedialog/toolbar/ThreeWayMergeToolbar.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java index 950b33a4c6f..8a656830e4d 100644 --- a/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java +++ b/src/main/java/org/jabref/gui/mergeentries/newmergedialog/toolbar/ThreeWayMergeToolbar.java @@ -49,7 +49,8 @@ public class ThreeWayMergeToolbar extends AnchorPane { @FXML private CheckBox onlyShowChangedFieldsCheck; - @Inject PreferencesService preferencesService; + @Inject + private PreferencesService preferencesService; private final ObjectProperty diffHighlightingMethod = new SimpleObjectProperty<>(); private final BooleanProperty onlyShowChangedFields = new SimpleBooleanProperty(); From 74a653c87e60963d7ff892e5339afc238a104cfb Mon Sep 17 00:00:00 2001 From: Christoph Date: Sun, 5 Feb 2023 22:49:53 +0100 Subject: [PATCH 28/30] Update src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java Co-authored-by: Oliver Kopp --- .../org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java b/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java index 878e6078adc..0a4a494fa1e 100644 --- a/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java +++ b/src/main/java/org/jabref/gui/collab/entrychange/PreviewWithSourceTab.java @@ -56,7 +56,7 @@ public TabPane getPreviewWithSourceTab(BibEntry entry, BibDatabaseContext bibDat } catch (IOException e) { LOGGER.error("Error getting Bibtex: {}", entry); } - codeArea.setEditable(true); + codeArea.setEditable(false); Tab codeTab = new Tab(Localization.lang("%0 source", bibDatabaseContext.getMode().getFormattedName()), codeArea); tabPanePreviewCode.getTabs().addAll(previewTab, codeTab); From 771b032b34e2434793e6ad4fd4821a26ee20c11d Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Tue, 7 Feb 2023 18:58:04 +0100 Subject: [PATCH 29/30] remove empty line --- .../org/jabref/gui/collab/DatabaseChangesResolverDialog.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/jabref/gui/collab/DatabaseChangesResolverDialog.java b/src/main/java/org/jabref/gui/collab/DatabaseChangesResolverDialog.java index 3851d5b4da3..a0d5c3420cd 100644 --- a/src/main/java/org/jabref/gui/collab/DatabaseChangesResolverDialog.java +++ b/src/main/java/org/jabref/gui/collab/DatabaseChangesResolverDialog.java @@ -38,7 +38,6 @@ public class DatabaseChangesResolverDialog extends BaseDialog { */ private final Map DETAILS_VIEW_CACHE = new HashMap<>(); - @FXML private TableView changesTableView; @FXML From 93dd7cf1592d9f314eef681c1701a0a13e80ebc1 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Tue, 7 Feb 2023 18:59:39 +0100 Subject: [PATCH 30/30] empty line --- src/main/java/org/jabref/gui/Base.css | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/jabref/gui/Base.css b/src/main/java/org/jabref/gui/Base.css index 09b7a680c20..bee5015022c 100644 --- a/src/main/java/org/jabref/gui/Base.css +++ b/src/main/java/org/jabref/gui/Base.css @@ -1315,7 +1315,6 @@ We want to have a look that matches our icons in the tool-bar */ -fx-fill: -fx-text-background-color; } - #bibtexcodearea { -fx-padding: 4 4 4 4; -fx-background-color: -fx-control-inner-background;