diff --git a/DroidFish/res/values/strings.xml b/DroidFish/res/values/strings.xml index fa0d145..709a410 100644 --- a/DroidFish/res/values/strings.xml +++ b/DroidFish/res/values/strings.xml @@ -146,6 +146,7 @@ you are not actively using the program.\ Game over, black resigns! Book: Invalid move + Piece can not be moved Preferences Edit File / Load Game Edit File / Save Game diff --git a/DroidFish/src/org/petero/droidfish/ChessBoard.java b/DroidFish/src/org/petero/droidfish/ChessBoard.java index ca8d71d..158e634 100644 --- a/DroidFish/src/org/petero/droidfish/ChessBoard.java +++ b/DroidFish/src/org/petero/droidfish/ChessBoard.java @@ -27,6 +27,7 @@ import org.petero.droidfish.gamelogic.MoveGen; import org.petero.droidfish.gamelogic.Pair; import org.petero.droidfish.gamelogic.Piece; import org.petero.droidfish.gamelogic.Position; +import org.petero.droidfish.gamelogic.TextIO; import org.petero.droidfish.gamelogic.UndoInfo; import android.content.Context; @@ -40,8 +41,10 @@ import android.os.Handler; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; +import android.widget.Toast; public class ChessBoard extends View { + private PGNOptions pgnOptions = null; public Position pos; public int selectedSquare; @@ -87,6 +90,10 @@ public class ChessBoard extends View { private Paint decorationPaint; private ArrayList moveMarkPaint; + public void setPgnOptions(PGNOptions pgnOptions) { + this.pgnOptions = pgnOptions; + } + public ChessBoard(Context context, AttributeSet attrs) { super(context, attrs); pos = new Position(); @@ -635,6 +642,16 @@ public class ChessBoard extends View { userSelectedSquare = false; return matchingMove; } + if (!anyMatch && (sq >= 0)) { + int p = pos.getPiece(sq); + if (myColor(p)) { + String msg = getContext().getString(R.string.piece_can_not_be_moved); + boolean localized = (pgnOptions != null) && + (pgnOptions.view.pieceType != PGNOptions.PT_ENGLISH); + msg += ": " + TextIO.pieceAndSquareToString(localized, p, sq); + Toast.makeText(getContext(), msg, Toast.LENGTH_SHORT).show(); + } + } setSelection(anyMatch ? sq : -1); } return null; diff --git a/DroidFish/src/org/petero/droidfish/DroidFish.java b/DroidFish/src/org/petero/droidfish/DroidFish.java index 29dfa3a..8c9a558 100644 --- a/DroidFish/src/org/petero/droidfish/DroidFish.java +++ b/DroidFish/src/org/petero/droidfish/DroidFish.java @@ -525,6 +525,7 @@ public class DroidFish extends Activity implements GUIInterface { cb.setFocusable(true); cb.requestFocus(); cb.setClickable(true); + cb.setPgnOptions(pgnOptions); final GestureDetector gd = new GestureDetector(new GestureDetector.SimpleOnGestureListener() { private float scrollX = 0; diff --git a/DroidFish/src/org/petero/droidfish/gamelogic/TextIO.java b/DroidFish/src/org/petero/droidfish/gamelogic/TextIO.java index e643dba..0992c2b 100644 --- a/DroidFish/src/org/petero/droidfish/gamelogic/TextIO.java +++ b/DroidFish/src/org/petero/droidfish/gamelogic/TextIO.java @@ -728,6 +728,17 @@ public class TextIO { return ret.toString(); } + /** Convert a piece and a square to a string, such as Nf3. */ + public final static String pieceAndSquareToString(boolean localized, int p, int sq) { + String ret; + if ((p == Piece.WPAWN) || (p == Piece.BPAWN)) + ret = localized ? pieceNames[0] : "P"; + else + ret = localized ? pieceToCharLocalized(p) : pieceToChar(p); + ret += squareToString(sq); + return ret; + } + private final static String pieceToChar(int p) { switch (p) { case Piece.WQUEEN: case Piece.BQUEEN: return "Q";