diff --git a/build.gradle b/build.gradle index c9750f6dd733..bda11fe14aa8 100644 --- a/build.gradle +++ b/build.gradle @@ -130,6 +130,8 @@ dependencies { compile 'org.citationstyles:styles:1.0.1-SNAPSHOT' compile 'org.citationstyles:locales:1.0.1-SNAPSHOT' compile 'de.undercouch:citeproc-java:1.0.1' + + compile 'com.github.lgooddatepicker:LGoodDatePicker:8.2.2' testCompile 'junit:junit:4.12' testCompile 'org.mockito:mockito-core:2.2.26' diff --git a/external-libraries.txt b/external-libraries.txt index 689684feee26..4d969fa02dac 100644 --- a/external-libraries.txt +++ b/external-libraries.txt @@ -145,11 +145,10 @@ Project: SwingX URL: https://swingx.java.net/ License: LGPL-3.0 -Id: microba -Path: lib/microba.jar -Project: Microba -URL: https://github.com/tdbear/microba -License: BSD +Id: com.github.lgooddatepicker:LGoodDatePicker +Project: LGoodDatePicker +URL: https://github.com/LGoodDatePicker/LGoodDatePicker +License: MIT Id: spin Path: lib/spin.jar diff --git a/lib/microba.jar b/lib/microba.jar deleted file mode 100644 index 8367e76214a1..000000000000 Binary files a/lib/microba.jar and /dev/null differ diff --git a/src/main/java/net/sf/jabref/gui/IconTheme.java b/src/main/java/net/sf/jabref/gui/IconTheme.java index 2177138bccad..f43f8f9bd3e0 100644 --- a/src/main/java/net/sf/jabref/gui/IconTheme.java +++ b/src/main/java/net/sf/jabref/gui/IconTheme.java @@ -158,6 +158,7 @@ public enum JabRefIcon { FACEBOOK("\uf20c"), /* css: facebook */ BLOG("\uf46b"), /* css: rss */ GLOBAL_SEARCH("\uF1E7"), /* css: earth */ + DATE_PICKER("\uF0ED;"), /* css: calendar */ // STILL MISSING: GROUP_REGULAR("\uF4E6", Color.RED); diff --git a/src/main/java/net/sf/jabref/gui/date/DatePickerButton.java b/src/main/java/net/sf/jabref/gui/date/DatePickerButton.java index a11d7710d33e..6b4a3b997faa 100644 --- a/src/main/java/net/sf/jabref/gui/date/DatePickerButton.java +++ b/src/main/java/net/sf/jabref/gui/date/DatePickerButton.java @@ -1,26 +1,30 @@ package net.sf.jabref.gui.date; import java.awt.BorderLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.Date; +import java.time.LocalDate; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; import javax.swing.JComponent; import javax.swing.JPanel; import net.sf.jabref.Globals; +import net.sf.jabref.gui.IconTheme; import net.sf.jabref.gui.fieldeditors.FieldEditor; import net.sf.jabref.logic.util.date.EasyDateFormat; import net.sf.jabref.preferences.JabRefPreferences; -import com.michaelbaranov.microba.calendar.DatePicker; +import com.github.lgooddatepicker.components.DatePicker; +import com.github.lgooddatepicker.components.DatePickerSettings; +import com.github.lgooddatepicker.optionalusertools.DateChangeListener; +import com.github.lgooddatepicker.zinternaltools.DateChangeEvent; /** * wrapper and service class for the DatePicker handling at the EntryEditor */ -public class DatePickerButton implements ActionListener { +public class DatePickerButton implements DateChangeListener { - private final DatePicker datePicker = new DatePicker(); + private final DatePicker datePicker; private final JPanel panel = new JPanel(); private final FieldEditor editor; private final boolean isoFormat; @@ -28,24 +32,29 @@ public class DatePickerButton implements ActionListener { public DatePickerButton(FieldEditor pEditor, Boolean isoFormat) { this.isoFormat = isoFormat; - datePicker.showButtonOnly(true); - datePicker.addActionListener(this); - datePicker.setShowTodayButton(true); + // 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 actionPerformed(ActionEvent e) { - Date date = datePicker.getDate(); + public void dateChanged(DateChangeEvent dateChangeEvent) { + LocalDate date = datePicker.getDate(); if (date != null) { if (isoFormat) { - editor.setText(EasyDateFormat.isoDateFormat().getDateAt(date)); + editor.setText(date.format(DateTimeFormatter.ISO_DATE)); } else { - editor.setText(EasyDateFormat - .fromTimeStampFormat(Globals.prefs.get(JabRefPreferences.TIME_STAMP_FORMAT)) - .getDateAt(date)); + EasyDateFormat.fromTimeStampFormat(Globals.prefs.get(JabRefPreferences.TIME_STAMP_FORMAT)).getDateAt(ZonedDateTime.from(date)); } } else { // in this case the user selected "none" in the date picker, so we just clear the field diff --git a/src/main/java/net/sf/jabref/logic/util/date/EasyDateFormat.java b/src/main/java/net/sf/jabref/logic/util/date/EasyDateFormat.java index 3eb5a03dd608..25885be93f6e 100644 --- a/src/main/java/net/sf/jabref/logic/util/date/EasyDateFormat.java +++ b/src/main/java/net/sf/jabref/logic/util/date/EasyDateFormat.java @@ -1,9 +1,7 @@ package net.sf.jabref.logic.util.date; -import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; -import java.util.Date; public class EasyDateFormat { @@ -32,16 +30,6 @@ public String getCurrentDate() { return getDateAt(ZonedDateTime.now()); } - /** - * Creates a readable Date string from the parameter date. The format is set - * in preferences under the key "timeStampFormat". - * - * @return The formatted date string. - */ - public String getDateAt(Date date) { - return getDateAt(date.toInstant().atZone(ZoneId.systemDefault())); - } - /** * Creates a readable Date string from the parameter date. The format is set * in preferences under the key "timeStampFormat".