Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make GWT DatePicker to use Monday as the first day of the week?

Pretty much, what the title says. I need to make the GWT DatePicker component use Monday as the first day of the week. Currently the day labels are S M T W T F S, I want it to be M T W T F S S. Any way to accomplish it?

like image 987
Strelok Avatar asked Aug 18 '10 01:08

Strelok


3 Answers

If the automatic locale detection doesn't fit your needs (and probably editing the firstDayOfTheWeek in com.google.gwt.i18n.client.constants.DateTimeConstantsImpl_xy.properties won't be either), the only option would be to modify the implementation of DatePicker:

  • Extend DatePicker, write a new constructor which calls the protected DatePicker(MonthSelector monthSelector, CalendarView view, CalendarModel model) constructor with your own view and model.

  • The CalendarModel can be extended, so you'd have to override getCurrentFirstDayOfFirstWeek.

  • The DefaultCalendarView is final, so you'd have to copy it to a new class and modify its setup method.

It's quite messy, and that's the little downside of GWT - it makes heavy use of Singletons instead of Dependency Injection...

like image 148
Chris Lercher Avatar answered Apr 30 '23 15:04

Chris Lercher


Don't need to subclass the DatePicker. Please read the google gwt documentation by clicking below url. http://code.google.com/webtoolkit/doc/latest/DevGuideI18nLocale.html#LocaleSpecifying

like image 24
macmurali Avatar answered Apr 30 '23 14:04

macmurali


If you look at the source code of DefaultCalendarView (which can be provided in the protected constructor of a DatePicker) it uses CalendarUtil's getStartingDayOfWeek to set the default starting day. CalendarUtil gets the start date from DateTimeConstants. So, as ju said, it's determined by your locale.

The question is, how do you override the default locale value. To be honest, I don't know how to do this or if it's even possible. That would obviously be the easiest solution.

However, if that's not possible, what you can do is create a class that extends DatePicker. Then create another class that extends DefaultCalendarView and overrides the setup method. Copy over the same method source but change the start date to Monday instead of using the start date from CalendarUtil. Then create your custom DatePicker using your custom DefaultCalendarView. It's a hack, but it should work.

like image 43
Arthur Maltson Avatar answered Apr 30 '23 16:04

Arthur Maltson