#define ABOUTBOX -1 /* not sure why these are needed */\r
#define ABOUTBOX2 -1\r
\r
-int dialogItems[][41 ] = {\r
+int dialogItems[][42] = {\r
{ ABOUTBOX, IDOK, OPT_MESS, 400 }, \r
{ DLG_TimeControl, IDC_Babble, OPT_TCUseMoves, OPT_TCUseInc, OPT_TCUseFixed, \r
OPT_TCtext1, OPT_TCtext2, OPT_TCitext1, OPT_TCitext2, OPT_TCftext, GPB_Factors, IDC_Factor1, IDC_Factor2, IDOK, IDCANCEL }, \r
info.dwTypeData = buf;\r
info.cch = sizeof(buf);\r
GetMenuItemInfo(subMenu, j, TRUE, &info);\r
- if(i < 10) {
+ if(i < 10) {\r
if(menuText[i][j]) safeStrCpy(buf, menuText[i][j], sizeof(buf)/sizeof(buf[0]) );\r
else menuText[i][j] = strdup(buf); // remember original on first change\r
}\r
\r
#endif\r
\r
+#define IDM_RecentEngines 3000\r
+\r
+void\r
+RecentEngineMenu (char *s)\r
+{\r
+ if(appData.icsActive) return;\r
+ if(appData.recentEngines > 0 && *s) { // feature is on, and list non-empty\r
+ HMENU mainMenu = GetMenu(hwndMain);\r
+ HMENU subMenu = GetSubMenu(mainMenu, 5); // Engine menu\r
+ int i=IDM_RecentEngines;\r
+ recentEngines = strdup(appData.recentEngineList); // remember them as they are in menu\r
+ AppendMenu(subMenu, MF_SEPARATOR, (UINT_PTR) 0, NULL);\r
+ while(*s) {\r
+ char *p = strchr(s, '\n');\r
+ if(p == NULL) return; // malformed!\r
+ *p = NULLCHAR;\r
+ AppendMenu(subMenu, MF_ENABLED|MF_STRING|MF_UNCHECKED, (UINT_PTR) i++, (LPCTSTR) s);\r
+ *p = '\n';\r
+ s = p+1;\r
+ }\r
+ }\r
+}\r
+\r
+\r
typedef struct {\r
char *name;\r
int squareSize;\r
}\r
\r
InitDrawingSizes(boardSize, 0);\r
+ RecentEngineMenu(appData.recentEngineList);\r
InitMenuChecks();\r
buttonCount = GetSystemMetrics(SM_CMOUSEBUTTONS);\r
\r
}\r
break;\r
case 2:\r
- SetCapture(hwndMain);
+ SetCapture(hwndMain);\r
break;\r
case 1:\r
hmenu = LoadMenu(hInst, "DropPieceMenu");\r
break;\r
\r
default:\r
+ if(wmId >= IDM_RecentEngines && wmId < IDM_RecentEngines + appData.recentEngines)\r
+ RecentEngineEvent(wmId - IDM_RecentEngines);\r
+ else\r
if(wmId > IDM_English && wmId < IDM_English+20) {\r
LoadLanguageFile(languageFile[wmId - IDM_English - 1]);\r
TranslateMenus(0);\r
safeStrCpy(buf, "/fcp=", sizeof(buf)/sizeof(buf[0]) );\r
GetDlgItemText(hDlg, OPT_ChessEngineName, buf + strlen(buf), sizeof(buf) - strlen(buf));\r
p = buf;\r
+ comboLine = strdup(p+5); // [HGM] recent: remember complete line of first combobox\r
ParseArgs(StringGet, &p);\r
safeStrCpy(buf, singleList ? "/fcp=" : "/scp=", sizeof(buf)/sizeof(buf[0]) );\r
GetDlgItemText(hDlg, OPT_SecondChessEngineName, buf + strlen(buf), sizeof(buf) - strlen(buf));\r
- p = buf;
+ p = buf;\r
SwapEngines(singleList); // temporarily swap first and second, to load a second 'first', ...\r
ParseArgs(StringGet, &p);\r
SwapEngines(singleList); // ... and then make it 'second'\r
\r
case WM_COMMAND:\r
switch (LOWORD(wParam)) {\r
- case IDOK:
+ case IDOK:\r
\r
shiftKey = GetKeyState(VK_SHIFT) < 0; // [HGM] remember last shift status\r
- GetDlgItemText(hDlg, OPT_Move, move, sizeof(move));
+ GetDlgItemText(hDlg, OPT_Move, move, sizeof(move));\r
TypeInDoneEvent(move);\r
EndDialog(hDlg, TRUE);\r
return TRUE;\r
HFONT oldFont;\r
RECT rect;\r
\r
- if(copyNumber > 1)
+ if(copyNumber > 1)\r
snprintf(buf, sizeof(buf)/sizeof(buf[0]),"%d", copyNumber); else buf[0] = 0;\r
\r
oldFg = SetTextColor(hdc, RGB(255, 255, 255)); /* white */\r
if (len > remain) len = remain;\r
strncat(messageText, str2, len);\r
}\r
- messageText[MESSAGE_TEXT_MAX - 1] = NULLCHAR;
- safeStrCpy(lastMsg, messageText, MSG_SIZ);
+ messageText[MESSAGE_TEXT_MAX - 1] = NULLCHAR;\r
+ safeStrCpy(lastMsg, messageText, MSG_SIZ);\r
\r
if (hwndMain == NULL || IsIconic(hwndMain)) return;\r
\r