package com.google.gwt.gin.higherlower.client; import com.google.gwt.gin.higherlower.client.gin.BackOfCard; import com.google.gwt.gin.higherlower.client.gin.Columns; import com.google.gwt.gin.higherlower.client.gin.Rows; import com.google.gwt.gin.higherlower.client.model.Card; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.Image; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.name.Named; public class DefaultCardGrid extends CardGrid { private final Provider<Image> backOfCard; private final Grid grid; private final int rows; private final int columns; @Inject public DefaultCardGrid(@BackOfCard Provider<Image> backOfCard, @Rows int rows, @Columns int columns) { // we use a Provider to avoid weird results with duplicate images in Grid this.backOfCard = backOfCard; this.grid = new Grid(rows, columns); this.rows = rows; this.columns = columns; grid.addStyleName("cardGrid"); reset(); initWidget(grid); } public void reset() { for (int row = 0; row < this.rows; row++) { for (int column = 0; column < this.columns; column++) { grid.setWidget(row, column, new Card(null,null,this.backOfCard.get())); } } } public void nextCard(Card card) { // TODO perf will suck for large grids for (int row = 0; row < this.rows; row++) { for (int column = 0; column < this.columns; column++) { Card currentCard = (Card)grid.getWidget(row, column); if (currentCard.getSuit() == null) { grid.setWidget(row, column, card); return; } } } } }