package org.aplikator.client.local.widgets; import java.util.Date; import org.aplikator.client.local.Aplikator; import org.aplikator.client.shared.descriptor.PropertyDTO; import org.gwtbootstrap3.extras.datetimepicker.client.ui.DateTimePicker; import org.gwtbootstrap3.extras.datetimepicker.client.ui.base.constants.DateTimePickerLanguage; import org.gwtbootstrap3.extras.datetimepicker.client.ui.base.constants.DateTimePickerView; import org.gwtbootstrap3.extras.datetimepicker.client.ui.base.events.ChangeDateEvent; import org.gwtbootstrap3.extras.datetimepicker.client.ui.base.events.ChangeDateHandler; import com.google.gwt.core.client.Scheduler; import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwt.event.dom.client.KeyUpHandler; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.event.shared.HandlerRegistration; public class DateFieldWidget extends DataFieldBase implements DataField<Date> { private DateTimePicker box = new DateTimePicker(); public static DateTimePickerLanguage mapLanguageToAplikatorLocale() { String locale = Aplikator.application.getLocale(); if (locale != null && locale.startsWith("cs")) { return DateTimePickerLanguage.CS; } return DateTimePickerLanguage.EN; } public DateFieldWidget(String caption, PropertyDTO property, int size, String formatPattern) { super(caption, property); controlHolder.add(box); if (formatPattern != null) { box.setFormat(formatPattern.replace("M", "m")); box.setLanguage(mapLanguageToAplikatorLocale()); if (!formatPattern.contains("h") && !formatPattern.contains("H")) { //display date picker only box.setMinView(DateTimePickerView.MONTH); } } box.addValueChangeHandler(new ValueChangeHandler<Date>() { public void onValueChange(ValueChangeEvent<Date> event) { //Window.alert("VALUECHANGE"); setDirty(true); } }); box.addChangeDateHandler(new ChangeDateHandler() { @Override public void onChangeDate(ChangeDateEvent evt) { //Window.alert("DATECHANGE"); setDirty(true); ValueChangeEvent.fire(DateFieldWidget.this, null); } }); box.addDomHandler(new KeyUpHandler() { @Override public void onKeyUp(KeyUpEvent event) { ValueChangeEvent.fire(box, null); } }, KeyUpEvent.getType()); //box.setLanguage(DateTimePickerLanguage.CS);//TODO get from applicationDTO box.setAutoClose(true); setGridSize(size); } public void setValue(Date value) { box.setValue(value); } public Date getValue() { return box.getValue(); } public HandlerRegistration addValueChangeHandler(final ValueChangeHandler<Date> handler) { return addHandler(handler, ValueChangeEvent.getType()); //return box.addValueChangeHandler(handler); } public void setEnabled(boolean enabled) { if (property.getRefferedThrough() != null) { enabled = false; } box.setEnabled(enabled); } public void setDirty(boolean dirty) { super.setDirty(dirty); if (dirty) { box.addStyleName("dirty"); } else { box.removeStyleName("dirty"); } } @Override public void grabFocus() { Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() { @Override public void execute() { box.onShow(null); } }); } }