diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b7565acf73..75e81609749 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `# ## [Unreleased] ### Changed +- Continued to redesign the user interface: this time the editor got a fresh coat of paint: + - The buttons were changed to icons. + - Removed the hidden feature that a double click in the editor inserted the current date. + ### Fixed diff --git a/build.gradle b/build.gradle index adb22bb9e07..85bfcbe70e2 100644 --- a/build.gradle +++ b/build.gradle @@ -136,8 +136,6 @@ dependencies { compile 'org.citationstyles:locales:1.0.1-SNAPSHOT' compile 'de.undercouch:citeproc-java:1.0.1' - compile 'com.github.lgooddatepicker:LGoodDatePicker:8.3.0' - compile 'com.github.tomtung:latex2unicode_2.12:0.2' compile group: 'com.microsoft.azure', name: 'applicationinsights-core', version: '1.0.+' diff --git a/external-libraries.txt b/external-libraries.txt index 7f7484b92e5..6dbe8716f0b 100644 --- a/external-libraries.txt +++ b/external-libraries.txt @@ -175,11 +175,6 @@ Project: SwingX URL: https://swingx.java.net/ License: LGPL-3.0 -Id: com.github.lgooddatepicker:LGoodDatePicker -Project: LGoodDatePicker -URL: https://github.com/LGoodDatePicker/LGoodDatePicker -License: MIT - Id: spin Path: lib/spin.jar Project: Spin diff --git a/src/main/java/org/jabref/gui/date/DatePickerButton.java b/src/main/java/org/jabref/gui/date/DatePickerButton.java deleted file mode 100644 index 2a1ee0f282c..00000000000 --- a/src/main/java/org/jabref/gui/date/DatePickerButton.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.jabref.gui.date; - -import java.awt.BorderLayout; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.time.format.DateTimeParseException; - -import javax.swing.JComponent; -import javax.swing.JPanel; - -import org.jabref.Globals; -import org.jabref.gui.IconTheme; -import org.jabref.gui.fieldeditors.FieldEditor; -import org.jabref.preferences.JabRefPreferences; - -import com.github.lgooddatepicker.components.DatePicker; -import com.github.lgooddatepicker.components.DatePickerSettings; -import com.github.lgooddatepicker.optionalusertools.DateChangeListener; -import com.github.lgooddatepicker.zinternaltools.DateChangeEvent; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * wrapper and service class for the DatePicker handling at the EntryEditor - */ -public class DatePickerButton implements DateChangeListener { - - private static final Log LOGGER = LogFactory.getLog(DatePickerButton.class); - - private final DatePicker datePicker; - private final JPanel panel = new JPanel(); - private final FieldEditor editor; - private final DateTimeFormatter dateTimeFormatter; - - - public DatePickerButton(FieldEditor pEditor, boolean useIsoFormat) { - if (useIsoFormat) { - dateTimeFormatter = DateTimeFormatter.ISO_DATE; - } else { - dateTimeFormatter = DateTimeFormatter.ofPattern(Globals.prefs.get(JabRefPreferences.TIME_STAMP_FORMAT)); - } - - // Create a date picker with hidden text field (showing button only). - DatePickerSettings dateSettings = new DatePickerSettings(); - dateSettings.setVisibleDateTextField(false); - dateSettings.setGapBeforeButtonPixels(0); - - datePicker = new DatePicker(dateSettings); - datePicker.addDateChangeListener(this); - datePicker.getComponentToggleCalendarButton().setIcon(IconTheme.JabRefIcon.DATE_PICKER.getIcon()); - datePicker.getComponentToggleCalendarButton().setText(""); - - panel.setLayout(new BorderLayout()); - panel.add(datePicker, BorderLayout.WEST); - editor = pEditor; - } - - @Override - public void dateChanged(DateChangeEvent dateChangeEvent) { - LocalDate date = datePicker.getDate(); - String newDate = ""; - if (date != null) { - newDate = dateTimeFormatter.format(date.atStartOfDay()); - } - if (!newDate.equals(editor.getText())) { - editor.setText(newDate); - } - // Set focus to editor component after changing its text: - editor.requestFocus(); - } - - public JComponent getDatePicker() { - //return datePicker; - return panel; - } - - /** - * Used to set the calender popup to the currently used Date - * @param dateString - */ - public void updateDatePickerDate(String dateString) { - // unregister DateChangeListener before update to prevent circular calls resulting in IllegalStateExceptions - datePicker.removeDateChangeListener(this); - - if (dateString != null && !dateString.isEmpty()) { - try { - datePicker.setDate(LocalDate.parse(dateString, dateTimeFormatter)); - } catch (DateTimeParseException exception) { - LOGGER.warn("Unable to parse stored date for field '" + editor.getFieldName() + "' with current settings. " - + "Clear button in calender popup will not work."); - } - } - - datePicker.addDateChangeListener(this); - } -} diff --git a/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java b/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java index 40ac0002ee5..28b0493e9fb 100644 --- a/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java +++ b/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java @@ -610,13 +610,7 @@ public Optional getExtra(final FieldEditor editor) { final Set fieldExtras = InternalBibtexFields.getFieldProperties(fieldName); - // timestamp or a other field with datepicker command - if (Globals.prefs.get(JabRefPreferences.TIME_STAMP_FIELD).equals(fieldName) - || fieldExtras.contains(FieldProperty.DATE)) { - // double click AND datefield => insert the current date (today) - return FieldExtraComponents.getDateTimeExtraComponent(editor, - fieldExtras.contains(FieldProperty.DATE), fieldExtras.contains(FieldProperty.ISO_DATE)); - } else if (!panel.getBibDatabaseContext().getMetaData().getContentSelectorValuesForField(fieldName).isEmpty()) { + if (!panel.getBibDatabaseContext().getMetaData().getContentSelectorValuesForField(fieldName).isEmpty()) { return FieldExtraComponents.getSelectorExtraComponent(frame, panel, editor, contentSelectors, storeFieldAction); } else if (fieldExtras.contains(FieldProperty.YES_NO)) { diff --git a/src/main/java/org/jabref/gui/entryeditor/FieldExtraComponents.java b/src/main/java/org/jabref/gui/entryeditor/FieldExtraComponents.java index 26de6b45c3b..123f5179158 100644 --- a/src/main/java/org/jabref/gui/entryeditor/FieldExtraComponents.java +++ b/src/main/java/org/jabref/gui/entryeditor/FieldExtraComponents.java @@ -14,7 +14,6 @@ import org.jabref.gui.BasePanel; import org.jabref.gui.JabRefFrame; import org.jabref.gui.contentselector.FieldContentSelector; -import org.jabref.gui.date.DatePickerButton; import org.jabref.gui.entryeditor.EntryEditor.StoreFieldAction; import org.jabref.gui.fieldeditors.FieldEditor; import org.jabref.logic.l10n.Localization; @@ -103,64 +102,6 @@ public static Optional getSelectorExtraComponent(JabRefFrame frame, return Optional.of(ws); } - /** - * Set up field such that double click inserts the current date - * If isDataPicker is True, a button with a data picker is returned - * - * @param editor reference to the FieldEditor to display the date value - * @param useDatePicker shows a DatePickerButton if true - * @param useIsoFormat if true ISO format is always used - * @return - */ - public static Optional getDateTimeExtraComponent(FieldEditor editor, boolean useDatePicker, - boolean useIsoFormat) { - /* - ((JTextArea) editor).addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - if (e.getClickCount() == 2) {// double click - String date = ""; - if(useIsoFormat) { - date = DateTimeFormatter.ISO_DATE.format(LocalDate.now()); - } else { - date = DateTimeFormatter.ofPattern(Globals.prefs.get(JabRefPreferences.TIME_STAMP_FORMAT)).format( - LocalDateTime.now()); - } - editor.setText(date); - } - } - }); - */ - - // insert a datepicker, if the extras field contains this command - if (useDatePicker) { - DatePickerButton datePicker = new DatePickerButton(editor, useIsoFormat); - - /* - // register a DocumentListener on the underlying text document which notifies the DatePicker which date is currently set - ((JTextArea) editor).getDocument().addDocumentListener(new DocumentListener() { - @Override - public void insertUpdate(DocumentEvent e) { - datePicker.updateDatePickerDate(editor.getText()); - } - @Override - public void removeUpdate(DocumentEvent e) { - datePicker.updateDatePickerDate(editor.getText()); - } - @Override - public void changedUpdate(DocumentEvent e) { - datePicker.updateDatePickerDate(editor.getText()); - } - }); - */ - - return Optional.of(datePicker.getDatePicker()); - } else { - return Optional.empty(); - } - - } - /** * Return a dropdown list with the alternatives for editor type fields * diff --git a/src/main/java/org/jabref/gui/fieldeditors/AbstractEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/AbstractEditorViewModel.java new file mode 100644 index 00000000000..dd357a3685b --- /dev/null +++ b/src/main/java/org/jabref/gui/fieldeditors/AbstractEditorViewModel.java @@ -0,0 +1,27 @@ +package org.jabref.gui.fieldeditors; + +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.property.StringProperty; + +import org.jabref.gui.AbstractViewModel; +import org.jabref.gui.util.BindingsHelper; +import org.jabref.model.entry.BibEntry; + +public class AbstractEditorViewModel extends AbstractViewModel { + protected StringProperty text = new SimpleStringProperty(""); + + public StringProperty textProperty() { + return text; + } + + public void bindToEntry(String fieldName, BibEntry entry) { + BindingsHelper.bindBidirectional( + this.textProperty(), + entry.getFieldBinding(fieldName), + newValue -> { + if (newValue != null) { + entry.setField(fieldName, newValue); + } + }); + } +} diff --git a/src/main/java/org/jabref/gui/fieldeditors/DateEditor.fxml b/src/main/java/org/jabref/gui/fieldeditors/DateEditor.fxml new file mode 100644 index 00000000000..8d8e17b2188 --- /dev/null +++ b/src/main/java/org/jabref/gui/fieldeditors/DateEditor.fxml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/main/java/org/jabref/gui/fieldeditors/DateEditor.java b/src/main/java/org/jabref/gui/fieldeditors/DateEditor.java new file mode 100644 index 00000000000..84a33ec0fb4 --- /dev/null +++ b/src/main/java/org/jabref/gui/fieldeditors/DateEditor.java @@ -0,0 +1,42 @@ +package org.jabref.gui.fieldeditors; + +import java.time.format.DateTimeFormatter; + +import javafx.fxml.FXML; +import javafx.scene.Parent; +import javafx.scene.control.DatePicker; +import javafx.scene.layout.HBox; + +import org.jabref.gui.util.ControlHelper; +import org.jabref.model.entry.BibEntry; + +public class DateEditor extends HBox implements FieldEditorFX { + + private final String fieldName; + @FXML private DateEditorViewModel viewModel; + @FXML private DatePicker datePicker; + + public DateEditor(String fieldName, DateTimeFormatter dateFormatter) { + this.fieldName = fieldName; + this.viewModel = new DateEditorViewModel(dateFormatter); + + ControlHelper.loadFXMLForControl(this); + + datePicker.setConverter(viewModel.getDateToStringConverter()); + datePicker.getEditor().textProperty().bindBidirectional(viewModel.textProperty()); + } + + public DateEditorViewModel getViewModel() { + return viewModel; + } + + @Override + public void bindToEntry(BibEntry entry) { + viewModel.bindToEntry(fieldName, entry); + } + + @Override + public Parent getNode() { + return this; + } +} diff --git a/src/main/java/org/jabref/gui/fieldeditors/DateEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/DateEditorViewModel.java new file mode 100644 index 00000000000..09dd3ea98dc --- /dev/null +++ b/src/main/java/org/jabref/gui/fieldeditors/DateEditorViewModel.java @@ -0,0 +1,41 @@ +package org.jabref.gui.fieldeditors; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +import javafx.util.StringConverter; + +import org.jabref.model.entry.Date; +import org.jabref.model.strings.StringUtil; + +public class DateEditorViewModel extends AbstractEditorViewModel { + private final DateTimeFormatter dateFormatter; + + public DateEditorViewModel(DateTimeFormatter dateFormatter) { + this.dateFormatter = dateFormatter; + } + + public StringConverter getDateToStringConverter() { + return new StringConverter() { + + @Override + public String toString(LocalDate date) { + if (date != null) { + return dateFormatter.format(date); + } else { + return ""; + } + } + + @Override + public LocalDate fromString(String string) { + if (StringUtil.isNotBlank(string)) { + // We accept all kinds of dates (not just in the format specified) + return Date.parse(string).map(Date::toLocalDate).orElse(null); + } else { + return null; + } + } + }; + } +} diff --git a/src/main/java/org/jabref/gui/fieldeditors/EditorTextArea.java b/src/main/java/org/jabref/gui/fieldeditors/EditorTextArea.java index a61d6cc9bb5..7e986c44b23 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/EditorTextArea.java +++ b/src/main/java/org/jabref/gui/fieldeditors/EditorTextArea.java @@ -7,13 +7,9 @@ import javafx.scene.text.Font; import org.jabref.gui.GUIGlobals; -import org.jabref.gui.util.BindingsHelper; -import org.jabref.model.entry.BibEntry; public class EditorTextArea extends javafx.scene.control.TextArea implements Initializable { - private String fieldName; - public EditorTextArea() { this(""); } @@ -48,16 +44,4 @@ private String convertToHex(java.awt.Color color) { public void initialize(URL location, ResourceBundle resources) { } - - public void bindToEntry(String fieldName, BibEntry entry) { - this.fieldName = fieldName; - BindingsHelper.bindBidirectional( - this.textProperty(), - entry.getFieldBinding(fieldName), - newValue -> { - if (newValue != null) { - entry.setField(fieldName, newValue); - } - }); - } } diff --git a/src/main/java/org/jabref/gui/fieldeditors/FieldEditors.java b/src/main/java/org/jabref/gui/fieldeditors/FieldEditors.java index b135adad800..9d1628713ca 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/FieldEditors.java +++ b/src/main/java/org/jabref/gui/fieldeditors/FieldEditors.java @@ -1,5 +1,6 @@ package org.jabref.gui.fieldeditors; +import java.time.format.DateTimeFormatter; import java.util.Set; import org.jabref.Globals; @@ -16,12 +17,13 @@ public class FieldEditors { public static FieldEditorFX getForField(String fieldName, TaskExecutor taskExecutor, DialogService dialogService, JournalAbbreviationLoader journalAbbreviationLoader, JournalAbbreviationPreferences journalAbbreviationPreferences, JabRefPreferences preferences) { final Set fieldExtras = InternalBibtexFields.getFieldProperties(fieldName); - // TODO: Implement this + // TODO: Implement all of them if (Globals.prefs.get(JabRefPreferences.TIME_STAMP_FIELD).equals(fieldName) || fieldExtras.contains(FieldProperty.DATE)) { - // timestamp or a other field with datepicker command - // double click AND datefield => insert the current date (today) - //return FieldExtraComponents.getDateTimeExtraComponent(editor, - // fieldExtras.contains(FieldProperty.DATE), fieldExtras.contains(FieldProperty.ISO_DATE)); + if (fieldExtras.contains(FieldProperty.ISO_DATE)) { + return new DateEditor(fieldName, DateTimeFormatter.ISO_DATE); + } else { + return new DateEditor(fieldName, DateTimeFormatter.ofPattern(Globals.prefs.get(JabRefPreferences.TIME_STAMP_FORMAT))); + } } else if (fieldExtras.contains(FieldProperty.EXTERNAL)) { return new UrlEditor(fieldName, dialogService); } else if (fieldExtras.contains(FieldProperty.JOURNAL_NAME)) { diff --git a/src/main/java/org/jabref/gui/fieldeditors/IdentifierEditor.java b/src/main/java/org/jabref/gui/fieldeditors/IdentifierEditor.java index 9c4b0bfcc11..12aaaff9bde 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/IdentifierEditor.java +++ b/src/main/java/org/jabref/gui/fieldeditors/IdentifierEditor.java @@ -31,7 +31,7 @@ public IdentifierEditor(String fieldName, TaskExecutor taskExecutor, DialogServi ControlHelper.loadFXMLForControl(this); - viewModel.textProperty().bind(textArea.textProperty()); + textArea.textProperty().bindBidirectional(viewModel.textProperty()); fetchInformationByIdentifierButton.setTooltip( new Tooltip(Localization.lang("Get BibTeX data from %0", FieldName.getDisplayName(fieldName)))); @@ -46,7 +46,7 @@ public IdentifierEditorViewModel getViewModel() { @Override public void bindToEntry(BibEntry entry) { this.entry = Optional.of(entry); - textArea.bindToEntry(fieldName, entry); + viewModel.bindToEntry(fieldName, entry); } @Override diff --git a/src/main/java/org/jabref/gui/fieldeditors/IdentifierEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/IdentifierEditorViewModel.java index 188f99e31e3..3c3fefe9aa8 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/IdentifierEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/IdentifierEditorViewModel.java @@ -7,10 +7,7 @@ import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleObjectProperty; -import javafx.beans.property.SimpleStringProperty; -import javafx.beans.property.StringProperty; -import org.jabref.gui.AbstractViewModel; import org.jabref.gui.DialogService; import org.jabref.gui.desktop.JabRefDesktop; import org.jabref.gui.mergeentries.FetchAndMergeEntry; @@ -25,13 +22,12 @@ import org.fxmisc.easybind.EasyBind; -public class IdentifierEditorViewModel extends AbstractViewModel { +public class IdentifierEditorViewModel extends AbstractEditorViewModel { private final String fieldName; private BooleanProperty validIdentifierIsNotPresent = new SimpleBooleanProperty(true); private BooleanProperty identifierLookupInProgress = new SimpleBooleanProperty(false); private BooleanProperty idFetcherAvailable = new SimpleBooleanProperty(true); private ObjectProperty> identifier = new SimpleObjectProperty<>(); - private StringProperty text = new SimpleStringProperty(); private TaskExecutor taskExecutor; private DialogService dialogService; @@ -59,14 +55,6 @@ public BooleanProperty idFetcherAvailableProperty() { return idFetcherAvailable; } - public String getText() { - return text.get(); - } - - public StringProperty textProperty() { - return text; - } - public boolean getValidIdentifierIsNotPresent() { return validIdentifierIsNotPresent.get(); } diff --git a/src/main/java/org/jabref/gui/fieldeditors/JournalEditor.java b/src/main/java/org/jabref/gui/fieldeditors/JournalEditor.java index 2b38047817f..a2e8eb2095a 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/JournalEditor.java +++ b/src/main/java/org/jabref/gui/fieldeditors/JournalEditor.java @@ -25,7 +25,7 @@ public JournalEditor(String fieldName, JournalAbbreviationLoader journalAbbrevia ControlHelper.loadFXMLForControl(this); - viewModel.textProperty().bindBidirectional(textArea.textProperty()); + textArea.textProperty().bindBidirectional(viewModel.textProperty()); } public JournalEditorViewModel getViewModel() { @@ -35,7 +35,7 @@ public JournalEditorViewModel getViewModel() { @Override public void bindToEntry(BibEntry entry) { this.entry = Optional.of(entry); - textArea.bindToEntry(fieldName, entry); + viewModel.bindToEntry(fieldName, entry); } @Override diff --git a/src/main/java/org/jabref/gui/fieldeditors/JournalEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/JournalEditorViewModel.java index ecd05e5f7e1..18cff62a6f5 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/JournalEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/JournalEditorViewModel.java @@ -2,29 +2,20 @@ import java.util.Optional; -import javafx.beans.property.SimpleStringProperty; -import javafx.beans.property.StringProperty; - -import org.jabref.gui.AbstractViewModel; import org.jabref.logic.journals.JournalAbbreviationLoader; import org.jabref.logic.journals.JournalAbbreviationPreferences; import org.jabref.logic.journals.JournalAbbreviationRepository; import org.jabref.model.strings.StringUtil; -public class JournalEditorViewModel extends AbstractViewModel { +public class JournalEditorViewModel extends AbstractEditorViewModel { private final JournalAbbreviationLoader journalAbbreviationLoader; private final JournalAbbreviationPreferences journalAbbreviationPreferences; - private StringProperty text = new SimpleStringProperty(); public JournalEditorViewModel(JournalAbbreviationLoader journalAbbreviationLoader, JournalAbbreviationPreferences journalAbbreviationPreferences) { this.journalAbbreviationLoader = journalAbbreviationLoader; this.journalAbbreviationPreferences = journalAbbreviationPreferences; } - public StringProperty textProperty() { - return text; - } - public void toggleAbbreviation() { if (StringUtil.isBlank(text.get())) { return; diff --git a/src/main/java/org/jabref/gui/fieldeditors/OwnerEditor.java b/src/main/java/org/jabref/gui/fieldeditors/OwnerEditor.java index 75c94ec9e94..a89355c07f3 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/OwnerEditor.java +++ b/src/main/java/org/jabref/gui/fieldeditors/OwnerEditor.java @@ -24,7 +24,7 @@ public OwnerEditor(String fieldName, JabRefPreferences preferences) { ControlHelper.loadFXMLForControl(this); - viewModel.textProperty().bindBidirectional(textArea.textProperty()); + textArea.textProperty().bindBidirectional(viewModel.textProperty()); } public OwnerEditorViewModel getViewModel() { @@ -34,7 +34,7 @@ public OwnerEditorViewModel getViewModel() { @Override public void bindToEntry(BibEntry entry) { this.entry = Optional.of(entry); - textArea.bindToEntry(fieldName, entry); + viewModel.bindToEntry(fieldName, entry); } @Override diff --git a/src/main/java/org/jabref/gui/fieldeditors/OwnerEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/OwnerEditorViewModel.java index 6f220f34cc8..321e3e0011f 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/OwnerEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/OwnerEditorViewModel.java @@ -1,23 +1,14 @@ package org.jabref.gui.fieldeditors; -import javafx.beans.property.SimpleStringProperty; -import javafx.beans.property.StringProperty; - -import org.jabref.gui.AbstractViewModel; import org.jabref.preferences.JabRefPreferences; -public class OwnerEditorViewModel extends AbstractViewModel { +public class OwnerEditorViewModel extends AbstractEditorViewModel { private final JabRefPreferences preferences; - private StringProperty text = new SimpleStringProperty(""); public OwnerEditorViewModel(JabRefPreferences preferences) { this.preferences = preferences; } - public StringProperty textProperty() { - return text; - } - public void setOwner() { text.set(preferences.get(JabRefPreferences.DEFAULT_OWNER)); } diff --git a/src/main/java/org/jabref/gui/fieldeditors/SimpleEditor.java b/src/main/java/org/jabref/gui/fieldeditors/SimpleEditor.java index 2f789145fad..9832880b92e 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/SimpleEditor.java +++ b/src/main/java/org/jabref/gui/fieldeditors/SimpleEditor.java @@ -10,16 +10,21 @@ public class SimpleEditor extends HBox implements FieldEditorFX { protected final String fieldName; + @FXML private final SimpleEditorViewModel viewModel; @FXML private EditorTextArea textArea; public SimpleEditor(String fieldName) { this.fieldName = fieldName; + this.viewModel = new SimpleEditorViewModel(); + ControlHelper.loadFXMLForControl(this); + + textArea.textProperty().bindBidirectional(viewModel.textProperty()); } @Override public void bindToEntry(BibEntry entry) { - textArea.bindToEntry(fieldName, entry); + viewModel.bindToEntry(fieldName, entry); } @Override diff --git a/src/main/java/org/jabref/gui/fieldeditors/SimpleEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/SimpleEditorViewModel.java new file mode 100644 index 00000000000..2892b5ac730 --- /dev/null +++ b/src/main/java/org/jabref/gui/fieldeditors/SimpleEditorViewModel.java @@ -0,0 +1,4 @@ +package org.jabref.gui.fieldeditors; + +public class SimpleEditorViewModel extends AbstractEditorViewModel { +} diff --git a/src/main/java/org/jabref/gui/fieldeditors/UrlEditor.java b/src/main/java/org/jabref/gui/fieldeditors/UrlEditor.java index 04eb4576fa3..9b75b39d9f5 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/UrlEditor.java +++ b/src/main/java/org/jabref/gui/fieldeditors/UrlEditor.java @@ -24,7 +24,7 @@ public UrlEditor(String fieldName, DialogService dialogService) { ControlHelper.loadFXMLForControl(this); - viewModel.textProperty().bindBidirectional(textArea.textProperty()); + textArea.textProperty().bindBidirectional(viewModel.textProperty()); } public UrlEditorViewModel getViewModel() { @@ -34,7 +34,7 @@ public UrlEditorViewModel getViewModel() { @Override public void bindToEntry(BibEntry entry) { this.entry = Optional.of(entry); - textArea.bindToEntry(fieldName, entry); + viewModel.bindToEntry(fieldName, entry); } @Override diff --git a/src/main/java/org/jabref/gui/fieldeditors/UrlEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/UrlEditorViewModel.java index dfeb7cb6867..61394dbe8c0 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/UrlEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/UrlEditorViewModel.java @@ -4,10 +4,7 @@ import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; -import javafx.beans.property.SimpleStringProperty; -import javafx.beans.property.StringProperty; -import org.jabref.gui.AbstractViewModel; import org.jabref.gui.DialogService; import org.jabref.gui.desktop.JabRefDesktop; import org.jabref.logic.l10n.Localization; @@ -16,8 +13,7 @@ import org.fxmisc.easybind.EasyBind; -public class UrlEditorViewModel extends AbstractViewModel { - private StringProperty text = new SimpleStringProperty(""); +public class UrlEditorViewModel extends AbstractEditorViewModel { private DialogService dialogService; private BooleanProperty validUrlIsNotPresent = new SimpleBooleanProperty(true); @@ -37,10 +33,6 @@ public BooleanProperty validUrlIsNotPresentProperty() { return validUrlIsNotPresent; } - public StringProperty textProperty() { - return text; - } - public void openExternalLink() { if (StringUtil.isBlank(text.get())) { return; diff --git a/src/main/java/org/jabref/model/entry/Date.java b/src/main/java/org/jabref/model/entry/Date.java index cd153b711ee..40823cf766f 100644 --- a/src/main/java/org/jabref/model/entry/Date.java +++ b/src/main/java/org/jabref/model/entry/Date.java @@ -101,6 +101,10 @@ public Optional getDay() { return get(ChronoField.DAY_OF_MONTH); } + public LocalDate toLocalDate() { + return LocalDate.from(date); + } + @Override public boolean equals(Object o) { if (this == o) return true;