/*\r
* woptions.c -- Options dialog box routines for WinBoard\r
*\r
- * Copyright 2000, 2009, 2010, 2011 Free Software Foundation, Inc.\r
+ * Copyright 2000, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.\r
*\r
* Enhancements Copyright 2005 Alessandro Scotti\r
*\r
LRESULT CALLBACK\r
BoardOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
{\r
- static Boolean mono, white, flip;\r
+ static Boolean mono, white, flip, fonts, bitmaps, grid;\r
static BoardSize size;\r
static COLORREF lsc, dsc, wpc, bpc, hsc, phc;\r
static HBITMAP pieces[3];\r
if (appData.upsideDown)\r
CheckDlgButton(hDlg, OPT_UpsideDown, TRUE);\r
\r
+ if (appData.useBitmaps)\r
+ CheckDlgButton(hDlg, OPT_Bitmaps, TRUE);\r
+\r
+ if (appData.useFont)\r
+ CheckDlgButton(hDlg, OPT_PieceFont, TRUE);\r
+\r
+ if (appData.overrideLineGap >= 0)\r
+ CheckDlgButton(hDlg, OPT_Grid, TRUE);\r
+\r
pieces[0] = DoLoadBitmap(hInst, "n", SAMPLE_SQ_SIZE, "s");\r
pieces[1] = DoLoadBitmap(hInst, "n", SAMPLE_SQ_SIZE, "w");\r
pieces[2] = DoLoadBitmap(hInst, "n", SAMPLE_SQ_SIZE, "o");\r
white= appData.allWhite;\r
flip = appData.upsideDown;\r
size = boardSize;\r
+ bitmaps = appData.useBitmaps;\r
+ fonts = appData.useFont;\r
+ grid = appData.overrideLineGap >= 0;\r
\r
SetBoardOptionEnables(hDlg);\r
return TRUE;\r
ChangeBoardSize(size);\r
}\r
\r
+ if (bitmaps && !appData.useBitmaps) InitTextures();\r
+\r
if ((mono != appData.monoMode) ||\r
(lsc != lightSquareColor) ||\r
(dsc != darkSquareColor) ||\r
(hsc != highlightSquareColor) ||\r
(flip != appData.upsideDown) ||\r
(white != appData.allWhite) ||\r
+ (fonts != appData.useFont) ||\r
+ (bitmaps != appData.useBitmaps) ||\r
+ (grid != appData.overrideLineGap >= 0) ||\r
(phc != premoveHighlightColor)) {\r
\r
lightSquareColor = lsc;\r
appData.monoMode = mono;\r
appData.allWhite = white;\r
appData.upsideDown = flip;\r
+ appData.useFont = fonts;\r
+ appData.useBitmaps = bitmaps;\r
+ if(grid != appData.overrideLineGap >= 0) appData.overrideLineGap = grid - 1;\r
\r
InitDrawingColors();\r
InitDrawingSizes(boardSize, 0);\r
\r
case OPT_AllWhite:\r
white = !white;\r
- SetBoardOptionEnables(hDlg);\r
break;\r
\r
case OPT_UpsideDown:\r
flip = !flip;\r
- SetBoardOptionEnables(hDlg);\r
+ break;\r
+\r
+ case OPT_Bitmaps:\r
+ bitmaps = !bitmaps;\r
+ break;\r
+\r
+ case OPT_PieceFont:\r
+ fonts = !fonts;\r
+ break;\r
+\r
+ case OPT_Grid:\r
+ grid = !grid;\r
break;\r
}\r
break;\r
*\r
\*---------------------------------------------------------------------------*/\r
\r
+char *string; // sorry\r
+\r
VOID\r
SetSampleFontText(HWND hwnd, int id, const MyFont *mf)\r
{\r
mf->mfp.pointSize, mf->mfp.faceName,\r
mf->mfp.bold ? " bold" : "",\r
mf->mfp.italic ? " italic" : "");\r
+ if(id != OPT_SamplePieceFont)\r
SetDlgItemText(hwnd, id, buf);\r
+ else SetDlgItemText(hwnd, id, string);\r
\r
hControl = GetDlgItem(hwnd, id);\r
hdc = GetDC(hControl);\r
\r
/* format the text in the rich edit control */\r
SendMessage(hControl, EM_SETCHARFORMAT, SCF_ALL, (LPARAM) &cf);\r
+ if(id != OPT_SamplePieceFont)\r
SendMessage(hControl, EM_SETRECT, (WPARAM)0, (LPARAM) &rectFormat);\r
\r
/* clean up */\r
LRESULT CALLBACK\r
FontOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
{\r
- static MyFont workFont[NUM_FONTS];\r
+ static MyFont workFont[NUM_FONTS+1];\r
static BOOL firstPaint;\r
+ static char pieceText[] = "ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxyz";\r
int i;\r
RECT rect;\r
\r
/* copy the current font settings into a working copy */\r
for (i=0; i < NUM_FONTS; i++)\r
CopyFont(&workFont[i], font[boardSize][i]);\r
+ strncpy(workFont[NUM_FONTS].mfp.faceName, appData.renderPiecesWithFont, sizeof(workFont[NUM_FONTS].mfp.faceName));\r
+ workFont[NUM_FONTS].mfp.pointSize = 16.;\r
+ workFont[NUM_FONTS].mfp.charset = DEFAULT_CHARSET;\r
\r
Translate(hDlg, DLG_Fonts);\r
if (!appData.icsActive)\r
SetSampleFontText(hDlg, OPT_SampleConsoleFont, &workFont[CONSOLE_FONT]);\r
SetSampleFontText(hDlg, OPT_SampleMoveHistoryFont, &workFont[MOVEHISTORY_FONT]);\r
SetSampleFontText(hDlg, OPT_SampleGameListFont, &workFont[GAMELIST_FONT]);\r
+ string = appData.fontToPieceTable;\r
+ SetSampleFontText(hDlg, OPT_SamplePieceFont, &workFont[NUM_FONTS]);\r
firstPaint = FALSE;\r
}\r
break;\r
for (i=0; i < NUM_FONTS; i++)\r
CopyFont(font[boardSize][i], &workFont[i]);\r
\r
+ { // Make new piece-to-char table\r
+ char buf[MSG_SIZ];\r
+ GetDlgItemText(hDlg, OPT_SamplePieceFont, buf, MSG_SIZ);\r
+ ASSIGN(appData.fontToPieceTable, buf);\r
+ }\r
+ ASSIGN(appData.renderPiecesWithFont, workFont[NUM_FONTS].mfp.faceName); // piece font\r
+\r
/* a sad necessity due to the original design of having a separate\r
* console font, tags font, and comment font for each board size. IMHO\r
* these fonts should not be dependent on the current board size. I'm\r
SetSampleFontText(hDlg, OPT_SampleGameListFont, &workFont[GAMELIST_FONT]);\r
break;\r
\r
+ case OPT_ChoosePieceFont:\r
+ MyCreateFont(hDlg, &workFont[NUM_FONTS]);\r
+ string = pieceText;\r
+ SetSampleFontText(hDlg, OPT_SamplePieceFont, &workFont[NUM_FONTS]);\r
+ break;\r
+\r
case OPT_DefaultFonts:\r
for (i=0; i<NUM_FONTS; i++) {\r
DeleteObject(&workFont[i].hf);\r
*\r
\*---------------------------------------------------------------------------*/\r
\r
+int\r
+LoadOptionsWhichRadio(HWND hDlg)\r
+{\r
+ return (IsDlgButtonChecked(hDlg, OPT_Exact) ? 1 :\r
+ (IsDlgButtonChecked(hDlg, OPT_Subset) ? 2 :\r
+ (IsDlgButtonChecked(hDlg, OPT_Struct) ? 3 :\r
+ (IsDlgButtonChecked(hDlg, OPT_Material) ? 4 :\r
+ (IsDlgButtonChecked(hDlg, OPT_Range) ? 5 :\r
+ (IsDlgButtonChecked(hDlg, OPT_Difference) ? 6 : -1))))));\r
+}\r
+\r
VOID\r
SetLoadOptionEnables(HWND hDlg)\r
{\r
{\r
char buf[MSG_SIZ];\r
float fnumber;\r
+ int ok;\r
\r
switch (message) {\r
case WM_INITDIALOG: /* message: initialize dialog box */\r
CheckDlgButton(hDlg, OPT_Autostep, FALSE);\r
}\r
SetLoadOptionEnables(hDlg);\r
+ SetDlgItemInt(hDlg, OPT_elo1, appData.eloThreshold1, FALSE);\r
+ SetDlgItemInt(hDlg, OPT_elo2, appData.eloThreshold2, FALSE);\r
+ SetDlgItemInt(hDlg, OPT_date, appData.dateThreshold, FALSE);\r
+ SetDlgItemInt(hDlg, OPT_Stretch, appData.stretch, FALSE);\r
+ CheckDlgButton(hDlg, OPT_Reversed, appData.ignoreColors);\r
+ CheckDlgButton(hDlg, OPT_Mirror, appData.findMirror);\r
+ switch (appData.searchMode) {\r
+ case 1:\r
+ CheckDlgButton(hDlg, OPT_Exact, TRUE);\r
+ break;\r
+ case 2:\r
+ CheckDlgButton(hDlg, OPT_Subset, TRUE);\r
+ break;\r
+ case 3:\r
+ CheckDlgButton(hDlg, OPT_Struct, TRUE);\r
+ break;\r
+ case 4:\r
+ CheckDlgButton(hDlg, OPT_Material, TRUE);\r
+ break;\r
+ case 5:\r
+ CheckDlgButton(hDlg, OPT_Range, TRUE);\r
+ break;\r
+ case 6:\r
+ CheckDlgButton(hDlg, OPT_Difference, TRUE);\r
+ break;\r
+ }\r
return TRUE;\r
\r
case WM_COMMAND: /* message: received a command */\r
} else {\r
appData.timeDelay = (float) -1.0;\r
}\r
+ appData.eloThreshold1 = GetDlgItemInt(hDlg, OPT_elo1, &ok, FALSE);\r
+ appData.eloThreshold2 = GetDlgItemInt(hDlg, OPT_elo2, &ok, FALSE);\r
+ appData.dateThreshold = GetDlgItemInt(hDlg, OPT_date, &ok, FALSE);\r
+ appData.stretch = GetDlgItemInt(hDlg, OPT_Stretch, &ok, FALSE);\r
+ appData.searchMode = LoadOptionsWhichRadio(hDlg);\r
+ appData.ignoreColors = IsDlgButtonChecked(hDlg, OPT_Reversed);\r
+ appData.findMirror = IsDlgButtonChecked(hDlg, OPT_Mirror);\r
EndDialog(hDlg, TRUE);\r
return TRUE;\r
\r
TimeControl(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
{\r
char buf[MSG_SIZ], *tc;\r
- int mps, increment, odds1, odds2, st;\r
+ int mps, odds1, odds2, st;\r
+ float increment;\r
BOOL ok, ok2;\r
\r
switch (message) {\r
CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));\r
Translate(hDlg, DLG_TimeControl);\r
/* Initialize the dialog items */\r
- if (appData.clockMode && !appData.icsActive) {\r
+ if (/*appData.clockMode &&*/ !appData.icsActive) { // [HGM] even if !clockMode, we could want to set it in tournament dialog\r
if (searchTime) {\r
CheckRadioButton(hDlg, OPT_TCUseMoves, OPT_TCUseFixed,\r
OPT_TCUseFixed);\r
SetDlgItemText(hDlg, OPT_TCTime2, "");\r
SetDlgItemText(hDlg, OPT_TCInc, "");\r
} else {\r
+ int i = appData.timeIncrement;\r
+ if(i == appData.timeIncrement) snprintf(buf, MSG_SIZ, "%d", i);\r
+ else snprintf(buf, MSG_SIZ, "%4.2f", appData.timeIncrement);\r
CheckRadioButton(hDlg, OPT_TCUseMoves, OPT_TCUseFixed,\r
OPT_TCUseInc);\r
SetDlgItemText(hDlg, OPT_TCTime, "");\r
SetDlgItemText(hDlg, OPT_TCMoves, "");\r
SetDlgItemText(hDlg, OPT_TCTime2, appData.timeControl);\r
- SetDlgItemInt(hDlg, OPT_TCInc, appData.timeIncrement, FALSE);\r
+ SetDlgItemText(hDlg, OPT_TCInc, buf);\r
}\r
SetDlgItemInt(hDlg, OPT_TCOdds1, 1, FALSE);\r
SetDlgItemInt(hDlg, OPT_TCOdds2, 1, FALSE);\r
}\r
tc = buf;\r
} else {\r
- increment = GetDlgItemInt(hDlg, OPT_TCInc, &ok, FALSE);\r
+ GetDlgItemText(hDlg, OPT_TCInc, buf, MSG_SIZ);\r
+ ok = (sscanf(buf, "%f%c", &increment, buf) == 1);\r
if (!ok || increment < 0) {\r
MessageBox(hDlg, _("Invalid increment"),\r
_("Option Error"), MB_OK|MB_ICONEXCLAMATION);\r