I am trying to initially hide a Tile from a TileLayout.
I tried many different ways to do it, and some work, but others do not work: see code below.
I expected to be able to add a Canvas to a TileLayout, then call canvas.hide (), and for that Canvas to "disappear", but it does not.
This is easy to work-around in a simple test environment, but not so much when I am running in an MVC/MVP where I create a layout in one place, and it gets added to the UI in a different place...
At any rate, I am looking for suggestions/workarounds to effectively accomplish this:
Running
SmartGWT 3.0
GWT 2.3.0
Chrome 17.0.963.56 m
FireFox 6.0.2
Sample code
I tried many different ways to do it, and some work, but others do not work: see code below.
I expected to be able to add a Canvas to a TileLayout, then call canvas.hide (), and for that Canvas to "disappear", but it does not.
This is easy to work-around in a simple test environment, but not so much when I am running in an MVC/MVP where I create a layout in one place, and it gets added to the UI in a different place...
At any rate, I am looking for suggestions/workarounds to effectively accomplish this:
Code:
final TileLayout tileLayout = new TileLayout (); final Canvas tile = new Canvas (); tileLayout.addTile (tile); tile.hide (); // seems to not work
SmartGWT 3.0
GWT 2.3.0
Chrome 17.0.963.56 m
FireFox 6.0.2
Sample code
Code:
import com.smartgwt.client.widgets.tile.TileLayout; import com.smartgwt.client.widgets.layout.VLayout; import com.smartgwt.client.widgets.IButton; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.DrawHandler; import com.smartgwt.client.widgets.events.DrawEvent; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.Scheduler; public class TestTileLayoutHideTile implements EntryPoint { // my attributes final Canvas tile1 = new Canvas (); final Canvas tile2 = new Canvas (); final Canvas tile3 = new Canvas (); /** * The EntryPoint interface */ public void onModuleLoad () { // create a TileLayout final TileLayout tileLayout = new TileLayout () { @Override public void onDraw () { // propagate super.onDraw (); // BUG? initially hide tile2, but the Tile still shows // GWT.log ("TileLayout.onDraw (): hiding tile2"); // tile2.hide (); } }; final int tileWidth = 300; final int tileMargin = 25; tileLayout.setShowEdges (false); tileLayout.setTileWidth (tileWidth); tileLayout.setTileHeight (100); tileLayout.setTileMargin (tileMargin); tileLayout.setWidth (tileWidth * 2 + tileMargin * 3 + tileMargin); tileLayout.setHeight (400); tileLayout.setAnimateTileChange (true); // add a couple tiles tile1.setBackgroundColor ("red"); tileLayout.addTile (tile1); tile2.setBackgroundColor ("green"); tileLayout.addTile (tile2); tile3.setBackgroundColor ("blue"); tileLayout.addTile (tile3); // BUG? initially hide tile2, but the Tile still shows // GWT.log ("hiding tile2 after adding Tile to TileLayout"); // tile2.hide (); // BUG? this gets called, but the tile stil shows tileLayout.addDrawHandler (new DrawHandler () { public void onDraw (final DrawEvent event) { // GWT.log ("DrawHandler.onDraw (): hiding tile2"); // tile2.hide (); } }); // this seems to work final Scheduler scheduler = Scheduler.get (); scheduler.scheduleDeferred (new Scheduler.ScheduledCommand() { public void execute() { GWT.log ("Deferred: hiding tile2"); tile2.hide (); } }); // show/hide tile2 final IButton showTile2Button = new IButton (); showTile2Button.setTitle ("Show Tile 2"); showTile2Button.addClickHandler (new ClickHandler () { public void onClick (final ClickEvent event) { tile2.show (); } }); final IButton hideTile2Button = new IButton (); hideTile2Button.setTitle ("Hide Tile 2"); hideTile2Button.addClickHandler (new ClickHandler () { public void onClick (final ClickEvent event) { tile2.hide (); } }); // display final VLayout layout = new VLayout (); layout.addMember (tileLayout); layout.addMember (showTile2Button); layout.addMember (hideTile2Button); layout.show (); // this seems to work // GWT.log ("hiding tile2 after adding showing TileLayout"); // tile2.hide (); } }
Comment