/* * Copyright 2011 Google Inc. * * 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. */ package com.google.gwt.sample.mobilewebapp.client.ui; import com.google.gwt.editor.client.IsEditor; import com.google.gwt.editor.client.LeafValueEditor; import com.google.gwt.editor.client.adapters.TakesValueEditor; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HasValue; import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.datepicker.client.DatePicker; import java.util.Date; /** * A button that shows a {@link DatePicker} when clicked. */ public class DateButton extends Composite implements HasValue<Date>, IsEditor<LeafValueEditor<Date>> { private final Button button; private Date date; private final DateTimeFormat dateFormat = DateTimeFormat.getFormat("EE, MMM d, yyyy"); private final DatePicker datePicker; private final PopupPanel datePickerPopup; private LeafValueEditor<Date> editor; public DateButton() { button = new Button(); initWidget(button); // Create the DatePicker popup. datePicker = new DatePicker(); datePickerPopup = new PopupPanel(true, false); datePickerPopup.setWidget(datePicker); datePickerPopup.setGlassEnabled(true); // Show the DatePicker popup on click. button.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { datePicker.setValue(date, false); datePickerPopup.center(); } }); // Push the new value into the button. datePicker.addValueChangeHandler(new ValueChangeHandler<Date>() { public void onValueChange(ValueChangeEvent<Date> event) { setValue(event.getValue(), true); datePickerPopup.hide(); } }); // Set the default date. setValue(null); } public HandlerRegistration addValueChangeHandler(ValueChangeHandler<Date> handler) { return addHandler(handler, ValueChangeEvent.getType()); } public LeafValueEditor<Date> asEditor() { if (editor == null) { editor = TakesValueEditor.of(this); } return editor; } public Date getValue() { return date; } public void setValue(Date value) { setValue(value, false); } public void setValue(Date value, boolean fireEvents) { Date oldValue = getValue(); this.date = value; if (value == null) { button.setText("Set due date"); } else { button.setText(dateFormat.format(date)); } if (fireEvents) { ValueChangeEvent.fireIfNotEqual(this, oldValue, value); } } }