/ftr-gwt-library-date/src/main/java/eu/future/earth/gwt/client/date/picker/MonthNavigator.java

http://ftr-gwt-library.googlecode.com/ · Java · 97 lines · 75 code · 22 blank · 0 comment · 7 complexity · 356f1290b71285bcb1028745e042a3a7 MD5 · raw file

  1. package eu.future.earth.gwt.client.date.picker;
  2. import java.util.Calendar;
  3. import java.util.Date;
  4. import java.util.GregorianCalendar;
  5. import com.google.gwt.event.dom.client.ClickEvent;
  6. import com.google.gwt.event.dom.client.ClickHandler;
  7. import com.google.gwt.event.shared.HandlerRegistration;
  8. import com.google.gwt.i18n.client.DateTimeFormat;
  9. import com.google.gwt.user.client.ui.Grid;
  10. import com.google.gwt.user.client.ui.HorizontalPanel;
  11. import com.google.gwt.user.client.ui.Image;
  12. import com.google.gwt.user.client.ui.Label;
  13. import eu.future.earth.gwt.client.FtrGwtDatePickerCss;
  14. import eu.future.earth.gwt.client.date.FtrGwtResources;
  15. import eu.future.earth.gwt.client.date.picker.DateSelectEvent.DateSelectEventActions;
  16. public class MonthNavigator extends Grid implements ClickHandler, HasDateSelectHandlers {
  17. private Image prev = new Image(FtrGwtResources.IMAGES.cal_prev());
  18. private Image next = new Image(FtrGwtResources.IMAGES.cal_next());
  19. private Label label = new Label("");
  20. public MonthNavigator(boolean setStyle) {
  21. super(1, 3);
  22. this.setWidget(0, 0, prev);
  23. this.setWidget(0, 1, label);
  24. this.setWidget(0, 2, next);
  25. this.getCellFormatter().setWidth(0, 0, "10%");
  26. this.getCellFormatter().setWidth(0, 1, "80%");
  27. this.getCellFormatter().setWidth(0, 2, "10%");
  28. this.getCellFormatter().setHorizontalAlignment(0, 1, HorizontalPanel.ALIGN_CENTER);
  29. this.getCellFormatter().setHorizontalAlignment(0, 2, HorizontalPanel.ALIGN_RIGHT);
  30. this.setWidth("100%");
  31. this.setHeight("18px");
  32. next.addClickHandler(this);
  33. prev.addClickHandler(this);
  34. label.addClickHandler(this);
  35. prev.setStyleName(FtrGwtDatePickerCss.IMAGE_BUTTON);
  36. next.setStyleName(FtrGwtDatePickerCss.IMAGE_BUTTON);
  37. if (setStyle) {
  38. this.setStyleName(FtrGwtDatePickerCss.MONTH_NAV);
  39. }
  40. super.setStyleName(FtrGwtDatePickerCss.MONTH_SELECT);
  41. label.setText(getDisplayText());
  42. }
  43. private DateTimeFormat formatter = DateTimeFormat.getFormat("yyyy MMMM"); // NOPMD;
  44. public String getDisplayText() {
  45. return formatter.format(current.getTime());
  46. }
  47. private Calendar current = new GregorianCalendar();
  48. public void setSelectedDate(Date newDate) {
  49. current.setTime(newDate);
  50. label.setText(getDisplayText());
  51. }
  52. public HandlerRegistration addDateSelectEventHandler(DateSelectListener handler) {
  53. return addHandler(handler, DateSelectEvent.getType());
  54. }
  55. public void onClick(ClickEvent event) {
  56. if (event.getSource() == prev) {
  57. current.add(Calendar.MONTH, -1);
  58. label.setText(getDisplayText());
  59. DateSelectEvent.fire(this, current.getTime(), DateSelectEventActions.NAVIGATE_MONTH);
  60. }
  61. if (event.getSource() == next) {
  62. current.add(Calendar.MONTH, 1);
  63. label.setText(getDisplayText());
  64. DateSelectEvent.fire(this, current.getTime(), DateSelectEventActions.NAVIGATE_MONTH);
  65. }
  66. if (event.getSource() == label) {
  67. current.setTime(new Date());
  68. label.setText(getDisplayText());
  69. DateSelectEvent.fire(this, current.getTime(), DateSelectEventActions.SELECT_NEW_MONTH);
  70. }
  71. }
  72. public Date getSelected() {
  73. return current.getTime();
  74. }
  75. }