package fr.lteconsulting.hexa.client.ui.widget;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.uibinder.client.UiConstructor;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.Widget;
import fr.lteconsulting.hexa.client.css.HexaCss;
public class ImageTextButton extends Widget implements ClickHandler, HasClickHandlers
{
public interface Css extends HexaCss
{
public static final Css CSS = GWT.create( Css.class );
String main();
}
public interface Callback
{
void onClick( Object cookie );
}
ImageResource resource;
String title;
protected Element button;
Object cookie = null;
Callback callback = null;
@UiConstructor
public ImageTextButton( ImageResource resource, String title )
{
this.resource = resource;
this.title = title;
button = createButtonElement();
button.setClassName( Css.CSS.main() );
setText( title );
setElement( button );
}
protected Element createButtonElement()
{
return DOM.createButton();
}
public void setCallback( Callback callback, Object cookie )
{
this.callback = callback;
this.cookie = cookie;
addClickHandler( this );
}
public void setCookie( Object cookie )
{
this.cookie = cookie;
}
public Object getCookie()
{
return cookie;
}
public void setText( String text )
{
title = text;
String elem;
if( resource != null )
elem = "<img src='" + resource.getSafeUri().asString() + "'/>";
else
elem = "";
button.setInnerHTML( elem + "<span>" + text + "</span>" );
}
@Override
public HandlerRegistration addClickHandler( ClickHandler handler )
{
return addDomHandler( handler, ClickEvent.getType() );
}
public void setEnabled( boolean fEnable )
{
if( fEnable )
{
button.removeAttribute( "disabled" );
button.removeClassName( "disabled" );
}
else
{
button.setAttribute( "disabled", "true" );
button.addClassName( "disabled" );
}
}
@Override
public void onClick( ClickEvent event )
{
assert (callback != null);
callback.onClick( cookie );
}
}