fr.putnami.pwt.core.widget.client.InputDate.java Source code

Java tutorial

Introduction

Here is the source code for fr.putnami.pwt.core.widget.client.InputDate.java

Source

/**
 * This file is part of pwt.
 *
 * pwt 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 3 of the
 * License, or (at your option) any later version.
 *
 * pwt 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 GNU Lesser
 * General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License along with pwt. If not,
 * see <http://www.gnu.org/licenses/>.
 */
package fr.putnami.pwt.core.widget.client;

import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.event.dom.client.HasAllFocusHandlers;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.ui.Focusable;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.web.bindery.event.shared.HandlerRegistration;

import java.util.Date;

import fr.putnami.pwt.core.editor.client.event.DirtyEvent;
import fr.putnami.pwt.core.editor.client.event.DirtyEvent.Handler;
import fr.putnami.pwt.core.model.client.base.HasPlaceholder;
import fr.putnami.pwt.core.theme.client.IconFont;
import fr.putnami.pwt.core.widget.client.Button.Type;
import fr.putnami.pwt.core.widget.client.event.ButtonEvent;
import fr.putnami.pwt.core.widget.client.helper.CompositeFocusHelper;

public class InputDate extends InputGroup<Date>
        implements DirtyEvent.HasDirtyHandlers, HasAllFocusHandlers, Focusable, HasPlaceholder {

    private final InputDateBox dateBox = new InputDateBox();
    private final Button<Date> calendarButton = new Button<Date>();
    private final Button<Date> resetButton = new Button<Date>();

    private InputDatePicker datePicker;

    private CompositeFocusHelper compositeFocusHelper;

    private Date value;

    public InputDate() {
        this.endConstruct();
    }

    protected InputDate(InputDate source) {
        super(source, false);
        this.endConstruct();
        this.setFormat(source.getFormat());
        this.setPlaceholder(source.getPlaceholder());
    }

    protected void endConstruct() {
        this.calendarButton.setType(Type.ICON);
        this.calendarButton.setIconType(IconFont.ICON_CALENDAR);
        this.calendarButton.addButtonHandler(new ButtonEvent.Handler() {
            @Override
            public void onButtonAction(ButtonEvent event) {
                InputDate.this.toggleDatePicker();
            }

        });
        this.resetButton.setType(Type.ICON);
        this.resetButton.setIconType(IconFont.ICON_CANCEL);
        this.resetButton.addButtonHandler(new ButtonEvent.Handler() {
            @Override
            public void onButtonAction(ButtonEvent event) {
                InputDate.this.edit(InputDate.this.getValue());
            }
        });

        this.append(this.dateBox);
        this.addAddon(this.resetButton);
        this.addAddon(this.calendarButton);
        this.compositeFocusHelper = CompositeFocusHelper.createFocusHelper(this, this.dateBox);
    }

    @Override
    public IsWidget cloneWidget() {
        return new InputDate(this);
    }

    public String getFormat() {
        return this.dateBox.getFormat();
    }

    public void setFormat(String format) {
        this.dateBox.setFormat(format);
    }

    @Override
    public boolean isDirty() {
        return this.dateBox.isDirty();
    }

    @Override
    public Date flush() {
        this.value = this.dateBox.flush();
        return this.value;
    }

    @Override
    public void edit(Date value) {
        edit(value, false);
    }

    public void edit(Date value, boolean fireEvents) {
        this.value = value;
        this.dateBox.edit(value, fireEvents);
        if (this.datePicker != null) {
            this.datePicker.hide();
        }
    }

    @Override
    public HandlerRegistration addDirtyHandler(Handler handler) {
        return this.dateBox.addDirtyHandler(handler);
    }

    @Override
    public String getPlaceholder() {
        return this.dateBox.getPlaceholder();
    }

    @Override
    public void setPlaceholder(String placeholder) {
        this.dateBox.setPlaceholder(placeholder);
    }

    @Override
    public Date getValue() {
        return this.value;
    }

    private void toggleDatePicker() {
        if (this.datePicker == null) {
            this.datePicker = new InputDatePicker();
            this.datePicker.addValueChangeHandler(new ValueChangeHandler<Date>() {

                @Override
                public void onValueChange(ValueChangeEvent<Date> event) {
                    InputDate.this.edit(event.getValue(), true);
                    InputDate.this.dateBox.setFocus(true);
                }
            });
            this.compositeFocusHelper.addFocusPartner(this.datePicker.getElement());
        }
        this.datePicker.togglePopup(this, this.calendarButton);
        try {
            this.datePicker.setValue(this.flush());
        } catch (IllegalArgumentException e) {
            this.datePicker.setValue(new Date());
        }
    }

    @Override
    public com.google.gwt.event.shared.HandlerRegistration addFocusHandler(FocusHandler handler) {
        return this.compositeFocusHelper.addFocusHandler(handler);
    }

    @Override
    public com.google.gwt.event.shared.HandlerRegistration addBlurHandler(BlurHandler handler) {
        return this.compositeFocusHelper.addBlurHandler(handler);
    }

    @Override
    public int getTabIndex() {
        return this.dateBox.getTabIndex();
    }

    @Override
    public void setAccessKey(char key) {
        this.dateBox.setAccessKey(key);
    }

    @Override
    public void setFocus(boolean focused) {
        this.dateBox.setFocus(focused);
    }

    @Override
    public void setTabIndex(int index) {
        this.dateBox.setTabIndex(index);
    }

}