/* * Copyright 2008 Jeff Dwyer * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ /* * Simple Date Picker Widget for GWT library of Google, Inc. * * Copyright (c) 2006 Parvinder Thapar * http://psthapar.googlepages.com/ * * This library is free software; you can redistribute * it and/or modify it under the terms of the GNU Lesser * General Public License as published by the Free Software * Foundation; either version 2.1 of the License, or * (at your option) any later version. This library is * distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNULesser General Public License for more details. * You should have received a copy of the GNU Lesser General * PublicLicense along with this library; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ package com.apress.progwt.client.widget.datepicker; import java.util.Date; import com.google.gwt.user.client.ui.ChangeListener; import com.google.gwt.user.client.ui.ChangeListenerCollection; import com.google.gwt.user.client.ui.KeyboardListener; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.Widget; /* * Abstract Base class for a Date Picker object. Extend this class if you wish to create a new kind * of a date picker * * Date Picker extends a Text box and is intended to be used in conjuction with the calendar popup. * It implements KeyBoardListener but the methods do nothing. You can implement its methids in your * sub class if needed. */ public abstract class DatePicker extends TextBox implements KeyboardListener { // Current maintains where the calendar is at any point in time // Use can be traversing back and forth in the calendar. This // field tracks that. private Date currentDate = new Date(); // Keeps the collection of all the change listners private ChangeListenerCollection changeListeners; // Holds the date last selected by the user private Date selectedDate = new Date(); // Holds the default DateFormatter Object private DateFormatter dateFormatter = new DateFormatter(DateFormatter.DATE_FORMAT_MMDDYYYY); /* * Default Constructor */ protected DatePicker() { super(); } /* * show Abstract method to be implemented by all the sub classes. This tells the app how to show * the date picker */ public abstract void show(); /* * hide Abstract method to be implemented by all the sub classes. The tells what to do when the * calendar needs to be hidden */ public abstract void hide(); /* * redrawCalendar Abstract method to define what to do in case the user traverses the month or * year */ public abstract void redrawCalendar(); /* * getCurrentDate Getter method for currentDate * * @return Date */ public Date getCurrentDate() { return currentDate; } /* * setCurrentDate Setter method for currentDate * * You should probably call setSelectedDate() instead of this * * @param Date */ protected void setCurrentDate(Date currentDate) { this.currentDate = currentDate; } /* * getSelectedDate Getter method for selectedDate * * @return Date */ public Date getSelectedDate() { return selectedDate; } /* * setSelectedDate Setter method for selectedDate * * @param Date */ public void setSelectedDate(Date selectedDate) { this.selectedDate = selectedDate; setCurrentDate(selectedDate); String dateStr = dateFormatter.formatDate(selectedDate); setText(dateStr); } /* * getWeekendSelectable Getter method for isWeekendSelectable * * @return boolean */ public abstract boolean isWeekendSelectable(); /* * setWeekendSelectable Setter method for isWeekendSelectable * * @param boolean */ public abstract void setWeekendSelectable(boolean isWeekendSelectable); /* * getWeekendSelectable Getter method for isWeekendSelectable * * @return boolean */ public DateFormatter getDateFormatter() { return this.dateFormatter; } /* * setText * * @param text to be displayed (String) */ public void setText(String text) { super.setText(text); if (changeListeners != null) { changeListeners.fireChange(this); } } /* * setDateFormat Setter method set the format of the display date * * @param boolean */ public void setDateFormat(DateFormat dateFormat) { this.getDateFormatter().setDateFormat(dateFormat); } /* * Methods from KeyboardListener */ /** * Not used at all */ public void onKeyDown(Widget sender, char keyCode, int modifiers) { this.show(); } /** * Not used at all */ public void onKeyPress(Widget sender, char keyCode, int modifiers) { } /** * Not used at all */ public void onKeyUp(Widget sender, char keyCode, int modifiers) { } /* * addChangeListener * * Adds the Change Listener Object to its collection */ public void addChangeListener(ChangeListener listener) { if (null == this.changeListeners) { this.changeListeners = new ChangeListenerCollection(); } this.changeListeners.add(listener); } }