add canUndo to GameStateInfo and use to hide the undo menu

This commit is contained in:
Eric House 2013-12-03 07:06:48 -08:00
parent fdc807ceb8
commit b5d6c513a6
8 changed files with 21 additions and 3 deletions

View file

@ -1409,6 +1409,7 @@ static const SetInfo gsi_ints[] = {
};
static const SetInfo gsi_bools[] = {
ARR_MEMBER( GameStateInfo,canHint ),
ARR_MEMBER( GameStateInfo, canUndo ),
ARR_MEMBER( GameStateInfo, canRedo ),
ARR_MEMBER( GameStateInfo, inTrade ),
ARR_MEMBER( GameStateInfo, tradeTilesSelected ),

View file

@ -764,10 +764,11 @@ public class BoardActivity extends XWActivity
!inTrade && m_gsi.canHideRack );
Utils.setItemVisible( menu, R.id.board_menu_trade,
m_gsi.canTrade );
Utils.setItemVisible( menu, R.id.board_menu_undo_last,
m_gsi.canUndo );
}
Utils.setItemVisible( menu, R.id.board_menu_invite, 0 < m_missing );
Utils.setItemVisible( menu, R.id.board_menu_undo_last, !inTrade );
Utils.setItemVisible( menu, R.id.board_menu_trade_cancel, inTrade );
Utils.setItemVisible( menu, R.id.board_menu_trade_commit,

View file

@ -105,6 +105,7 @@ public class JNIThread extends Thread {
public int visTileCount;
public int trayVisState;
public boolean canHint;
public boolean canUndo;
public boolean canRedo;
public boolean inTrade;
public boolean tradeTilesSelected;

View file

@ -704,7 +704,8 @@ board_canShuffle( const BoardCtxt* board )
XP_Bool
board_canHideRack( const BoardCtxt* board )
{
XP_Bool result = board->boardObscuresTray || !board->gameOver;
XP_Bool result = 0 <= server_getCurrentTurn( board->server )
&& (board->boardObscuresTray || !board->gameOver);
LOG_RETURNF( "%d", result );
return result;
}

View file

@ -321,6 +321,7 @@ game_getState( const XWGame* game, GameStateInfo* gsi )
gsi->trayVisState = board_getTrayVisState( board );
gsi->visTileCount = board_visTileCount( board );
gsi->canHint = !gameOver && board_canHint( board );
gsi->canUndo = model_canUndo( game->model );
gsi->canRedo = board_canTogglePending( board );
gsi->inTrade = board_inTrade( board, &gsi->tradeTilesSelected );
gsi->canChat = !!game->comms && comms_canChat( game->comms );

View file

@ -36,6 +36,7 @@ typedef struct _GameStateInfo {
XP_U16 visTileCount;
XW_TrayVisState trayVisState;
XP_Bool canHint;
XP_Bool canUndo;
XP_Bool canRedo;
XP_Bool inTrade;
XP_Bool tradeTilesSelected;

View file

@ -822,6 +822,18 @@ model_rejectPreviousMove( ModelCtxt* model, PoolContext* pool, XP_U16* turn )
*turn = entry.playerNum;
} /* model_rejectPreviousMove */
XP_Bool
model_canUndo( const ModelCtxt* model )
{
const StackCtxt* stack = model->vol.stack;
XP_U16 nStackEntries = stack_getNEntries( stack );
/* More than just tile assignment? */
XP_Bool result = nStackEntries > model->nPlayers;
LOG_RETURNF( "%d", result );
return result;
}
/* Undo a move, but only if it's the move we're expecting to undo (as
* indicated by *moveNumP, if >= 0).
*/

View file

@ -192,7 +192,7 @@ void model_commitRejectedPhony( ModelCtxt* model, XP_S16 player );
void model_makeTileTrade( ModelCtxt* model, XP_S16 player,
const TrayTileSet* oldTiles,
const TrayTileSet* newTiles );
XP_Bool model_canUndo( const ModelCtxt* model );
XP_Bool model_undoLatestMoves( ModelCtxt* model, PoolContext* pool,
XP_U16 nMovesSought, XP_U16* turn,
XP_S16* moveNum );