package ilarkesto.gwt.client; import ilarkesto.core.base.Str; import ilarkesto.core.logging.Log; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.dom.client.KeyPressEvent; import com.google.gwt.event.dom.client.KeyPressHandler; import com.google.gwt.user.client.ui.FocusListener; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.Widget; public abstract class ATimeViewEditWidget extends AViewEditWidget { private Label viewer; private TextBox editor; @Override protected final Widget onViewerInitialization() { viewer = new Label(); return viewer; } @Override protected final Widget onEditorInitialization() { editor = new TextBox(); editor.addFocusListener(new EditorFocusListener()); editor.addKeyPressHandler(new EditorKeyboardListener()); return editor; } public final void setViewerValue(Time value) { viewer.setText(value == null ? "." : value.toString()); } public final void setEditorValue(Time value) { editor.setText(value == null ? null : value.toString()); editor.setSelectionRange(0, editor.getText().length()); editor.setFocus(true); } public final Time getEditorValue() { String s = editor.getText(); if (Str.isBlank(s)) return null; try { return new Time(s); } catch (Exception ex) { Log.DEBUG("Parsing time '" + s + "' failed: ", ex); return null; } } private class EditorKeyboardListener implements KeyPressHandler { @Override public void onKeyPress(KeyPressEvent event) { char keyCode = event.getCharCode(); if (keyCode == KeyCodes.KEY_ENTER) { submitEditor(); } else if (keyCode == KeyCodes.KEY_ESCAPE) { cancelEditor(); } } } private class EditorFocusListener implements FocusListener { public void onFocus(Widget sender) {} public void onLostFocus(Widget sender) { submitEditor(); } } }