package org.activityinfo.ui.client.widget;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.HeadingElement;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.GwtEvent;
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.Window;
import com.google.gwt.user.client.ui.*;
import org.activityinfo.i18n.shared.I18N;
/**
* Generic widget that will user to edit any heading.
*
* Created by Mithun on 4/3/2014.
*
*/
public class EditableHeader implements HasValue<String>,IsWidget {
private final HTMLPanel rootElement;
interface EditableHeaderUiBinder extends UiBinder<HTMLPanel, EditableHeader> {
}
private static EditableHeaderUiBinder ourUiBinder = GWT.create(EditableHeaderUiBinder.class);
@UiField
HeadingElement headerElement;
@UiField
InlineLabel headerLabel;
String value;
public EditableHeader() {
rootElement = ourUiBinder.createAndBindUi(this);
}
@UiHandler("headerLabel")
public void onClick(ClickEvent event){
String newValue = Window.prompt(I18N.CONSTANTS.changeHeaderMessage(), value);
if(newValue != null) {
setValue(newValue,true);
}
}
@Override
public String getValue() {
return value;
}
@Override
public void setValue(String value) {
setValue(value,false);
}
@Override
public void setValue(String value, boolean fireEvents) {
this.value = value;
headerLabel.setText(value);
if(fireEvents){
ValueChangeEvent.fire(this,value);
}
}
@Override
public HandlerRegistration addValueChangeHandler(ValueChangeHandler<String> handler) {
return rootElement.addHandler(handler,ValueChangeEvent.getType());
}
@Override
public void fireEvent(GwtEvent<?> event) {
rootElement.fireEvent(event);
}
@Override
public Widget asWidget() {
return rootElement;
}
}