package com.project.website.canvas.client.canvastools.tasklist; import com.google.gwt.event.dom.client.BlurEvent; import com.google.gwt.event.dom.client.BlurHandler; import com.google.gwt.event.dom.client.FocusEvent; import com.google.gwt.event.dom.client.FocusHandler; import com.google.gwt.event.dom.client.MouseOutEvent; import com.google.gwt.event.dom.client.MouseOutHandler; import com.google.gwt.event.dom.client.MouseOverEvent; import com.google.gwt.event.dom.client.MouseOverHandler; import com.google.gwt.user.client.ui.TextBox; import com.project.shared.client.handlers.RegistrationsManager; import com.project.website.canvas.client.resources.CanvasResources; public class HoverTextBox extends TextBox { private boolean isEditing = false; private RegistrationsManager _registrations = new RegistrationsManager(); public HoverTextBox() { this.enterViewMode(); this.registerHandlers(); } private void enterViewMode() { this.removeStyleName(CanvasResources.INSTANCE.main().hoverTextBoxEdit()); this.addStyleName(CanvasResources.INSTANCE.main().hoverTextBoxView()); } private void enterEditMode() { this.removeStyleName(CanvasResources.INSTANCE.main().hoverTextBoxView()); this.addStyleName(CanvasResources.INSTANCE.main().hoverTextBoxEdit()); } private void startEditing() { if (this.isEditing) { return; } enterEditMode(); isEditing = true; } private void stopEditing() { if (false == this.isEditing) { return; } enterViewMode(); this.setCursorPos(0); isEditing = false; } @Override public void setReadOnly(boolean readOnly) { super.setReadOnly(readOnly); if (readOnly) { this._registrations.clear(); this.enterViewMode(); } else { this.registerHandlers(); } } private void registerHandlers() { this._registrations.add(this.addBlurHandler(new BlurHandler() { public void onBlur(BlurEvent event) { stopEditing(); } })); this._registrations.add(this.addMouseOverHandler(new MouseOverHandler() { public void onMouseOver(MouseOverEvent event) { enterEditMode(); } })); this._registrations.add(this.addFocusHandler(new FocusHandler() { public void onFocus(FocusEvent event) { startEditing(); } })); this._registrations.add(this.addMouseOutHandler(new MouseOutHandler() { public void onMouseOut(MouseOutEvent event) { enterViewMode(); } })); } }