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);
}
});
}
}