This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository jaxx. See http://git.nuiton.org/jaxx.git commit f604490760771d13c34f3a8f431b6e11d67e94a3 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Sep 10 09:38:50 2014 +0200 refs-40 #3501: Introduce a new jaxx-widgets-datetime module (date-time editor is ok) --- .../jaxx/editor/datetime/DateTimeEditorDemo.css | 27 +- .../jaxx/editor/datetime/DateTimeEditorDemo.jaxx | 17 +- .../editor/datetime/DateTimeEditorDemoHandler.java | 35 +-- .../editor/datetime/DateTimeEditorDemoModel.java | 52 ++++ .../main/resources/i18n/jaxx-demo_en_GB.properties | 10 +- .../main/resources/i18n/jaxx-demo_es_ES.properties | 1 + .../main/resources/i18n/jaxx-demo_fr_FR.properties | 10 +- .../jaxx/widgets/datetime/DateTimeEditor.css | 42 +-- .../jaxx/widgets/datetime/DateTimeEditor.jaxx | 17 +- .../widgets/datetime/DateTimeEditorHandler.java | 313 ++++++++++++++++++++- .../jaxx/widgets/datetime/DateTimeEditorModel.java | 13 + 11 files changed, 458 insertions(+), 79 deletions(-) diff --git a/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/datetime/DateTimeEditorDemo.css b/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/datetime/DateTimeEditorDemo.css index 1e2dfa7..ff2f516 100644 --- a/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/datetime/DateTimeEditorDemo.css +++ b/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/datetime/DateTimeEditorDemo.css @@ -26,26 +26,29 @@ border: {new TitledBorder(t("jaxxdemo.datetimeeditor.result"))}; } -#resultDate{ - text: {handler.getDate(model.getDate())}; +#resultDateLabel{ + text: "jaxxdemo.datetimeeditor.result.date"; } -#resultDayDate{ - text: {handler.getDayDate(model.getDayDate())}; +#resultDate{ + editable:false; + text: {handler.getDate(model.getDate())}; } -#resultTimeDate{ - text: {handler.getTimeDate(model.getTimeDate())}; +#resultDayDateLabel{ + text: "jaxxdemo.datetimeeditor.result.dayDate"; } -#resultTimeInMinutes{ - text: {handler.getTimeInMinutes(model.getTimeInMinutes())}; +#resultDayDate{ + editable:false; + text: {handler.getDayDate(model.getDayDate())}; } -#resultHours{ - text: {handler.getHours(model.getTimeInMinutes() / 60)}; +#resultTimeDateLabel{ + text: "jaxxdemo.datetimeeditor.result.timeDate"; } -#resultMinutes{ - text: {handler.getMinutes(model.getTimeInMinutes() % 60)}; +#resultTimeDate{ + editable:false; + text: {handler.getTimeDate(model.getTimeDate())}; } diff --git a/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/datetime/DateTimeEditorDemo.jaxx b/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/datetime/DateTimeEditorDemo.jaxx index 01e23f8..4e5f610 100644 --- a/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/datetime/DateTimeEditorDemo.jaxx +++ b/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/datetime/DateTimeEditorDemo.jaxx @@ -22,11 +22,10 @@ <jaxx.demo.DemoPanel layout='{new BorderLayout()}'> <import> - org.nuiton.jaxx.widgets.datetime.DateTimeEditorModel org.nuiton.jaxx.widgets.datetime.DateTimeEditor </import> - <DateTimeEditorModel id='model' initializer='getContextValue(DateTimeEditorModel.class)'/> + <DateTimeEditorDemoModel id='model' initializer='getContextValue(DateTimeEditorDemoModel.class)'/> <JPanel layout='{new BorderLayout()}' constraints='BorderLayout.NORTH'> @@ -37,13 +36,13 @@ <DateTimeEditor id='editor' constructorParams='this' constraints='BorderLayout.CENTER'/> </JPanel> - <JPanel id='result' layout='{new GridLayout(0,1)}' constraints='BorderLayout.CENTER'> - <JLabel id='resultDate'/> - <JLabel id='resultDayDate'/> - <JLabel id='resultTimeDate'/> - <JLabel id='resultTimeInMinutes'/> - <JLabel id='resultHours'/> - <JLabel id='resultMinutes'/> + <JPanel id='result' layout='{new GridLayout(0,2)}' constraints='BorderLayout.CENTER'> + <JLabel id='resultDateLabel'/> + <JTextField id='resultDate'/> + <JLabel id='resultDayDateLabel'/> + <JTextField id='resultDayDate'/> + <JLabel id='resultTimeDateLabel'/> + <JTextField id='resultTimeDate'/> </JPanel> </jaxx.demo.DemoPanel> diff --git a/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/datetime/DateTimeEditorDemoHandler.java b/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/datetime/DateTimeEditorDemoHandler.java index 024e8e6..2cf2d68 100644 --- a/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/datetime/DateTimeEditorDemoHandler.java +++ b/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/datetime/DateTimeEditorDemoHandler.java @@ -1,14 +1,11 @@ package jaxx.demo.component.jaxx.editor.datetime; import jaxx.runtime.spi.UIHandler; -import org.nuiton.jaxx.widgets.datetime.DateTimeEditorModel; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; -import static org.nuiton.i18n.I18n.t; - /** * Created on 9/9/14. * @@ -17,17 +14,22 @@ import static org.nuiton.i18n.I18n.t; */ public class DateTimeEditorDemoHandler implements UIHandler<DateTimeEditorDemo> { - protected final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm"); + protected final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); protected final DateFormat dayDateFormat = new SimpleDateFormat("yyyy-MM-dd"); - protected final DateFormat timeDateFormat = new SimpleDateFormat("hh:mm"); + protected final DateFormat timeDateFormat = new SimpleDateFormat("HH:mm"); @Override public void beforeInit(DateTimeEditorDemo ui) { - DateTimeEditorModel model = new DateTimeEditorModel(); - model.setDate(new Date()); + DateTimeEditorDemoModel model = new DateTimeEditorDemoModel(); + + Date now = new Date(); + + model.setDate(now); + model.setDayDate(now); + model.setTimeDate(now); ui.setContextValue(model); @@ -42,28 +44,15 @@ public class DateTimeEditorDemoHandler implements UIHandler<DateTimeEditorDemo> } public String getDate(Date date) { - return t("jaxxdemo.datetimeeditor.result.date", dateFormat.format(date)); + return dateFormat.format(date); } public String getDayDate(Date date) { - return t("jaxxdemo.datetimeeditor.result.dayDate", dayDateFormat.format(date)); + return dayDateFormat.format(date); } public String getTimeDate(Date date) { - return t("jaxxdemo.datetimeeditor.result.timeDate", timeDateFormat.format(date)); - } - - public String getTimeInMinutes(Integer timeInMinutes) { - return t("jaxxdemo.datetimeeditor.result.timeInMinutes", timeInMinutes); + return timeDateFormat.format(date); } - public String getHours(Integer hours) { - return t("jaxxdemo.datetimeeditor.result.hours", hours); - } - - public String getMinutes(Integer minutes) { - return t("jaxxdemo.datetimeeditor.result.minutes", minutes); - } - - } \ No newline at end of file diff --git a/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/datetime/DateTimeEditorDemoModel.java b/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/datetime/DateTimeEditorDemoModel.java new file mode 100644 index 0000000..667244e --- /dev/null +++ b/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/datetime/DateTimeEditorDemoModel.java @@ -0,0 +1,52 @@ +package jaxx.demo.component.jaxx.editor.datetime; + +import org.jdesktop.beans.AbstractSerializableBean; + +import java.util.Date; + +/** + * Created on 9/10/14. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 2.12 + */ +public class DateTimeEditorDemoModel extends AbstractSerializableBean { + + private static final long serialVersionUID = 1L; + + protected Date date; + + protected Date dayDate; + + protected Date timeDate; + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + Date oldValue = getDate(); + this.date = date; + firePropertyChange("date", oldValue, date); + } + + public Date getDayDate() { + return dayDate; + } + + public void setDayDate(Date dayDate) { + Date oldValue = getDayDate(); + this.dayDate = dayDate; + firePropertyChange("dayDate", oldValue, dayDate); + } + + public Date getTimeDate() { + return timeDate; + } + + public void setTimeDate(Date timeDate) { + Date oldValue = getTimeDate(); + this.timeDate = timeDate; + firePropertyChange("timeDate", oldValue, timeDate); + } +} diff --git a/jaxx-demo/src/main/resources/i18n/jaxx-demo_en_GB.properties b/jaxx-demo/src/main/resources/i18n/jaxx-demo_en_GB.properties index 61d8bbd..0aabaec 100644 --- a/jaxx-demo/src/main/resources/i18n/jaxx-demo_en_GB.properties +++ b/jaxx-demo/src/main/resources/i18n/jaxx-demo_en_GB.properties @@ -257,12 +257,10 @@ jaxxdemo.datetimeeditor.configuration.label=Label of editor jaxxdemo.datetimeeditor.configuration.label.value=Date - Time jaxxdemo.datetimeeditor.editor=Editor jaxxdemo.datetimeeditor.result=Result -jaxxdemo.datetimeeditor.result.date=<html>Date\: <strong>%s</strong> -jaxxdemo.datetimeeditor.result.dayDate=<html>Day\: <strong>%s</strong> -jaxxdemo.datetimeeditor.result.hours=<html>Hours\: <strong>%s</strong> -jaxxdemo.datetimeeditor.result.minutes=<html>Minutes\: <strong>%s</strong> -jaxxdemo.datetimeeditor.result.timeDate=<html>Time\: <strong>%s</strong> -jaxxdemo.datetimeeditor.result.timeInMinutes=<html>Time in minutes\: <strong>%s</strong> +jaxxdemo.datetimeeditor.result.date=Date\: +jaxxdemo.datetimeeditor.result.dayDate=Day\: +jaxxdemo.datetimeeditor.result.daydate= +jaxxdemo.datetimeeditor.result.timeDate=Time\: jaxxdemo.feature=Features jaxxdemo.feature.databinding=Data Binding jaxxdemo.feature.list.validation=Multiple Bean Validation diff --git a/jaxx-demo/src/main/resources/i18n/jaxx-demo_es_ES.properties b/jaxx-demo/src/main/resources/i18n/jaxx-demo_es_ES.properties index dec069b..91b2560 100644 --- a/jaxx-demo/src/main/resources/i18n/jaxx-demo_es_ES.properties +++ b/jaxx-demo/src/main/resources/i18n/jaxx-demo_es_ES.properties @@ -260,6 +260,7 @@ jaxxdemo.datetimeeditor.label= jaxxdemo.datetimeeditor.result= jaxxdemo.datetimeeditor.result.date= jaxxdemo.datetimeeditor.result.dayDate= +jaxxdemo.datetimeeditor.result.daydate= jaxxdemo.datetimeeditor.result.hour= jaxxdemo.datetimeeditor.result.hours= jaxxdemo.datetimeeditor.result.minutes= diff --git a/jaxx-demo/src/main/resources/i18n/jaxx-demo_fr_FR.properties b/jaxx-demo/src/main/resources/i18n/jaxx-demo_fr_FR.properties index 4ccbf67..f3a2980 100644 --- a/jaxx-demo/src/main/resources/i18n/jaxx-demo_fr_FR.properties +++ b/jaxx-demo/src/main/resources/i18n/jaxx-demo_fr_FR.properties @@ -257,12 +257,10 @@ jaxxdemo.datetimeeditor.configuration.label=Libellé de l'éditeur jaxxdemo.datetimeeditor.configuration.label.value=Date - Heure jaxxdemo.datetimeeditor.editor=Éditeur jaxxdemo.datetimeeditor.result=Résultat -jaxxdemo.datetimeeditor.result.date=<html>Date \: <strong>%s</strong> -jaxxdemo.datetimeeditor.result.dayDate=<html>Jour \: <strong>%s</strong> -jaxxdemo.datetimeeditor.result.hours=<html>Heures \: <strong>%s</strong> -jaxxdemo.datetimeeditor.result.minutes=<html>Minutes \: <strong>%s</strong> -jaxxdemo.datetimeeditor.result.timeDate=<html>Heure \: <strong>%s</strong> -jaxxdemo.datetimeeditor.result.timeInMinutes=<html>Time in minutes \: <strong>%s</strong> +jaxxdemo.datetimeeditor.result.date=Date \: +jaxxdemo.datetimeeditor.result.dayDate=Jour \: +jaxxdemo.datetimeeditor.result.daydate= +jaxxdemo.datetimeeditor.result.timeDate=Heure \: jaxxdemo.feature=Fonctionnalités jaxxdemo.feature.databinding=Data binding jaxxdemo.feature.list.validation=Validation de liste diff --git a/jaxx-widgets-datetime/src/main/java/org/nuiton/jaxx/widgets/datetime/DateTimeEditor.css b/jaxx-widgets-datetime/src/main/java/org/nuiton/jaxx/widgets/datetime/DateTimeEditor.css index 84b5b3e..501c9b9 100644 --- a/jaxx-widgets-datetime/src/main/java/org/nuiton/jaxx/widgets/datetime/DateTimeEditor.css +++ b/jaxx-widgets-datetime/src/main/java/org/nuiton/jaxx/widgets/datetime/DateTimeEditor.css @@ -1,6 +1,6 @@ #title { - horizontalAlignment:center; + horizontalAlignment:center; } #dayDateEditor { @@ -9,30 +9,38 @@ date: {model.getDayDate()}; } +#hourModel { + calendarField:{Calendar.HOUR_OF_DAY}; + value:{handler.getHourModelValue(model.getTimeDate())}; +} + #hourEditor { - value:{model.getTimeInMinutes() / 60}; - enabled:{isEnabled()}; - model:{new SpinnerNumberModel(0, 0, 23, 1)}; + model:{hourModel}; + enabled:{isEnabled()}; } #labelH { - text:"timeeditor.H"; - horizontalAlignment:center; + text:"timeeditor.H"; + horizontalAlignment:center; +} + +#minuteModel { + calendarField:{Calendar.MINUTE}; + value:{handler.getMinuteModelValue(model.getTimeDate())}; } #minuteEditor { - enabled:{isEnabled()}; - value:{model.getTimeInMinutes() % 60}; - model:{new SpinnerNumberModel(0, 0, 59, 1)}; + model:{minuteModel}; + enabled:{isEnabled()}; } #slider { - font-size: 11; - paintTicks:true; - paintLabels:true; - majorTickSpacing:60; - minorTickSpacing:30; - value:{model.getTimeInMinutes()}; - enabled:{isEnabled()}; - model:{new DefaultBoundedRangeModel(0, 1, 0, 60 * 24)}; + font-size: 11; + paintTicks:true; + paintLabels:true; + majorTickSpacing:60; + minorTickSpacing:30; + value:{model.getTimeInMinutes()}; + enabled:{isEnabled()}; + model:{new DefaultBoundedRangeModel(0, 1, 0, 60 * 24)}; } diff --git a/jaxx-widgets-datetime/src/main/java/org/nuiton/jaxx/widgets/datetime/DateTimeEditor.jaxx b/jaxx-widgets-datetime/src/main/java/org/nuiton/jaxx/widgets/datetime/DateTimeEditor.jaxx index 7604981..2abbd34 100644 --- a/jaxx-widgets-datetime/src/main/java/org/nuiton/jaxx/widgets/datetime/DateTimeEditor.jaxx +++ b/jaxx-widgets-datetime/src/main/java/org/nuiton/jaxx/widgets/datetime/DateTimeEditor.jaxx @@ -2,6 +2,7 @@ <JPanel layout='{new BorderLayout()}'> <import> + java.util.Calendar java.util.Date java.io.Serializable java.awt.BorderLayout @@ -14,22 +15,30 @@ <!-- model --> <DateTimeEditorModel id='model'/> + <!-- spinner hour editor --> + <SpinnerDateModel id="hourModel"/> + + <!-- spinner minute editor --> + <SpinnerDateModel id="minuteModel"/> + <script><![CDATA[ public void init() { handler.init(this); } + public void setBean(Serializable bean) { model.setBean(bean); } public void setPropertyTimeDate(String property) { model.setPropertyTimeDate(property); } public void setPropertyDayDate(String property) { model.setPropertyDayDate(property); } public void setPropertyDate(String property) { model.setPropertyDate(property); } public void setDate(Date date) { model.setDate(date); } + +public void setDateFormat(String dateFormat) { dayDateEditor.setFormats(dateFormat); } public void setLabel(String label) { dateTimeLabel.setText(label); } ]]> </script> - <!-- validator --> <BeanValidator id='validator' autoField='true' bean='model'> + <field name='date' component='dateEditor'/> <field name='dayDate' component='dayDateEditor'/> <field name='timeDate' component='timeDateEditor'/> - <field name='date' component='dateEditor'/> </BeanValidator> <JPanel id='dateEditor' constraints='BorderLayout.NORTH' layout='{new BorderLayout()}'> @@ -37,9 +46,9 @@ public void setLabel(String label) { dateTimeLabel.setText(label); } <JPanel constraints='BorderLayout.EAST'> <JXDatePicker id='dayDateEditor' onActionPerformed='model.setDayDate((Date)((JXDatePicker)event.getSource()).getDate())'/> <JPanel id='timeDateEditor'> - <JSpinner id='hourEditor' onStateChanged='model.setHour((Integer)((JSpinner)event.getSource()).getValue())'/> + <JSpinner id='hourEditor' onStateChanged='handler.setHours((Date)((JSpinner)event.getSource()).getValue())'/> <JLabel id='labelH'/> - <JSpinner id='minuteEditor' onStateChanged='model.setMinute((Integer)((JSpinner)event.getSource()).getValue())'/> + <JSpinner id='minuteEditor' onStateChanged='handler.setMinutes((Date)((JSpinner)event.getSource()).getValue())'/> </JPanel> </JPanel> </JPanel> diff --git a/jaxx-widgets-datetime/src/main/java/org/nuiton/jaxx/widgets/datetime/DateTimeEditorHandler.java b/jaxx-widgets-datetime/src/main/java/org/nuiton/jaxx/widgets/datetime/DateTimeEditorHandler.java index 90d4f9d..dff94e0 100644 --- a/jaxx-widgets-datetime/src/main/java/org/nuiton/jaxx/widgets/datetime/DateTimeEditorHandler.java +++ b/jaxx-widgets-datetime/src/main/java/org/nuiton/jaxx/widgets/datetime/DateTimeEditorHandler.java @@ -2,11 +2,26 @@ package org.nuiton.jaxx.widgets.datetime; import com.google.common.base.Preconditions; import jaxx.runtime.spi.UIHandler; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.nuiton.util.beans.BeanUtil; +import javax.swing.JLabel; +import javax.swing.JSlider; +import javax.swing.JSpinner; +import javax.swing.plaf.basic.BasicSliderUI; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseWheelEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.lang.reflect.Method; +import java.util.Calendar; +import java.util.Date; +import java.util.Dictionary; +import java.util.GregorianCalendar; +import java.util.Hashtable; +import java.util.Map; /** * Created on 9/9/14. @@ -16,7 +31,10 @@ import java.lang.reflect.Method; */ public class DateTimeEditorHandler implements UIHandler<DateTimeEditor> { - DateTimeEditor ui; + /** Logger. */ + private static final Log log = LogFactory.getLog(DateTimeEditorHandler.class); + + protected DateTimeEditor ui; @Override public void beforeInit(DateTimeEditor ui) { @@ -24,13 +42,113 @@ public class DateTimeEditorHandler implements UIHandler<DateTimeEditor> { DateTimeEditorModel model = new DateTimeEditorModel(); ui.setContextValue(model); - this.ui = ui; } @Override public void afterInit(DateTimeEditor ui) { + + ui.getMinuteEditor().setEditor(new JSpinner.DateEditor(ui.getMinuteEditor(), "mm")); + ui.getHourEditor().setEditor(new JSpinner.DateEditor(ui.getHourEditor(), "HH")); + + // create slider labels + Map<Integer, JLabel> labelTable = new Hashtable<Integer, JLabel>(); + for (int i = 0; i < 25; i += 2) { + labelTable.put(i * 60, new JLabel(i + "")); + } + JSlider slider = ui.getSlider(); + slider.setLabelTable((Dictionary<?, ?>) labelTable); + + MouseAdapter m = new MouseAdapter() { + + @Override + public void mouseClicked(MouseEvent e) { + // set the value + int value = getSliderValue(e); + JSlider slider = (JSlider) e.getComponent(); + slider.setValueIsAdjusting(true); + slider.setValue(value); + slider.setValueIsAdjusting(false); + showToolTip(e); + e.consume(); + } + + @Override + public void mouseDragged(MouseEvent e) { + showToolTip(e); + } + + @Override + public void mouseEntered(MouseEvent e) { + showToolTip(e); + } + + @Override + public void mouseMoved(MouseEvent e) { + showToolTip(e); + } + + @Override + public void mouseReleased(MouseEvent e) { + showToolTip(e); + } + + @Override + public void mouseWheelMoved(MouseWheelEvent e) { + JSlider slider = (JSlider) e.getComponent(); + + // compute new value + int nb = e.getWheelRotation(); + int value = slider.getValue() - nb; + + // set the value + slider.setValueIsAdjusting(true); + slider.setValue(value); + slider.setValueIsAdjusting(false); + e.consume(); + } + + int getSliderValue(MouseEvent e) { + JSlider slider = (JSlider) e.getSource(); + int value = -1; + if (slider.getUI() instanceof BasicSliderUI) { + BasicSliderUI ui = (BasicSliderUI) slider.getUI(); + value = slider.getOrientation() == JSlider.HORIZONTAL + ? ui.valueForXPosition(e.getX()) + : ui.valueForYPosition(e.getY()); + } + return value; + } + + void showToolTip(MouseEvent e) { + + int value = getSliderValue(e); + if (value == -1) { + return; + } + int h = value / 60; + int m = value % 60; + + String text = ""; + if (h < 10) { + text = "0"; + } + text += h + " : "; + if (m < 10) { + text += "0"; + } + text += m; + + JSlider source = (JSlider) e.getSource(); + source.setToolTipText(text); + + } + }; + slider.addMouseListener(m); + slider.addMouseMotionListener(m); + slider.addMouseWheelListener(m); + } public void init(DateTimeEditor ui) { @@ -80,6 +198,197 @@ public class DateTimeEditorHandler implements UIHandler<DateTimeEditor> { } + protected final Calendar calendarMinute = new GregorianCalendar(); + + protected final Calendar calendarHour = new GregorianCalendar(); + + public Date getMinuteModelValue(Date incomingDate) { + if (incomingDate == null) { + incomingDate = new Date(); + } + calendarMinute.setTime(incomingDate); + calendarMinute.set(Calendar.HOUR_OF_DAY, 0); + incomingDate = calendarMinute.getTime(); + return incomingDate; + } + + public Date getHourModelValue(Date incomingDate) { + if (incomingDate == null) { + incomingDate = new Date(); + } + calendarHour.setTime(incomingDate); + calendarHour.set(Calendar.MINUTE, 0); + incomingDate = calendarHour.getTime(); + return incomingDate; + } + + public void setHours(Date hourDate) { + + DateTimeEditorModel model = ui.getModel(); + + Date oldTimeDate = model.getTimeDate(); + + if (oldTimeDate == null) { + return; + } + + calendarHour.setTime(hourDate); + int newHour = calendarHour.get(Calendar.HOUR_OF_DAY); + int newMinute = calendarHour.get(Calendar.MINUTE); + + int oldHour = model.getHour(oldTimeDate); + int oldMinute = model.getMinute(oldTimeDate); + + if (oldHour == newHour && oldMinute == newMinute) { + + // do nothing, same data + if (log.isDebugEnabled()) { + log.debug("Do not update time model , stay on same time = " + oldHour + ":" + oldMinute); + } + return; + } + + // by default stay on same hour + int hour = newHour; + + // by default, use the new minute data + int minute = oldMinute; + + if (log.isDebugEnabled()) { + log.debug("hh:mm (old from dateModel) = " + oldHour + ":" + oldMinute); + log.debug("hh:mm (new from hourModel) = " + newHour + ":" + newMinute); + } + + Integer dayAdjust = null; + + if (newHour == 0 && oldHour == 23) { + + // add a day + dayAdjust = +1; + + } else if (newHour == 23 && oldHour == 0) { + + // decrease a day + dayAdjust = -1; + + } + + if (dayAdjust != null) { + + Date oldDayDate = model.getDayDate(); + + calendarHour.setTime(oldDayDate); + calendarHour.add(Calendar.DAY_OF_YEAR, dayAdjust); + + if (log.isDebugEnabled()) { + log.debug("Update day to " + calendarHour.get(Calendar.DAY_OF_YEAR)); + } + + Date newDayDate = calendarHour.getTime(); + model.setDayDate(newDayDate); + + } + + // change time + model.setTimeInMinutes(hour * 60 + minute); + + } + + public void setMinutes(Date minuteDate) { + + DateTimeEditorModel model = ui.getModel(); + + Date oldTimeDate = model.getTimeDate(); + + if (oldTimeDate == null) { + return; + } + + calendarMinute.setTime(minuteDate); + int newHour = calendarMinute.get(Calendar.HOUR_OF_DAY); + int newMinute = calendarMinute.get(Calendar.MINUTE); + + int oldHour = model.getHour(oldTimeDate); + int oldMinute = model.getMinute(oldTimeDate); + + if (oldHour == newHour && oldMinute == newMinute) { + + // do nothing, same data + if (log.isDebugEnabled()) { + log.debug("Do not update time model , stay on same time = " + oldHour + ":" + oldMinute); + } + return; + } + + // by default stay on same hour + int hour = oldHour; + + // by default, use the new minute data + int minute = newMinute; + + if (log.isDebugEnabled()) { + log.debug("hh:mm (old from dateModel) = " + oldHour + ":" + oldMinute); + log.debug("hh:mm (new from minuteModel) = " + newHour + ":" + newMinute); + } + + Integer dayAdjust = null; + + if (newMinute == 0) { + + // minute pass to zero (check if a new hour is required) + if (newHour == 1) { + + if (oldHour == 23) { + + // on next day + dayAdjust = +1; + + } + hour = (oldHour + 1) % 24; + + } + } else if (newMinute == 59) { + + // minute pass to 59 (check if a new hour is required) + + if (newHour == 23) { + + if (oldHour == 0) { + + dayAdjust = -1; + + } + + // decrease hour + hour = (oldHour - 1) % 24; + + } + } + + if (dayAdjust != null) { + + Date oldDayDate = model.getDayDate(); + + calendarHour.setTime(oldDayDate); + calendarHour.add(Calendar.DAY_OF_YEAR, dayAdjust); + + if (log.isDebugEnabled()) { + log.debug("Update day to " + calendarHour.get(Calendar.DAY_OF_YEAR)); + } + + Date newDayDate = calendarHour.getTime(); + model.setDayDate(newDayDate); + + } + + // date has changed + if (log.isDebugEnabled()) { + log.debug("Update time model to hh:mm = " + hour + ":" + minute); + } + + model.setTimeInMinutes(hour * 60 + minute); + } + private class ModelPropertyChangeListener implements PropertyChangeListener { private final DateTimeEditorModel model; diff --git a/jaxx-widgets-datetime/src/main/java/org/nuiton/jaxx/widgets/datetime/DateTimeEditorModel.java b/jaxx-widgets-datetime/src/main/java/org/nuiton/jaxx/widgets/datetime/DateTimeEditorModel.java index 3f7c9b1..619d101 100644 --- a/jaxx-widgets-datetime/src/main/java/org/nuiton/jaxx/widgets/datetime/DateTimeEditorModel.java +++ b/jaxx-widgets-datetime/src/main/java/org/nuiton/jaxx/widgets/datetime/DateTimeEditorModel.java @@ -66,6 +66,8 @@ public class DateTimeEditorModel extends AbstractSerializableBean { protected final Calendar calendar = new GregorianCalendar(); + protected final Calendar calendarMinute = new GregorianCalendar(); + public String getPropertyDayDate() { return propertyDayDate; } @@ -248,6 +250,17 @@ public class DateTimeEditorModel extends AbstractSerializableBean { } + protected Integer getDay(Date date) { + + Integer hour = null; + if (date != null) { + calendar.setTime(date); + hour = calendar.get(Calendar.DAY_OF_MONTH); + } + return hour; + + } + protected Integer getHour(Date date) { Integer hour = null; -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.