From b26bd17fc40b95bad33363e8d4b903d9a17f1bc8 Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage Date: Sun, 21 Nov 2021 17:49:06 +0100 Subject: [PATCH 01/14] Introduced new LibraryProperties dialog --- src/main/java/org/jabref/gui/JabRefFrame.java | 4 +- .../LibraryProperties.fxml | 11 +++++ .../LibraryPropertiesAction.java | 25 ++++++++++ .../LibraryPropertiesView.java | 48 +++++++++++++++++++ .../LibraryPropertiesViewModel.java | 17 +++++++ 5 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/jabref/gui/newlibraryproperties/LibraryProperties.fxml create mode 100644 src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesAction.java create mode 100644 src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesView.java create mode 100644 src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesViewModel.java diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java index 073371ea4bf..33fd050af2e 100644 --- a/src/main/java/org/jabref/gui/JabRefFrame.java +++ b/src/main/java/org/jabref/gui/JabRefFrame.java @@ -98,11 +98,11 @@ import org.jabref.gui.journals.AbbreviateAction; import org.jabref.gui.keyboard.KeyBinding; import org.jabref.gui.keyboard.KeyBindingRepository; -import org.jabref.gui.libraryproperties.LibraryPropertiesAction; import org.jabref.gui.menus.FileHistoryMenu; import org.jabref.gui.mergeentries.MergeEntriesAction; import org.jabref.gui.metadata.BibtexStringEditorAction; import org.jabref.gui.metadata.PreambleEditor; +import org.jabref.gui.newlibraryproperties.LibraryPropertiesAction; import org.jabref.gui.preferences.ShowPreferencesAction; import org.jabref.gui.preview.CopyCitationAction; import org.jabref.gui.push.PushToApplicationAction; @@ -776,7 +776,7 @@ private MenuBar createMenu() { new SeparatorMenuItem(), - factory.createMenuItem(StandardActions.LIBRARY_PROPERTIES, new LibraryPropertiesAction(this, stateManager)), + factory.createMenuItem(StandardActions.LIBRARY_PROPERTIES, new LibraryPropertiesAction(this.getCurrentLibraryTab(), stateManager)), factory.createMenuItem(StandardActions.EDIT_PREAMBLE, new PreambleEditor(stateManager, undoManager, this.getDialogService())), factory.createMenuItem(StandardActions.EDIT_STRINGS, new BibtexStringEditorAction(stateManager)), factory.createMenuItem(StandardActions.MANAGE_CITE_KEY_PATTERNS, new CitationKeyPatternAction(this, stateManager)) diff --git a/src/main/java/org/jabref/gui/newlibraryproperties/LibraryProperties.fxml b/src/main/java/org/jabref/gui/newlibraryproperties/LibraryProperties.fxml new file mode 100644 index 00000000000..dd5eb282b99 --- /dev/null +++ b/src/main/java/org/jabref/gui/newlibraryproperties/LibraryProperties.fxml @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesAction.java b/src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesAction.java new file mode 100644 index 00000000000..9ed1c19a57f --- /dev/null +++ b/src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesAction.java @@ -0,0 +1,25 @@ +package org.jabref.gui.newlibraryproperties; + +import org.jabref.gui.DialogService; +import org.jabref.gui.LibraryTab; +import org.jabref.gui.StateManager; +import org.jabref.gui.actions.SimpleCommand; + +import com.airhacks.afterburner.injection.Injector; + +import static org.jabref.gui.actions.ActionHelper.needsDatabase; + +public class LibraryPropertiesAction extends SimpleCommand { + private final LibraryTab libraryTab; + + public LibraryPropertiesAction(LibraryTab libraryTab, StateManager stateManager) { + this.libraryTab = libraryTab; + this.executable.bind(needsDatabase(stateManager)); + } + + @Override + public void execute() { + DialogService dialogService = Injector.instantiateModelOrService(DialogService.class); + dialogService.showCustomDialogAndWait(new LibraryPropertiesView(libraryTab)); + } +} diff --git a/src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesView.java b/src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesView.java new file mode 100644 index 00000000000..0c7c3442b44 --- /dev/null +++ b/src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesView.java @@ -0,0 +1,48 @@ +package org.jabref.gui.newlibraryproperties; + +import javax.inject.Inject; + +import javafx.fxml.FXML; +import javafx.scene.control.ButtonType; + +import org.jabref.gui.DialogService; +import org.jabref.gui.LibraryTab; +import org.jabref.gui.util.BaseDialog; +import org.jabref.gui.util.ControlHelper; +import org.jabref.logic.l10n.Localization; + +import com.airhacks.afterburner.views.ViewLoader; + +public class LibraryPropertiesView extends BaseDialog { + + @FXML private ButtonType saveButton; + + @Inject private DialogService dialogService; + + private final LibraryTab libraryTab; + private LibraryPropertiesViewModel viewModel; + + public LibraryPropertiesView(LibraryTab libraryTab) { + this.libraryTab = libraryTab; + + ViewLoader.view(this) + .load() + .setAsDialogPane(this); + + ControlHelper.setAction(saveButton, getDialogPane(), event -> savePreferencesAndCloseDialog()); + + setTitle(Localization.lang("Library properties")); + } + + @FXML + private void initialize() { + viewModel = new LibraryPropertiesViewModel(libraryTab); + + viewModel.setValues(); + } + + private void savePreferencesAndCloseDialog() { + viewModel.storeAllSettings(); + close(); + } +} diff --git a/src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesViewModel.java b/src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesViewModel.java new file mode 100644 index 00000000000..b349ccbf464 --- /dev/null +++ b/src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesViewModel.java @@ -0,0 +1,17 @@ +package org.jabref.gui.newlibraryproperties; + +import org.jabref.gui.LibraryTab; + +public class LibraryPropertiesViewModel { + public LibraryPropertiesViewModel(LibraryTab libraryTab) { + + } + + public void setValues() { + + } + + public void storeAllSettings() { + + } +} From b8a17c5462e6e201e3b3d90a8db2645bc8d75b21 Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage Date: Sun, 21 Nov 2021 20:47:37 +0100 Subject: [PATCH 02/14] Converted GeneralProperties --- src/main/java/org/jabref/gui/JabRefFrame.java | 2 +- .../AbstractPropertiesTabView.java | 37 +++++ .../LibraryProperties.fxml | 7 +- .../LibraryPropertiesAction.java | 32 +++- .../LibraryPropertiesView.java | 19 ++- .../LibraryPropertiesViewModel.java | 25 ++- .../newlibraryproperties/PropertiesTab.java | 15 ++ .../PropertiesTabViewModel.java | 12 ++ .../general/GeneralProperties.fxml | 64 ++++++++ .../general/GeneralPropertiesView.java | 78 ++++++++++ .../general/GeneralPropertiesViewModel.java | 143 ++++++++++++++++++ 11 files changed, 418 insertions(+), 16 deletions(-) create mode 100644 src/main/java/org/jabref/gui/newlibraryproperties/AbstractPropertiesTabView.java create mode 100644 src/main/java/org/jabref/gui/newlibraryproperties/PropertiesTab.java create mode 100644 src/main/java/org/jabref/gui/newlibraryproperties/PropertiesTabViewModel.java create mode 100644 src/main/java/org/jabref/gui/newlibraryproperties/general/GeneralProperties.fxml create mode 100644 src/main/java/org/jabref/gui/newlibraryproperties/general/GeneralPropertiesView.java create mode 100644 src/main/java/org/jabref/gui/newlibraryproperties/general/GeneralPropertiesViewModel.java diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java index 33fd050af2e..80370d548bd 100644 --- a/src/main/java/org/jabref/gui/JabRefFrame.java +++ b/src/main/java/org/jabref/gui/JabRefFrame.java @@ -776,7 +776,7 @@ private MenuBar createMenu() { new SeparatorMenuItem(), - factory.createMenuItem(StandardActions.LIBRARY_PROPERTIES, new LibraryPropertiesAction(this.getCurrentLibraryTab(), stateManager)), + factory.createMenuItem(StandardActions.LIBRARY_PROPERTIES, new LibraryPropertiesAction(stateManager)), factory.createMenuItem(StandardActions.EDIT_PREAMBLE, new PreambleEditor(stateManager, undoManager, this.getDialogService())), factory.createMenuItem(StandardActions.EDIT_STRINGS, new BibtexStringEditorAction(stateManager)), factory.createMenuItem(StandardActions.MANAGE_CITE_KEY_PATTERNS, new CitationKeyPatternAction(this, stateManager)) diff --git a/src/main/java/org/jabref/gui/newlibraryproperties/AbstractPropertiesTabView.java b/src/main/java/org/jabref/gui/newlibraryproperties/AbstractPropertiesTabView.java new file mode 100644 index 00000000000..7f9792d09fe --- /dev/null +++ b/src/main/java/org/jabref/gui/newlibraryproperties/AbstractPropertiesTabView.java @@ -0,0 +1,37 @@ +package org.jabref.gui.newlibraryproperties; + +import javax.inject.Inject; + +import javafx.scene.Node; +import javafx.scene.layout.VBox; + +import org.jabref.gui.DialogService; +import org.jabref.model.database.BibDatabaseContext; + +public abstract class AbstractPropertiesTabView extends VBox implements PropertiesTab { + + @Inject protected DialogService dialogService; + + protected BibDatabaseContext databaseContext; + protected T viewModel; + + @Override + public Node getBuilder() { + return this; + } + + @Override + public void setValues() { + viewModel.setValues(); + } + + @Override + public void storeSettings() { + viewModel.storeSettings(); + } + + @Override + public boolean validateSettings() { + return viewModel.validateSettings(); + } +} diff --git a/src/main/java/org/jabref/gui/newlibraryproperties/LibraryProperties.fxml b/src/main/java/org/jabref/gui/newlibraryproperties/LibraryProperties.fxml index dd5eb282b99..e42c0b917c7 100644 --- a/src/main/java/org/jabref/gui/newlibraryproperties/LibraryProperties.fxml +++ b/src/main/java/org/jabref/gui/newlibraryproperties/LibraryProperties.fxml @@ -2,10 +2,13 @@ - + + + + diff --git a/src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesAction.java b/src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesAction.java index 9ed1c19a57f..4844488cb47 100644 --- a/src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesAction.java +++ b/src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesAction.java @@ -1,25 +1,47 @@ package org.jabref.gui.newlibraryproperties; +import java.util.Optional; + import org.jabref.gui.DialogService; -import org.jabref.gui.LibraryTab; import org.jabref.gui.StateManager; import org.jabref.gui.actions.SimpleCommand; +import org.jabref.model.database.BibDatabaseContext; import com.airhacks.afterburner.injection.Injector; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import static org.jabref.gui.actions.ActionHelper.needsDatabase; public class LibraryPropertiesAction extends SimpleCommand { - private final LibraryTab libraryTab; + private static final Logger LOGGER = LoggerFactory.getLogger(LibraryPropertiesAction.class); + + private final StateManager stateManager; + private final Optional alternateDatabase; - public LibraryPropertiesAction(LibraryTab libraryTab, StateManager stateManager) { - this.libraryTab = libraryTab; + public LibraryPropertiesAction(StateManager stateManager) { + this.stateManager = stateManager; this.executable.bind(needsDatabase(stateManager)); + this.alternateDatabase = Optional.empty(); + } + + public LibraryPropertiesAction(BibDatabaseContext databaseContext, StateManager stateManager) { + this.stateManager = stateManager; + this.alternateDatabase = Optional.ofNullable(databaseContext); } @Override public void execute() { DialogService dialogService = Injector.instantiateModelOrService(DialogService.class); - dialogService.showCustomDialogAndWait(new LibraryPropertiesView(libraryTab)); + + if (alternateDatabase.isPresent()) { + dialogService.showCustomDialogAndWait(new LibraryPropertiesView(alternateDatabase.get())); + } else { + if (stateManager.getActiveDatabase().isPresent()) { + dialogService.showCustomDialogAndWait(new LibraryPropertiesView(stateManager.getActiveDatabase().get())); + } else { + LOGGER.warn("No database selected."); + } + } } } diff --git a/src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesView.java b/src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesView.java index 0c7c3442b44..709f04e3bb8 100644 --- a/src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesView.java +++ b/src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesView.java @@ -4,26 +4,29 @@ import javafx.fxml.FXML; import javafx.scene.control.ButtonType; +import javafx.scene.control.Tab; +import javafx.scene.control.TabPane; import org.jabref.gui.DialogService; -import org.jabref.gui.LibraryTab; import org.jabref.gui.util.BaseDialog; import org.jabref.gui.util.ControlHelper; import org.jabref.logic.l10n.Localization; +import org.jabref.model.database.BibDatabaseContext; import com.airhacks.afterburner.views.ViewLoader; public class LibraryPropertiesView extends BaseDialog { + public TabPane tabPane; @FXML private ButtonType saveButton; @Inject private DialogService dialogService; - private final LibraryTab libraryTab; + private final BibDatabaseContext databaseContext; private LibraryPropertiesViewModel viewModel; - public LibraryPropertiesView(LibraryTab libraryTab) { - this.libraryTab = libraryTab; + public LibraryPropertiesView(BibDatabaseContext databaseContext) { + this.databaseContext = databaseContext; ViewLoader.view(this) .load() @@ -36,7 +39,13 @@ public LibraryPropertiesView(LibraryTab libraryTab) { @FXML private void initialize() { - viewModel = new LibraryPropertiesViewModel(libraryTab); + viewModel = new LibraryPropertiesViewModel(databaseContext); + + for (PropertiesTab pane : viewModel.getPropertiesTabs()) { + tabPane.getTabs().add(new Tab(pane.getTabName(), pane.getBuilder())); + ((AbstractPropertiesTabView) pane).prefWidthProperty().bind(tabPane.widthProperty()); + ((AbstractPropertiesTabView) pane).getStyleClass().add("propertiesTab"); + } viewModel.setValues(); } diff --git a/src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesViewModel.java b/src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesViewModel.java index b349ccbf464..84c5601b87c 100644 --- a/src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesViewModel.java +++ b/src/main/java/org/jabref/gui/newlibraryproperties/LibraryPropertiesViewModel.java @@ -1,17 +1,36 @@ package org.jabref.gui.newlibraryproperties; -import org.jabref.gui.LibraryTab; +import javafx.beans.property.ReadOnlyListWrapper; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +import org.jabref.gui.newlibraryproperties.general.GeneralPropertiesView; +import org.jabref.model.database.BibDatabaseContext; public class LibraryPropertiesViewModel { - public LibraryPropertiesViewModel(LibraryTab libraryTab) { + private final ObservableList propertiesTabs; + + public LibraryPropertiesViewModel(BibDatabaseContext databaseContext) { + + propertiesTabs = FXCollections.observableArrayList( + new GeneralPropertiesView(databaseContext) + ); } public void setValues() { - + for (PropertiesTab propertiesTab : propertiesTabs) { + propertiesTab.setValues(); + } } public void storeAllSettings() { + for (PropertiesTab propertiesTab : propertiesTabs) { + propertiesTab.storeSettings(); + } + } + public ObservableList getPropertiesTabs() { + return new ReadOnlyListWrapper<>(propertiesTabs); } } diff --git a/src/main/java/org/jabref/gui/newlibraryproperties/PropertiesTab.java b/src/main/java/org/jabref/gui/newlibraryproperties/PropertiesTab.java new file mode 100644 index 00000000000..f7992dfe8e3 --- /dev/null +++ b/src/main/java/org/jabref/gui/newlibraryproperties/PropertiesTab.java @@ -0,0 +1,15 @@ +package org.jabref.gui.newlibraryproperties; + +import javafx.scene.Node; + +public interface PropertiesTab { + Node getBuilder(); + + String getTabName(); + + void setValues(); + + void storeSettings(); + + boolean validateSettings(); +} diff --git a/src/main/java/org/jabref/gui/newlibraryproperties/PropertiesTabViewModel.java b/src/main/java/org/jabref/gui/newlibraryproperties/PropertiesTabViewModel.java new file mode 100644 index 00000000000..14598de9243 --- /dev/null +++ b/src/main/java/org/jabref/gui/newlibraryproperties/PropertiesTabViewModel.java @@ -0,0 +1,12 @@ +package org.jabref.gui.newlibraryproperties; + +public interface PropertiesTabViewModel { + + void setValues(); + + void storeSettings(); + + default boolean validateSettings() { + return true; + } +} diff --git a/src/main/java/org/jabref/gui/newlibraryproperties/general/GeneralProperties.fxml b/src/main/java/org/jabref/gui/newlibraryproperties/general/GeneralProperties.fxml new file mode 100644 index 00000000000..6db05cbc6ae --- /dev/null +++ b/src/main/java/org/jabref/gui/newlibraryproperties/general/GeneralProperties.fxml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 8c31cb5c4b8c4245898417a6b905d0f153347f18 Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage Date: Mon, 22 Nov 2021 01:17:35 +0100 Subject: [PATCH 06/14] Converted BibtexStringEditor --- src/main/java/org/jabref/gui/JabRefFrame.java | 2 - .../LibraryPropertiesViewModel.java | 4 +- .../constants/ConstantsItemModel.java} | 10 +-- .../constants/ConstantsProperties.fxml | 50 +++++++++++++ .../constants/ConstantsPropertiesView.java} | 75 ++++++++----------- .../ConstantsPropertiesViewModel.java} | 55 +++++++------- .../metadata/BibtexStringEditorAction.java | 28 ------- .../metadata/BibtexStringEditorDialog.fxml | 54 ------------- src/main/resources/l10n/JabRef_en.properties | 1 + 9 files changed, 121 insertions(+), 158 deletions(-) rename src/main/java/org/jabref/gui/{metadata/BibtexStringEditorItemModel.java => libraryproperties/constants/ConstantsItemModel.java} (92%) create mode 100644 src/main/java/org/jabref/gui/libraryproperties/constants/ConstantsProperties.fxml rename src/main/java/org/jabref/gui/{metadata/BibtexStringEditorDialogView.java => libraryproperties/constants/ConstantsPropertiesView.java} (54%) rename src/main/java/org/jabref/gui/{metadata/BibtexStringEditorDialogViewModel.java => libraryproperties/constants/ConstantsPropertiesViewModel.java} (55%) delete mode 100644 src/main/java/org/jabref/gui/metadata/BibtexStringEditorAction.java delete mode 100644 src/main/java/org/jabref/gui/metadata/BibtexStringEditorDialog.fxml diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java index 691393e81a9..0425e520b91 100644 --- a/src/main/java/org/jabref/gui/JabRefFrame.java +++ b/src/main/java/org/jabref/gui/JabRefFrame.java @@ -101,7 +101,6 @@ import org.jabref.gui.libraryproperties.LibraryPropertiesAction; import org.jabref.gui.menus.FileHistoryMenu; import org.jabref.gui.mergeentries.MergeEntriesAction; -import org.jabref.gui.metadata.BibtexStringEditorAction; import org.jabref.gui.metadata.PreambleEditor; import org.jabref.gui.preferences.ShowPreferencesAction; import org.jabref.gui.preview.CopyCitationAction; @@ -778,7 +777,6 @@ private MenuBar createMenu() { factory.createMenuItem(StandardActions.LIBRARY_PROPERTIES, new LibraryPropertiesAction(stateManager)), factory.createMenuItem(StandardActions.EDIT_PREAMBLE, new PreambleEditor(stateManager, undoManager, this.getDialogService())), - factory.createMenuItem(StandardActions.EDIT_STRINGS, new BibtexStringEditorAction(stateManager)), factory.createMenuItem(StandardActions.MANAGE_CITE_KEY_PATTERNS, new CitationKeyPatternAction(this, stateManager)) ); diff --git a/src/main/java/org/jabref/gui/libraryproperties/LibraryPropertiesViewModel.java b/src/main/java/org/jabref/gui/libraryproperties/LibraryPropertiesViewModel.java index 905fc55edb2..3f28f27e4d2 100644 --- a/src/main/java/org/jabref/gui/libraryproperties/LibraryPropertiesViewModel.java +++ b/src/main/java/org/jabref/gui/libraryproperties/LibraryPropertiesViewModel.java @@ -4,6 +4,7 @@ import javafx.collections.FXCollections; import javafx.collections.ObservableList; +import org.jabref.gui.libraryproperties.constants.ConstantsPropertiesView; import org.jabref.gui.libraryproperties.general.GeneralPropertiesView; import org.jabref.gui.libraryproperties.saving.SavingPropertiesView; import org.jabref.model.database.BibDatabaseContext; @@ -16,7 +17,8 @@ public LibraryPropertiesViewModel(BibDatabaseContext databaseContext) { propertiesTabs = FXCollections.observableArrayList( new GeneralPropertiesView(databaseContext), - new SavingPropertiesView(databaseContext) + new SavingPropertiesView(databaseContext), + new ConstantsPropertiesView(databaseContext) ); } diff --git a/src/main/java/org/jabref/gui/metadata/BibtexStringEditorItemModel.java b/src/main/java/org/jabref/gui/libraryproperties/constants/ConstantsItemModel.java similarity index 92% rename from src/main/java/org/jabref/gui/metadata/BibtexStringEditorItemModel.java rename to src/main/java/org/jabref/gui/libraryproperties/constants/ConstantsItemModel.java index 00ba787ce42..fb262a59e80 100644 --- a/src/main/java/org/jabref/gui/metadata/BibtexStringEditorItemModel.java +++ b/src/main/java/org/jabref/gui/libraryproperties/constants/ConstantsItemModel.java @@ -1,4 +1,4 @@ -package org.jabref.gui.metadata; +package org.jabref.gui.libraryproperties.constants; import java.util.regex.Pattern; @@ -14,7 +14,7 @@ import de.saxsys.mvvmfx.utils.validation.ValidationStatus; import de.saxsys.mvvmfx.utils.validation.Validator; -public class BibtexStringEditorItemModel { +public class ConstantsItemModel { private final static Pattern IS_NUMBER = Pattern.compile("-?\\d+(\\.\\d+)?"); @@ -25,12 +25,12 @@ public class BibtexStringEditorItemModel { private final Validator contentValidator; private final CompositeValidator combinedValidator; - public BibtexStringEditorItemModel(String label, String content) { + public ConstantsItemModel(String label, String content) { this.labelProperty.setValue(label); this.contentProperty.setValue(content); - labelValidator = new FunctionBasedValidator<>(this.labelProperty, BibtexStringEditorItemModel::validateLabel); - contentValidator = new FunctionBasedValidator<>(this.contentProperty, BibtexStringEditorItemModel::validateContent); + labelValidator = new FunctionBasedValidator<>(this.labelProperty, ConstantsItemModel::validateLabel); + contentValidator = new FunctionBasedValidator<>(this.contentProperty, ConstantsItemModel::validateContent); combinedValidator = new CompositeValidator(labelValidator, contentValidator); } diff --git a/src/main/java/org/jabref/gui/libraryproperties/constants/ConstantsProperties.fxml b/src/main/java/org/jabref/gui/libraryproperties/constants/ConstantsProperties.fxml new file mode 100644 index 00000000000..5b607f59037 --- /dev/null +++ b/src/main/java/org/jabref/gui/libraryproperties/constants/ConstantsProperties.fxml @@ -0,0 +1,50 @@ + + + + + + + + + + + + diff --git a/src/main/java/org/jabref/gui/metadata/BibtexStringEditorDialogView.java b/src/main/java/org/jabref/gui/libraryproperties/constants/ConstantsPropertiesView.java similarity index 54% rename from src/main/java/org/jabref/gui/metadata/BibtexStringEditorDialogView.java rename to src/main/java/org/jabref/gui/libraryproperties/constants/ConstantsPropertiesView.java index a758ac1a005..ddb97b38184 100644 --- a/src/main/java/org/jabref/gui/metadata/BibtexStringEditorDialogView.java +++ b/src/main/java/org/jabref/gui/libraryproperties/constants/ConstantsPropertiesView.java @@ -1,4 +1,4 @@ -package org.jabref.gui.metadata; +package org.jabref.gui.libraryproperties.constants; import java.util.Optional; @@ -8,73 +8,64 @@ import javafx.scene.control.Button; import javafx.scene.control.ButtonType; import javafx.scene.control.TableColumn; -import javafx.scene.control.TableColumn.CellEditEvent; import javafx.scene.control.TableView; import javafx.scene.control.Tooltip; import javafx.util.converter.DefaultStringConverter; -import org.jabref.gui.DialogService; import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.util.BaseDialog; +import org.jabref.gui.libraryproperties.AbstractPropertiesTabView; +import org.jabref.gui.libraryproperties.PropertiesTab; import org.jabref.gui.util.ValueTableCellFactory; import org.jabref.gui.util.ViewModelTextFieldTableCellVisualizationFactory; import org.jabref.logic.l10n.Localization; -import org.jabref.model.database.BibDatabase; +import org.jabref.model.database.BibDatabaseContext; +import org.jabref.preferences.PreferencesService; import com.airhacks.afterburner.views.ViewLoader; -public class BibtexStringEditorDialogView extends BaseDialog { +public class ConstantsPropertiesView extends AbstractPropertiesTabView implements PropertiesTab { - @FXML private TableView stringsList; - @FXML private TableColumn labelColumn; - @FXML private TableColumn contentColumn; - @FXML private TableColumn actionsColumn; + @FXML private TableView stringsList; + @FXML private TableColumn labelColumn; + @FXML private TableColumn contentColumn; + @FXML private TableColumn actionsColumn; @FXML private Button addStringButton; @FXML private ButtonType saveButton; - private final BibtexStringEditorDialogViewModel viewModel; + @Inject private PreferencesService preferencesService; - @Inject private DialogService dialogService; - - public BibtexStringEditorDialogView(BibDatabase database) { - this.viewModel = new BibtexStringEditorDialogViewModel(database); + public ConstantsPropertiesView(BibDatabaseContext databaseContext) { + this.databaseContext = databaseContext; ViewLoader.view(this) - .load() - .setAsDialogPane(this); - - Button btnSave = (Button) this.getDialogPane().lookupButton(saveButton); - - btnSave.disableProperty().bind(viewModel.validProperty().not()); - - setResultConverter(btn -> { - if (saveButton.equals(btn)) { - viewModel.save(); - } - return null; - }); + .root(this) + .load(); + } - setTitle(Localization.lang("Strings for library")); + @Override + public String getTabName() { + return Localization.lang("Strings constants"); } - @FXML - private void initialize() { + public void initialize() { + this.viewModel = new ConstantsPropertiesViewModel(databaseContext); + addStringButton.setTooltip(new Tooltip(Localization.lang("New string"))); labelColumn.setSortable(true); labelColumn.setReorderable(false); labelColumn.setCellValueFactory(cellData -> cellData.getValue().labelProperty()); - new ViewModelTextFieldTableCellVisualizationFactory() - .withValidation(BibtexStringEditorItemModel::labelValidation) + new ViewModelTextFieldTableCellVisualizationFactory() + .withValidation(ConstantsItemModel::labelValidation) .install(labelColumn, new DefaultStringConverter()); - labelColumn.setOnEditCommit((CellEditEvent cellEvent) -> { + labelColumn.setOnEditCommit((TableColumn.CellEditEvent cellEvent) -> { - BibtexStringEditorItemModel cellItem = cellEvent.getTableView() - .getItems() - .get(cellEvent.getTablePosition().getRow()); + ConstantsItemModel cellItem = cellEvent.getTableView() + .getItems() + .get(cellEvent.getTablePosition().getRow()); - Optional existingItem = viewModel.labelAlreadyExists(cellEvent.getNewValue()); + Optional existingItem = viewModel.labelAlreadyExists(cellEvent.getNewValue()); if (existingItem.isPresent() && !existingItem.get().equals(cellItem)) { dialogService.showErrorDialogAndWait(Localization.lang( @@ -92,16 +83,16 @@ private void initialize() { contentColumn.setSortable(true); contentColumn.setReorderable(false); contentColumn.setCellValueFactory(cellData -> cellData.getValue().contentProperty()); - new ViewModelTextFieldTableCellVisualizationFactory() - .withValidation(BibtexStringEditorItemModel::contentValidation) + new ViewModelTextFieldTableCellVisualizationFactory() + .withValidation(ConstantsItemModel::contentValidation) .install(contentColumn, new DefaultStringConverter()); - contentColumn.setOnEditCommit((CellEditEvent cell) -> + contentColumn.setOnEditCommit((TableColumn.CellEditEvent cell) -> cell.getRowValue().setContent(cell.getNewValue())); actionsColumn.setSortable(false); actionsColumn.setReorderable(false); actionsColumn.setCellValueFactory(cellData -> cellData.getValue().labelProperty()); - new ValueTableCellFactory() + new ValueTableCellFactory() .withGraphic(label -> IconTheme.JabRefIcons.DELETE_ENTRY.getGraphicNode()) .withTooltip(label -> Localization.lang("Remove string %0", label)) .withOnMouseClickedEvent(item -> evt -> diff --git a/src/main/java/org/jabref/gui/metadata/BibtexStringEditorDialogViewModel.java b/src/main/java/org/jabref/gui/libraryproperties/constants/ConstantsPropertiesViewModel.java similarity index 55% rename from src/main/java/org/jabref/gui/metadata/BibtexStringEditorDialogViewModel.java rename to src/main/java/org/jabref/gui/libraryproperties/constants/ConstantsPropertiesViewModel.java index 723342b0f0e..40b93c8517f 100644 --- a/src/main/java/org/jabref/gui/metadata/BibtexStringEditorDialogViewModel.java +++ b/src/main/java/org/jabref/gui/libraryproperties/constants/ConstantsPropertiesViewModel.java @@ -1,4 +1,4 @@ -package org.jabref.gui.metadata; +package org.jabref.gui.libraryproperties.constants; import java.util.Optional; import java.util.stream.Collectors; @@ -11,76 +11,79 @@ import javafx.collections.FXCollections; import javafx.collections.ObservableList; -import org.jabref.gui.AbstractViewModel; import org.jabref.gui.help.HelpAction; +import org.jabref.gui.libraryproperties.PropertiesTabViewModel; import org.jabref.logic.bibtex.comparator.BibtexStringComparator; import org.jabref.logic.help.HelpFile; -import org.jabref.model.database.BibDatabase; +import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibtexString; import com.tobiasdiez.easybind.EasyBind; -public class BibtexStringEditorDialogViewModel extends AbstractViewModel { +public class ConstantsPropertiesViewModel implements PropertiesTabViewModel { + private static final String NEW_STRING_LABEL = "NewString"; // must not contain spaces - private final ListProperty stringsListProperty = + private final ListProperty stringsListProperty = new SimpleListProperty<>(FXCollections.observableArrayList()); - private final BibDatabase bibDatabase; private final BooleanProperty validProperty = new SimpleBooleanProperty(); - public BibtexStringEditorDialogViewModel(BibDatabase bibDatabase) { - this.bibDatabase = bibDatabase; - addAllStringsFromDB(); + private final BibDatabaseContext databaseContext; + + public ConstantsPropertiesViewModel(BibDatabaseContext databaseContext) { + this.databaseContext = databaseContext; ObservableList> allValidProperty = - EasyBind.map(stringsListProperty(), BibtexStringEditorItemModel::combinedValidationValidProperty); + EasyBind.map(stringsListProperty, ConstantsItemModel::combinedValidationValidProperty); validProperty.bind(EasyBind.combine(allValidProperty, stream -> stream.allMatch(valid -> valid))); } - private void addAllStringsFromDB() { - stringsListProperty.addAll(bibDatabase.getStringValues().stream() - .sorted(new BibtexStringComparator(false)) - .map(this::convertFromBibTexString) - .collect(Collectors.toSet())); + @Override + public void setValues() { + stringsListProperty.addAll(databaseContext.getDatabase().getStringValues().stream() + .sorted(new BibtexStringComparator(false)) + .map(this::convertFromBibTexString) + .collect(Collectors.toSet())); } public void addNewString() { - BibtexStringEditorItemModel newItem; + ConstantsItemModel newItem; if (labelAlreadyExists(NEW_STRING_LABEL).isPresent()) { int i = 1; while (labelAlreadyExists(NEW_STRING_LABEL + i).isPresent()) { i++; } - newItem = new BibtexStringEditorItemModel(NEW_STRING_LABEL + i, ""); + newItem = new ConstantsItemModel(NEW_STRING_LABEL + i, ""); } else { - newItem = new BibtexStringEditorItemModel(NEW_STRING_LABEL, ""); + newItem = new ConstantsItemModel(NEW_STRING_LABEL, ""); } stringsListProperty.add(newItem); } - public void removeString(BibtexStringEditorItemModel item) { + public void removeString(ConstantsItemModel item) { stringsListProperty.remove(item); } - private BibtexStringEditorItemModel convertFromBibTexString(BibtexString bibtexString) { - return new BibtexStringEditorItemModel(bibtexString.getName(), bibtexString.getContent()); + private ConstantsItemModel convertFromBibTexString(BibtexString bibtexString) { + return new ConstantsItemModel(bibtexString.getName(), bibtexString.getContent()); } - public void save() { - bibDatabase.setStrings(stringsListProperty.stream() + @Override + public void storeSettings() { + databaseContext.getDatabase().setStrings(stringsListProperty.stream() .map(this::fromBibtexStringViewModel) .collect(Collectors.toList())); } - private BibtexString fromBibtexStringViewModel(BibtexStringEditorItemModel viewModel) { + private BibtexString fromBibtexStringViewModel(ConstantsItemModel viewModel) { String label = viewModel.labelProperty().getValue(); String content = viewModel.contentProperty().getValue(); return new BibtexString(label, content); } - public Optional labelAlreadyExists(String label) { + public Optional labelAlreadyExists(String label) { return stringsListProperty.stream() .filter(item -> item.labelProperty().getValue().equals(label)) .findFirst(); @@ -90,7 +93,7 @@ public void openHelpPage() { HelpAction.openHelpPage(HelpFile.STRING_EDITOR); } - public ListProperty stringsListProperty() { + public ListProperty stringsListProperty() { return stringsListProperty; } diff --git a/src/main/java/org/jabref/gui/metadata/BibtexStringEditorAction.java b/src/main/java/org/jabref/gui/metadata/BibtexStringEditorAction.java deleted file mode 100644 index 4f2f8b7b67b..00000000000 --- a/src/main/java/org/jabref/gui/metadata/BibtexStringEditorAction.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.jabref.gui.metadata; - -import org.jabref.gui.DialogService; -import org.jabref.gui.StateManager; -import org.jabref.gui.actions.SimpleCommand; -import org.jabref.model.database.BibDatabaseContext; - -import com.airhacks.afterburner.injection.Injector; - -import static org.jabref.gui.actions.ActionHelper.needsDatabase; - -public class BibtexStringEditorAction extends SimpleCommand { - - private final StateManager stateManager; - - public BibtexStringEditorAction(StateManager stateManager) { - this.stateManager = stateManager; - - this.executable.bind(needsDatabase(this.stateManager)); - } - - @Override - public void execute() { - DialogService dialogService = Injector.instantiateModelOrService(DialogService.class); - BibDatabaseContext database = stateManager.getActiveDatabase().orElseThrow(() -> new NullPointerException("Database null")); - dialogService.showCustomDialogAndWait(new BibtexStringEditorDialogView(database.getDatabase())); - } -} diff --git a/src/main/java/org/jabref/gui/metadata/BibtexStringEditorDialog.fxml b/src/main/java/org/jabref/gui/metadata/BibtexStringEditorDialog.fxml deleted file mode 100644 index 18f26e88249..00000000000 --- a/src/main/java/org/jabref/gui/metadata/BibtexStringEditorDialog.fxml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties index 3cffb6fc69f..d5fc822ba6f 100644 --- a/src/main/resources/l10n/JabRef_en.properties +++ b/src/main/resources/l10n/JabRef_en.properties @@ -1930,6 +1930,7 @@ Remove\ keyword=Remove keyword Are\ you\ sure\ you\ want\ to\ remove\ keyword\:\ \"%0\"?=Are you sure you want to remove keyword: "%0"? Reset\ to\ default=Reset to default Edit\ string\ constants=Edit string constants +String\ constants=String constants Export\ all\ entries=Export all entries Generate\ citation\ keys=Generate citation keys Groups\ interface=Groups interface From 208ea0710bb9afe89e0ba1da16de25e800169198 Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage Date: Mon, 22 Nov 2021 16:02:21 +0100 Subject: [PATCH 07/14] Converted KeyPatternProperties --- src/main/java/org/jabref/gui/JabRefFrame.java | 4 +- .../CitationKeyPatternAction.java | 27 --- .../CitationKeyPatternDialog.java | 64 ------- .../CitationKeyPatternPanel.java | 171 ------------------ .../LibraryPropertiesView.java | 12 +- .../LibraryPropertiesViewModel.java | 4 +- .../keypattern/KeyPatternProperties.fxml | 25 +++ .../keypattern/KeyPatternPropertiesView.java | 70 +++++++ .../KeyPatternPropertiesViewModel.java | 67 +++++++ 9 files changed, 171 insertions(+), 273 deletions(-) delete mode 100644 src/main/java/org/jabref/gui/citationkeypattern/CitationKeyPatternAction.java delete mode 100644 src/main/java/org/jabref/gui/citationkeypattern/CitationKeyPatternDialog.java delete mode 100644 src/main/java/org/jabref/gui/citationkeypattern/CitationKeyPatternPanel.java create mode 100644 src/main/java/org/jabref/gui/libraryproperties/keypattern/KeyPatternProperties.fxml create mode 100644 src/main/java/org/jabref/gui/libraryproperties/keypattern/KeyPatternPropertiesView.java create mode 100644 src/main/java/org/jabref/gui/libraryproperties/keypattern/KeyPatternPropertiesViewModel.java diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java index 0425e520b91..4007af3d240 100644 --- a/src/main/java/org/jabref/gui/JabRefFrame.java +++ b/src/main/java/org/jabref/gui/JabRefFrame.java @@ -54,7 +54,6 @@ import org.jabref.gui.actions.StandardActions; import org.jabref.gui.auximport.NewSubLibraryAction; import org.jabref.gui.bibtexextractor.ExtractBibtexAction; -import org.jabref.gui.citationkeypattern.CitationKeyPatternAction; import org.jabref.gui.citationkeypattern.GenerateCitationKeyAction; import org.jabref.gui.cleanup.CleanupAction; import org.jabref.gui.contentselector.ManageContentSelectorAction; @@ -776,8 +775,7 @@ private MenuBar createMenu() { new SeparatorMenuItem(), factory.createMenuItem(StandardActions.LIBRARY_PROPERTIES, new LibraryPropertiesAction(stateManager)), - factory.createMenuItem(StandardActions.EDIT_PREAMBLE, new PreambleEditor(stateManager, undoManager, this.getDialogService())), - factory.createMenuItem(StandardActions.MANAGE_CITE_KEY_PATTERNS, new CitationKeyPatternAction(this, stateManager)) + factory.createMenuItem(StandardActions.EDIT_PREAMBLE, new PreambleEditor(stateManager, undoManager, this.getDialogService())) ); quality.getItems().addAll( diff --git a/src/main/java/org/jabref/gui/citationkeypattern/CitationKeyPatternAction.java b/src/main/java/org/jabref/gui/citationkeypattern/CitationKeyPatternAction.java deleted file mode 100644 index cb7676fbc08..00000000000 --- a/src/main/java/org/jabref/gui/citationkeypattern/CitationKeyPatternAction.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.jabref.gui.citationkeypattern; - -import org.jabref.gui.DialogService; -import org.jabref.gui.JabRefFrame; -import org.jabref.gui.StateManager; -import org.jabref.gui.actions.SimpleCommand; - -import com.airhacks.afterburner.injection.Injector; - -import static org.jabref.gui.actions.ActionHelper.needsDatabase; - -public class CitationKeyPatternAction extends SimpleCommand { - - private final JabRefFrame frame; - - public CitationKeyPatternAction(JabRefFrame frame, StateManager stateManager) { - this.frame = frame; - - this.executable.bind(needsDatabase(stateManager)); - } - - @Override - public void execute() { - DialogService dialogService = Injector.instantiateModelOrService(DialogService.class); - dialogService.showCustomDialogAndWait(new CitationKeyPatternDialog(frame.getCurrentLibraryTab())); - } -} diff --git a/src/main/java/org/jabref/gui/citationkeypattern/CitationKeyPatternDialog.java b/src/main/java/org/jabref/gui/citationkeypattern/CitationKeyPatternDialog.java deleted file mode 100644 index d92f35c7b35..00000000000 --- a/src/main/java/org/jabref/gui/citationkeypattern/CitationKeyPatternDialog.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.jabref.gui.citationkeypattern; - -import javafx.scene.control.ButtonType; - -import org.jabref.gui.Globals; -import org.jabref.gui.LibraryTab; -import org.jabref.gui.util.BaseDialog; -import org.jabref.logic.citationkeypattern.AbstractCitationKeyPattern; -import org.jabref.logic.l10n.Localization; -import org.jabref.model.metadata.MetaData; - -public class CitationKeyPatternDialog extends BaseDialog { - - private final MetaData metaData; - private final LibraryTab libraryTab; - private final CitationKeyPatternPanel citationKeyPatternPanel; - - public CitationKeyPatternDialog(LibraryTab libraryTab) { - this.citationKeyPatternPanel = new CitationKeyPatternPanel(libraryTab.getBibDatabaseContext()); - this.libraryTab = libraryTab; - this.metaData = libraryTab.getBibDatabaseContext().getMetaData(); - AbstractCitationKeyPattern keyPattern = metaData.getCiteKeyPattern(Globals.prefs.getGlobalCitationKeyPattern()); - citationKeyPatternPanel.setValues(keyPattern); - init(); - } - - private void init() { - - this.setTitle(Localization.lang("Citation key patterns")); - - this.getDialogPane().setContent(citationKeyPatternPanel.getPanel()); - this.getDialogPane().getButtonTypes().addAll(ButtonType.APPLY, ButtonType.CANCEL); - - this.setResultConverter(button -> { - if (button == ButtonType.APPLY) { - metaData.setCiteKeyPattern(citationKeyPatternPanel.getKeyPatternAsDatabaseKeyPattern()); - libraryTab.markNonUndoableBaseChanged(); - } - - return null; - }); - - // Keep this for later conversion of the library-properties -/* void storeSettings() { - DataBaseKeyPattern newKeyPattern = new DatabaseBibtexKeyPattern(preferences.getKeyPattern()); - - bibtexKeyPatternTableView.patternListProperty.forEach(item -> { - String patternString = item.getPattern(); - if (!item.getEntryType().getName().equals("default")) { - if (!patternString.trim().isEmpty()) { - newKeyPattern.addBibtexKeyPattern(item.getEntryType(), patternString); - } - } - }); - - if (!defaultItem.getPattern().trim().isEmpty()) { - // we do not trim the value at the assignment to enable users to have spaces at the beginning and - // at the end of the pattern - newKeyPattern.setDefaultValue(defaultItemProperty.getPattern()); - } - } */ - - } -} diff --git a/src/main/java/org/jabref/gui/citationkeypattern/CitationKeyPatternPanel.java b/src/main/java/org/jabref/gui/citationkeypattern/CitationKeyPatternPanel.java deleted file mode 100644 index 9f1115d8c52..00000000000 --- a/src/main/java/org/jabref/gui/citationkeypattern/CitationKeyPatternPanel.java +++ /dev/null @@ -1,171 +0,0 @@ -package org.jabref.gui.citationkeypattern; - -import java.util.HashMap; -import java.util.Map; - -import javafx.scene.Node; -import javafx.scene.control.Button; -import javafx.scene.control.Label; -import javafx.scene.control.TextField; -import javafx.scene.layout.GridPane; -import javafx.scene.layout.Pane; - -import org.jabref.gui.Globals; -import org.jabref.gui.actions.ActionFactory; -import org.jabref.gui.actions.StandardActions; -import org.jabref.gui.help.HelpAction; -import org.jabref.logic.citationkeypattern.AbstractCitationKeyPattern; -import org.jabref.logic.citationkeypattern.DatabaseCitationKeyPattern; -import org.jabref.logic.help.HelpFile; -import org.jabref.logic.l10n.Localization; -import org.jabref.model.database.BibDatabaseContext; -import org.jabref.model.database.BibDatabaseMode; -import org.jabref.model.entry.BibEntryType; -import org.jabref.model.entry.types.EntryType; -import org.jabref.preferences.JabRefPreferences; - -public class CitationKeyPatternPanel extends Pane { - - // default pattern - protected final TextField defaultPat = new TextField(); - - // one field for each type - private final Map textFields = new HashMap<>(); - private final BibDatabaseContext databaseContext; - private final GridPane gridPane = new GridPane(); - - public CitationKeyPatternPanel(BibDatabaseContext databaseContext) { - this.databaseContext = databaseContext; - gridPane.setHgap(10); - gridPane.setVgap(5); - buildGUI(); - } - - private static void setValue(TextField tf, EntryType fieldName, AbstractCitationKeyPattern keyPattern) { - if (keyPattern.isDefaultValue(fieldName)) { - tf.setText(""); - } else { - tf.setText(keyPattern.getValue(fieldName).get(0)); - } - } - - private void buildGUI() { - BibDatabaseMode mode = databaseContext.getMode(); - - // The following got irrelevant - global settings for CitationKeyPattern are handled by - // commonfxcontrols/CitationKeyPatternPanel.java - // ToDo: this one should be abandoned - /* - // check mode of currently used DB - if (panel != null) { - mode = panel.getBibDatabaseContext().getMode(); - } else { - // use preferences value if no DB is open - mode = Globals.prefs.getDefaultBibDatabaseMode(); - } - */ - - int rowIndex = 1; - int columnIndex = 0; - // The header - can be removed - int columnsNumber = 2; - for (int i = 0; i < columnsNumber; i++) { - Label label = new Label(Localization.lang("Entry type")); - Label keyPattern = new Label(Localization.lang("Key pattern")); - gridPane.add(label, ++columnIndex, rowIndex); - gridPane.add(keyPattern, ++columnIndex, rowIndex); - columnIndex++; - } - - rowIndex++; - Label defaultPattern = new Label(Localization.lang("Default pattern")); - Button button = new Button("Default"); - button.setOnAction(e -> defaultPat.setText((String) Globals.prefs.defaults.get(JabRefPreferences.DEFAULT_CITATION_KEY_PATTERN))); - gridPane.add(defaultPattern, 1, rowIndex); - gridPane.add(defaultPat, 2, rowIndex); - gridPane.add(button, 3, rowIndex); - - columnIndex = 1; - for (BibEntryType type : Globals.entryTypesManager.getAllTypes(mode)) { - Label label1 = new Label(type.getType().getDisplayName()); - TextField textField = new TextField(); - Button button1 = new Button("Default"); - button1.setOnAction(e1 -> textField.setText((String) Globals.prefs.defaults.get(JabRefPreferences.DEFAULT_CITATION_KEY_PATTERN))); - - gridPane.add(label1, 1 + (columnIndex * 3), rowIndex); - gridPane.add(textField, 2 + (columnIndex * 3), rowIndex); - gridPane.add(button1, 3 + (columnIndex * 3), rowIndex); - - textFields.put(type.getType(), textField); - - if (columnIndex == (columnsNumber - 1)) { - columnIndex = 0; - rowIndex++; - } else { - columnIndex++; - } - } - - rowIndex++; - - ActionFactory factory = new ActionFactory(Globals.prefs.getKeyBindingRepository()); - Button help = factory.createIconButton(StandardActions.HELP_KEY_PATTERNS, new HelpAction(HelpFile.CITATION_KEY_PATTERN)); - gridPane.add(help, 1, rowIndex); - - Button btnDefaultAll1 = new Button(Localization.lang("Reset all")); - btnDefaultAll1.setOnAction(e -> { - // reset all fields - for (TextField field : textFields.values()) { - field.setText(""); - } - defaultPat.setText((String) Globals.prefs.defaults.get(JabRefPreferences.DEFAULT_CITATION_KEY_PATTERN)); - }); - gridPane.add(btnDefaultAll1, 2, rowIndex); - } - - public DatabaseCitationKeyPattern getKeyPatternAsDatabaseKeyPattern() { - DatabaseCitationKeyPattern res = new DatabaseCitationKeyPattern(Globals.prefs.getGlobalCitationKeyPattern()); - fillPatternUsingPanelData(res); - return res; - } - - /** - * fill the given LabelPattern by values generated from the text fields - */ - private void fillPatternUsingPanelData(AbstractCitationKeyPattern keypatterns) { - // each entry type - for (Map.Entry entry : textFields.entrySet()) { - String text = entry.getValue().getText(); - if (!text.trim().isEmpty()) { - keypatterns.addCitationKeyPattern(entry.getKey(), text); - } - } - - // default value - String text = defaultPat.getText(); - if (!text.trim().isEmpty()) { // we do not trim the value at the assignment to enable users to have spaces at the beginning and at the end of the pattern - keypatterns.setDefaultValue(text); - } - } - - /** - * Fills the current values to the text fields - * - * @param keyPattern the CitationKeyPattern to use as initial value - */ - public void setValues(AbstractCitationKeyPattern keyPattern) { - for (Map.Entry entry : textFields.entrySet()) { - setValue(entry.getValue(), entry.getKey(), keyPattern); - } - - if ((keyPattern.getDefaultValue() == null) || keyPattern.getDefaultValue().isEmpty()) { - defaultPat.setText(""); - } else { - defaultPat.setText(keyPattern.getDefaultValue().get(0)); - } - } - - public Node getPanel() { - return gridPane; - } -} diff --git a/src/main/java/org/jabref/gui/libraryproperties/LibraryPropertiesView.java b/src/main/java/org/jabref/gui/libraryproperties/LibraryPropertiesView.java index 28a6ab97665..e699513c38f 100644 --- a/src/main/java/org/jabref/gui/libraryproperties/LibraryPropertiesView.java +++ b/src/main/java/org/jabref/gui/libraryproperties/LibraryPropertiesView.java @@ -1,14 +1,11 @@ package org.jabref.gui.libraryproperties; -import javax.inject.Inject; - import javafx.fxml.FXML; import javafx.scene.control.ButtonType; import javafx.scene.control.ScrollPane; import javafx.scene.control.Tab; import javafx.scene.control.TabPane; -import org.jabref.gui.DialogService; import org.jabref.gui.util.BaseDialog; import org.jabref.gui.util.ControlHelper; import org.jabref.logic.l10n.Localization; @@ -21,8 +18,6 @@ public class LibraryPropertiesView extends BaseDialog) pane).prefWidthProperty().bind(tabPane.widthProperty()); - ((AbstractPropertiesTabView) pane).getStyleClass().add("propertiesTab"); + if (pane instanceof AbstractPropertiesTabView propertiesTab) { + propertiesTab.prefHeightProperty().bind(tabPane.tabMaxHeightProperty()); + propertiesTab.prefWidthProperty().bind(tabPane.widthProperty()); + propertiesTab.getStyleClass().add("propertiesTab"); + } } viewModel.setValues(); diff --git a/src/main/java/org/jabref/gui/libraryproperties/LibraryPropertiesViewModel.java b/src/main/java/org/jabref/gui/libraryproperties/LibraryPropertiesViewModel.java index 3f28f27e4d2..6922d3ee80e 100644 --- a/src/main/java/org/jabref/gui/libraryproperties/LibraryPropertiesViewModel.java +++ b/src/main/java/org/jabref/gui/libraryproperties/LibraryPropertiesViewModel.java @@ -6,6 +6,7 @@ import org.jabref.gui.libraryproperties.constants.ConstantsPropertiesView; import org.jabref.gui.libraryproperties.general.GeneralPropertiesView; +import org.jabref.gui.libraryproperties.keypattern.KeyPatternPropertiesView; import org.jabref.gui.libraryproperties.saving.SavingPropertiesView; import org.jabref.model.database.BibDatabaseContext; @@ -18,7 +19,8 @@ public LibraryPropertiesViewModel(BibDatabaseContext databaseContext) { propertiesTabs = FXCollections.observableArrayList( new GeneralPropertiesView(databaseContext), new SavingPropertiesView(databaseContext), - new ConstantsPropertiesView(databaseContext) + new ConstantsPropertiesView(databaseContext), + new KeyPatternPropertiesView(databaseContext) ); } diff --git a/src/main/java/org/jabref/gui/libraryproperties/keypattern/KeyPatternProperties.fxml b/src/main/java/org/jabref/gui/libraryproperties/keypattern/KeyPatternProperties.fxml new file mode 100644 index 00000000000..c35571214cd --- /dev/null +++ b/src/main/java/org/jabref/gui/libraryproperties/keypattern/KeyPatternProperties.fxml @@ -0,0 +1,25 @@ + + + + + + + + + + +