@@ -156,17 +156,30 @@ void addComponents() {
156156 setLayout (new LayeredLayout ());
157157 addComponent (hour );
158158
159- addComponent (minute );
160159 LayeredLayout ll = (LayeredLayout ) getLayout ();
161- if (showMeridiem ) {
162- //content.addComponent(createSeparator());
163- addComponent (amPM );
164- ll .setInsets (hour , "0 67% 0 0" )
165- .setInsets (minute , "0 33% 0 33%" )
166- .setInsets (amPM , "0 0 0 67%" );
160+ if (durationMode ) {
161+ Label hoursLabel = new Label (getUIManager ().localize ("hours" , "hours" ), "TimeSpinnerHoursLabel" );
162+ Label minutesLabel = new Label (getUIManager ().localize ("minutes" , "minutes" ), "TimeSpinnerMinutesLabel" );
163+ addComponent (hoursLabel );
164+ addComponent (minute );
165+ addComponent (minutesLabel );
166+
167+ ll .setInsets (hour , "0 75% 0 0" );
168+ ll .setInsets (hoursLabel , "0 50% 0 25%" );
169+ ll .setInsets (minute , "0 25% 0 50%" );
170+ ll .setInsets (minutesLabel , "0 0 0 75%" );
167171 } else {
168- ll .setInsets (hour , "0 50% 0 0" )
169- .setInsets (minute , "0 0 0 50%" );
172+ addComponent (minute );
173+ if (showMeridiem ) {
174+ //content.addComponent(createSeparator());
175+ addComponent (amPM );
176+ ll .setInsets (hour , "0 67% 0 0" )
177+ .setInsets (minute , "0 33% 0 33%" )
178+ .setInsets (amPM , "0 0 0 67%" );
179+ } else {
180+ ll .setInsets (hour , "0 50% 0 0" )
181+ .setInsets (minute , "0 0 0 50%" );
182+ }
170183 }
171184
172185
@@ -352,7 +365,10 @@ public void setShowMeridiem(boolean showMeridiem) {
352365 }
353366
354367 private void rebuildHours () {
355- if (showMeridiem ) {
368+ if (durationMode ) {
369+ startHour = 0 ;
370+ endHour = 24 ;
371+ } else if (showMeridiem ) {
356372 startHour = 1 ;
357373 endHour = 12 ;
358374 } else {
@@ -449,6 +465,27 @@ public void setCurrentMeridiem(boolean currentMeridiem) {
449465 }
450466 }
451467
468+ /**
469+ * Duration mode uses the time spinner to indicate a duration in hours and minutes
470+ *
471+ * @return the durationMode
472+ */
473+ public boolean isDurationMode () {
474+ return durationMode ;
475+ }
476+
477+ /**
478+ * Duration mode uses the time spinner to indicate a duration in hours and minutes
479+ *
480+ * @param durationMode the durationMode to set
481+ */
482+ public void setDurationMode (boolean durationMode ) {
483+ this .durationMode = durationMode ;
484+ if (durationMode ) {
485+ showMeridiem = false ;
486+ }
487+ rebuildHours ();
488+ }
452489
453490 /**
454491 * Show or hide the hours spinner.
0 commit comments