[jaxx] branch develop updated (4f63135 -> f604490)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository jaxx. See http://git.nuiton.org/jaxx.git from 4f63135 refs-70 #3501: Introduce a new jaxx-widgets-datetime module use nuiton-utils API new f604490 refs-40 #3501: Introduce a new jaxx-widgets-datetime module (date-time editor is ok) The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: 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) Summary of changes: .../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(-) create mode 100644 jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/datetime/DateTimeEditorDemoModel.java -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
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>.
participants (1)
-
nuiton.org scm