package fr.lteconsulting.hexa.demo.client.databinding.ui;
import java.util.List;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlexTable;
import fr.lteconsulting.hexa.client.databinding.Binder;
import fr.lteconsulting.hexa.client.databinding.Mode;
import fr.lteconsulting.hexa.client.databinding.NotifyPropertyChangedEvent;
import fr.lteconsulting.hexa.demo.client.databinding.data.Person;
public class PersonGrid extends Composite
{
private final FlexTable table;
private List<Person> personnes = null;
private Person selectedPersonne;
public PersonGrid()
{
table = new FlexTable();
initWidget( table );
}
public void setPersonList( List<Person> personnes )
{
this.personnes = personnes;
fillDisplay();
}
public Person getSelectedPersonne()
{
return selectedPersonne;
}
public void setSelectedPersonne( Person p )
{
if( selectedPersonne != null )
table.getRowFormatter().getElement( personnes.indexOf( selectedPersonne ) ).getStyle().clearBackgroundColor();
selectedPersonne = p;
if( selectedPersonne != null )
table.getRowFormatter().getElement( personnes.indexOf( selectedPersonne ) ).getStyle().setBackgroundColor( "yellow" );
// Notify the binding system
NotifyPropertyChangedEvent.notify( this, "selectedPersonne" );
}
private void fillDisplay()
{
table.clear( true );
for( int i = 0; i < personnes.size(); i++ )
{
final Person p = personnes.get( i );
// Bind each anchor's text to person's description
Anchor a = new Anchor();
Binder.Bind( p, "description" ).Mode( Mode.OneWay ).To( a, "text" );
table.setWidget( i, 0, a );
a.addClickHandler( new ClickHandler()
{
@Override
public void onClick( ClickEvent event )
{
setSelectedPersonne( p );
}
} );
}
}
}