From a0eb057e4abc89344e7266b8040b3a18525b4778 Mon Sep 17 00:00:00 2001 From: Peter Osterlund <peterosterlund2@gmail.com> Date: Sat, 7 Apr 2012 23:46:04 +0000 Subject: [PATCH] DroidFish: Allow selecting side to play when starting a new game. --- DroidFish/res/values/strings.xml | 6 +- .../src/org/petero/droidfish/DroidFish.java | 66 +++++++++++++------ 2 files changed, 49 insertions(+), 23 deletions(-) diff --git a/DroidFish/res/values/strings.xml b/DroidFish/res/values/strings.xml index 1a60a66..80f17ca 100644 --- a/DroidFish/res/values/strings.xml +++ b/DroidFish/res/values/strings.xml @@ -328,6 +328,7 @@ you are not actively using the program.\ <string name="failed_to_start_engine">Failed to start engine</string> <string name="engine_terminated">Engine terminated</string> <string name="uci_protocol_error">UCI protocol error</string> + <string name="start_new_game">Start New Game?</string> <string name="err_too_few_spaces">Too few spaces</string> <string name="err_invalid_piece">Invalid piece</string> @@ -359,8 +360,8 @@ you are not actively using the program.\ <string name="prefs_playing_options">Playing Options</string> <string name="prefs_playerName_title">Player Name</string> <string name="prefs_playerName_summary">Default player name in new games</string> - <string name="prefs_autoSwapSides_title">Auto Swap Sides</string> - <string name="prefs_autoSwapSides_summary">Automatically swap sides when new game started. Also overrides Flip Board setting</string> + <string name="prefs_autoSwapSides_title">Flip Board: Auto</string> + <string name="prefs_autoSwapSides_summary">Use side to move to flip board automatically</string> <string name="prefs_playerNameFlip_title">Flip Board: Player</string> <string name="prefs_playerNameFlip_summary">Use Player Name to flip board automatically</string> <string name="prefs_engine_settings">Engine Settings</string> @@ -480,6 +481,7 @@ you are not actively using the program.\ <string name="prefs_tbEngineProbe_summary">Enable tablebase probing in engine, when supported. Takes effect next time engine is started</string> <string name="prefs_gtbPath_title">GTB Directory</string> <string name="prefs_gtbPath_summary">Directory where Gaviota tablebases are installed. Leave blank to use default directory</string> + <string name="buttonDesc_flip">Flip board button</string> <string name="buttonDesc_mode">Mode button</string> <string name="buttonDesc_back">Backward button</string> diff --git a/DroidFish/src/org/petero/droidfish/DroidFish.java b/DroidFish/src/org/petero/droidfish/DroidFish.java index f8731b7..fc02571 100644 --- a/DroidFish/src/org/petero/droidfish/DroidFish.java +++ b/DroidFish/src/org/petero/droidfish/DroidFish.java @@ -138,7 +138,6 @@ public class DroidFish extends Activity implements GUIInterface { // FIXME!!! Remember multi-PV analysis setting when program restarted. // FIXME!!! Use high-res buttons from Scid on the go. - // FIXME!!! Auto-swap sides is not good in combination with analysis mode. // FIXME!!! Better behavior if engine is terminated. How exactly? // FIXME!!! Handle PGN intents with more than one game. @@ -479,8 +478,8 @@ public class DroidFish extends Activity implements GUIInterface { flipButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { - setBoardFlipPrefs(!boardFlipped); - setBoardFlip(false); + setBoardFlipPrefs(!cb.flipped); + cb.setFlipped(boardFlipped); } }); modeButton = (ImageButton)findViewById(R.id.modeButton); @@ -581,7 +580,7 @@ public class DroidFish extends Activity implements GUIInterface { boardFlipped = settings.getBoolean("boardFlipped", false); autoSwapSides = settings.getBoolean("autoSwapSides", false); playerNameFlip = settings.getBoolean("playerNameFlip", true); - setBoardFlip(true); + setBoardFlip(false); boolean drawSquareLabels = settings.getBoolean("drawSquareLabels", false); cb.setDrawSquareLabels(drawSquareLabels); cb.oneTouchMoves = settings.getBoolean("oneTouchMoves", false); @@ -778,22 +777,7 @@ public class DroidFish extends Activity implements GUIInterface { public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.item_new_game: - if (autoSwapSides && (gameMode.playerWhite() != gameMode.playerBlack())) { - int gameModeType; - if (gameMode.playerWhite()) { - gameModeType = GameMode.PLAYER_BLACK; - } else { - gameModeType = GameMode.PLAYER_WHITE; - } - Editor editor = settings.edit(); - String gameModeStr = String.format("%d", gameModeType); - editor.putString("gameMode", gameModeStr); - editor.commit(); - gameMode = new GameMode(gameModeType); - } -// savePGNToFile(ctrl.getPGN(), ".autosave.pgn", true); - ctrl.newGame(gameMode); - ctrl.startGame(); + showDialog(NEW_GAME_DIALOG); return true; case R.id.item_editboard: { Intent i = new Intent(DroidFish.this, EditBoard.class); @@ -865,7 +849,7 @@ public class DroidFish extends Activity implements GUIInterface { try { String fen = data.getAction(); ctrl.setFENOrPGN(fen); - setBoardFlip(true); + setBoardFlip(false); } catch (ChessParseError e) { } } @@ -1166,6 +1150,21 @@ public class DroidFish extends Activity implements GUIInterface { cb.setMoveHints(hints); } + private final void startNewGame(int type) { + if (type != 2) { + int gameModeType = (type == 0) ? GameMode.PLAYER_WHITE : GameMode.PLAYER_BLACK; + Editor editor = settings.edit(); + String gameModeStr = String.format("%d", gameModeType); + editor.putString("gameMode", gameModeStr); + editor.commit(); + gameMode = new GameMode(gameModeType); + } +// savePGNToFile(ctrl.getPGN(), ".autosave.pgn", true); + ctrl.newGame(gameMode); + ctrl.startGame(); + setBoardFlip(true); + } + static private final int PROMOTE_DIALOG = 0; static private final int BOARD_MENU_DIALOG = 1; static private final int ABOUT_DIALOG = 2; @@ -1182,10 +1181,35 @@ public class DroidFish extends Activity implements GUIInterface { static private final int GO_BACK_MENU_DIALOG = 13; static private final int GO_FORWARD_MENU_DIALOG = 14; static private final int FILE_MENU_DIALOG = 15; + static private final int NEW_GAME_DIALOG = 16; @Override protected Dialog onCreateDialog(int id) { switch (id) { + case NEW_GAME_DIALOG: { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(R.string.option_new_game); + builder.setMessage(R.string.start_new_game); + builder.setPositiveButton(R.string.yes, new Dialog.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + startNewGame(2); + } + }); + builder.setNeutralButton(R.string.white, new Dialog.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + startNewGame(0); + } + }); + builder.setNegativeButton(R.string.black, new Dialog.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + startNewGame(1); + } + }); + return builder.create(); + } case PROMOTE_DIALOG: { final CharSequence[] items = { getString(R.string.queen), getString(R.string.rook),