package ilarkesto.gwt.client.editor;
import ilarkesto.gwt.client.AViewEditWidget;
import ilarkesto.gwt.client.Date;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.datepicker.client.DatePicker;
public class DateEditorWidget extends AViewEditWidget {
private ADateEditorModel model;
private Label viewer;
private DatePicker editor;
private FocusPanel editorWrapper;
public DateEditorWidget(ADateEditorModel model) {
super();
this.model = model;
}
@Override
protected void onViewerUpdate() {
setViewerValue(model.getValue());
}
@Override
protected void onEditorUpdate() {
setEditorValue(model.getValue());
editorWrapper.setFocus(true);
}
@Override
protected void onEditorSubmit() {
model.changeValue(getEditorValue());
}
@Override
protected final Widget onViewerInitialization() {
viewer = new Label();
return viewer;
}
@Override
protected final Widget onEditorInitialization() {
editor = new DatePicker();
editor.addValueChangeHandler(new DateChangeHandler());
editorWrapper = new FocusPanel();
editorWrapper.addKeyPressHandler(new CancelKeyPressHandler());
editorWrapper.add(editor);
editorWrapper.setFocus(true);
return editorWrapper;
}
public final void setViewerValue(Date value) {
viewer.setText(value == null ? "." : value.toString());
}
public final void setEditorValue(Date value) {
java.util.Date javaDate = value == null ? null : value.toJavaDate();
editor.setValue(javaDate);
if (javaDate != null) editor.setCurrentMonth(javaDate);
}
public final Date getEditorValue() {
java.util.Date javaDate = editor.getValue();
return javaDate == null ? null : new Date(javaDate);
}
@Override
public boolean isEditable() {
return model.isEditable();
}
@Override
public String getTooltip() {
return model.getTooltip();
}
@Override
public String getId() {
return model.getId();
}
private class DateChangeHandler implements ValueChangeHandler<java.util.Date> {
@Override
public void onValueChange(ValueChangeEvent<java.util.Date> event) {
submitEditor();
}
}
}