package org.ovirt.engine.ui.userportal.client.views.basic; import java.util.ArrayList; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.vm_pools; import org.ovirt.engine.ui.uicommon.models.userportal.UserPortalItemModel; import org.ovirt.engine.ui.userportal.client.components.GridController; import org.ovirt.engine.ui.userportal.client.components.GridElement; import org.ovirt.engine.ui.userportal.client.views.basic.components.VmTvLayout; import com.google.gwt.core.client.GWT; import com.smartgwt.client.types.TileLayoutPolicy; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.tile.TileLayout; public class VmTileGrid extends GridController<UserPortalItemModel> { private TileLayout layout = new TileLayout(); public VmTileGrid() { setSelectDefaultValue(true); layout.setTileWidth(170); layout.setTileHeight(240); layout.setAnimateTileChange(false); //setTileMargin(0); //setExpandMargins(false); layout.setLayoutMargin(15); layout.setMinWidth(200); layout.setShowResizeBar(true); layout.setResizeBarTarget("next"); layout.setTileHMargin(10); layout.setTileVMargin(10); //layout.setLayoutPolicy(TileLayoutPolicy.FLOW); } @Override public Object getId(UserPortalItemModel item) { return item.getIsPool() ? ((vm_pools)item.getEntity()).getvm_pool_id() : ((VM)item.getEntity()).getvm_guid(); } @Override public GridElement<UserPortalItemModel> addItem(UserPortalItemModel item, int position) { final VmTvLayout tile = new VmTvLayout(item); // Due to a bug in SmartGWT TileGrid, there is no possibility to add an item at index 0 to a grid already populated with items // thus in that case we remove all other items, add the item and add the rest after it (BZ 740213) if (position == 0) { Canvas tempTile = null; ArrayList<Canvas> oldTiles = new ArrayList<Canvas>(); do { tempTile = layout.getTile(0); if (tempTile != null) { oldTiles.add(tempTile); layout.removeTile(tempTile); } } while (tempTile != null); layout.addTile(tile); for (Canvas c : oldTiles) layout.addTile(c); } else { layout.addTile(tile, position); } tile.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { select(tile); } }); return tile; } @Override public void removeItem(GridElement<UserPortalItemModel> itemView) { layout.removeTile((Canvas)itemView); } public TileLayout getLayout() { return layout; } }