package fr.lteconsulting.hexa.client.ui.tree; import com.google.gwt.dom.client.Style.Unit; 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.HorizontalPanel; import com.google.gwt.user.client.ui.Widget; public class LeafWidget<NODE_DATA, LEAF_DATA> extends LeafWidgetBase<NODE_DATA, LEAF_DATA> { Anchor add = new Anchor( " combine " ); // ImageButton add = new ImageButton( Resources.get().images.add(), // "Combine with another condition" ); Anchor delete = new Anchor( " del " ); // ImageButton delete = new ImageButton( Resources.get().images.delete(), // "Delete from parent" ); Widget widget = null; HorizontalPanel panel = new HorizontalPanel(); public LeafWidget( boolean fReadOnly ) { add.getElement().getStyle().setPaddingLeft( 5, Unit.PX ); delete.getElement().getStyle().setPaddingLeft( 5, Unit.PX ); if( !fReadOnly ) { panel.add( add ); panel.add( delete ); } initWidget( panel ); delete.addClickHandler( new ClickHandler() { @Override public void onClick( ClickEvent event ) { event.preventDefault(); event.stopPropagation(); if( parent != null ) parent.removeChild( LeafWidget.this ); } } ); add.addClickHandler( new ClickHandler() { @Override public void onClick( ClickEvent event ) { event.preventDefault(); event.stopPropagation(); if( parent == null ) return; // instead of our parent having us as a child, // replace with a node having us as a child INodeWidget<NODE_DATA, LEAF_DATA> node = parent.createEmptyNode(); parent.replaceChild( LeafWidget.this, node ); node.addChild( LeafWidget.this ); node.childWantsAdd( add ); } } ); } @Override public void setWidget( Widget widget ) { if( this.widget != null ) panel.remove( 0 ); if( widget != null ) panel.insert( widget, 0 ); this.widget = widget; } }