package org.ourproject.massmob.client.ui; import org.ourproject.massmob.client.ui.EditEvent.EditHandler; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.BlurEvent; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.KeyDownEvent; import com.google.gwt.event.dom.client.MouseOutEvent; import com.google.gwt.event.dom.client.MouseOverEvent; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.Widget; import cc.kune.common.client.tooltip.Tooltip; public class EditableLabel extends Composite { interface EditableLabelUiBinder extends UiBinder<Widget, EditableLabel> { } private static EditableLabelUiBinder uiBinder = GWT.create(EditableLabelUiBinder.class); @UiField Label label; @UiField TextBox textbox; public EditableLabel() { initWidget(uiBinder.createAndBindUi(this)); label.setStylePrimaryName("editableLabel"); Tooltip.to(label, "Click to edit"); } public HandlerRegistration addEditHandler(final EditHandler handler) { return addHandler(handler, EditEvent.getType()); } private void finishEdit() { label.setText(textbox.getText()); label.setVisible(true); textbox.setVisible(false); fireEvent(new EditEvent(textbox.getValue())); } @UiHandler("textbox") void handleKeys(final KeyDownEvent event) { if (event.getNativeKeyCode() == 13) { finishEdit(); } } @UiHandler("textbox") void onBlur(final BlurEvent event) { finishEdit(); } @UiHandler("label") void onClick(final ClickEvent e) { label.setVisible(false); textbox.setVisible(true); textbox.setFocus(true); textbox.selectAll(); } @UiHandler("label") void onMouseOut(final MouseOutEvent event) { label.removeStyleDependentName("high"); } @UiHandler("label") void onMouseOver(final MouseOverEvent event) { label.addStyleDependentName("high"); } public void setEnabled(final boolean enabled) { textbox.setEnabled(enabled); } public void setText(final String text) { label.setText(text); textbox.setText(text); } }