package fr.lteconsulting.hexa.client.ui.widget;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasKeyUpHandlers;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Focusable;
import com.google.gwt.user.client.ui.Widget;
import fr.lteconsulting.hexa.client.comm.HexaFramework;
/**
* @author Arnaud
*/
public class Validator<T extends Widget> extends Composite implements ClickHandler, KeyUpHandler
{
private final FlexTable m_table = new FlexTable();
private final ImageButton m_okBut = new ImageButton( HexaFramework.images.ok(), "Validate" );
private final ImageButton m_cancelBut = new ImageButton( HexaFramework.images.cancel(), "Cancel modification" );
private T m_editor = null;
private ValidatorCallback m_callback = null;
public Validator()
{
m_okBut.addClickHandler( this );
m_cancelBut.addClickHandler( this );
initWidget( m_table );
setEditor( null, true );
}
public void setEditor( T editor, boolean fShowCancel )
{
m_table.clear();
m_editor = editor;
if( m_editor != null )
{
m_table.setWidget( 0, 0, m_editor );
if( m_editor instanceof HasKeyUpHandlers )
((HasKeyUpHandlers) m_editor).addKeyUpHandler( this );
if( m_editor instanceof Focusable )
((Focusable) m_editor).setFocus( true );
}
m_table.setWidget( 0, 1, m_okBut );
if( fShowCancel )
m_table.setWidget( 0, 2, m_cancelBut );
}
public T getEditor()
{
return m_editor;
}
public void setCallback( ValidatorCallback callback )
{
m_callback = callback;
}
@Override
public void onClick( ClickEvent event )
{
if( m_callback == null )
return;
boolean fPrevDefault = true;
if( event.getSource() == m_okBut )
m_callback.onValidatorAction( ValidatorCallback.Button.Ok );
else if( event.getSource() == m_cancelBut )
m_callback.onValidatorAction( ValidatorCallback.Button.Cancel );
else
fPrevDefault = false;
if( fPrevDefault )
{
event.stopPropagation();
event.preventDefault();
}
}
@Override
public void onKeyUp( KeyUpEvent event )
{
if( event.getNativeKeyCode() == KeyCodes.KEY_ENTER )
{
m_callback.onValidatorAction( ValidatorCallback.Button.Ok );
}
else if( event.getNativeKeyCode() == KeyCodes.KEY_ESCAPE )
{
m_callback.onValidatorAction( ValidatorCallback.Button.Cancel );
}
/*
* else if( event.getCharCode() == KeyCodes.KEY_TAB ) {
* m_callback.onValidatorMoveRequest( 1, 0 ); } else if(
* event.getCharCode() == KeyCodes.KEY_UP ) {
* m_callback.onValidatorMoveRequest( 0, -1 ); } else if(
* event.getCharCode() == KeyCodes.KEY_DOWN ) {
* m_callback.onValidatorMoveRequest( 0, 1 ); } else if(
* event.getCharCode() == KeyCodes.KEY_LEFT ) {
* m_callback.onValidatorMoveRequest( -1, 0 ); } else if(
* event.getCharCode() == KeyCodes.KEY_RIGHT ) {
* m_callback.onValidatorMoveRequest( 1, 0 ); }
*/
else
{
return;
}
event.preventDefault();
}
}