#endif\r
\r
#include "common.h"\r
-#include "winboard.h"\r
#include "frontend.h"\r
#include "backend.h"\r
+#include "winboard.h"\r
#include "moves.h"\r
#include "wclipbrd.h"\r
-#include "wgamelist.h"\r
-#include "wedittags.h"\r
#include "woptions.h"\r
#include "wsockerr.h"\r
#include "defaults.h"\r
\r
BoardSize boardSize;\r
BOOLEAN chessProgram;\r
-static int boardX, boardY;\r
+//static int boardX, boardY;\r
int minX, minY; // [HGM] placement: volatile limits on upper-left corner\r
static int squareSize, lineGap, minorSize;\r
-static int winWidth, winHeight, winW, winH;\r
+static int winW, winH;\r
static RECT messageRect, whiteRect, blackRect, leftLogoRect, rightLogoRect; // [HGM] logo\r
static int logoHeight = 0;\r
static char messageText[MESSAGE_TEXT_MAX];\r
#define PALETTESIZE 256\r
\r
HINSTANCE hInst; /* current instance */\r
-HWND hwndMain = NULL; /* root window*/\r
-HWND hwndConsole = NULL;\r
BOOLEAN alwaysOnTop = FALSE;\r
RECT boardRect;\r
COLORREF lightSquareColor, darkSquareColor, whitePieceColor, \r
static char *commentText;\r
static int commentIndex;\r
static Boolean editComment = FALSE;\r
-HWND commentDialog = NULL;\r
-int commentUp = FALSE;\r
-static int commentX, commentY, commentH, commentW;\r
\r
-static char *analysisTitle;\r
-static char *analysisText;\r
-HWND analysisDialog = NULL;\r
-BOOLEAN analysisDialogUp = FALSE;\r
-static int analysisX, analysisY, analysisH, analysisW;\r
\r
char errorTitle[MSG_SIZ];\r
char errorMessage[2*MSG_SIZ];\r
int NewGameFRC();\r
int GameListOptions();\r
\r
-HWND moveHistoryDialog = NULL;\r
-BOOLEAN moveHistoryDialogUp = FALSE;\r
-\r
-WindowPlacement wpMoveHistory;\r
+int dummy; // [HGM] for obsolete args\r
\r
+HWND hwndMain = NULL; /* root window*/\r
+HWND hwndConsole = NULL;\r
+HWND commentDialog = NULL;\r
+HWND moveHistoryDialog = NULL;\r
HWND evalGraphDialog = NULL;\r
-BOOLEAN evalGraphDialogUp = FALSE;\r
-\r
-WindowPlacement wpEvalGraph;\r
-\r
HWND engineOutputDialog = NULL;\r
-BOOLEAN engineOutputDialogUp = FALSE;\r
+HWND gameListDialog = NULL;\r
+HWND editTagsDialog = NULL;\r
+\r
+int commentUp = FALSE;\r
\r
+WindowPlacement wpMain;\r
+WindowPlacement wpConsole;\r
+WindowPlacement wpComment;\r
+WindowPlacement wpMoveHistory;\r
+WindowPlacement wpEvalGraph;\r
WindowPlacement wpEngineOutput;\r
WindowPlacement wpGameList;\r
-WindowPlacement wpConsole;\r
-\r
-VOID MoveHistoryPopUp();\r
-VOID MoveHistoryPopDown();\r
-VOID MoveHistorySet( char movelist[][2*MOVE_LEN], int first, int last, int current, ChessProgramStats_Move * pvInfo );\r
-BOOL MoveHistoryIsUp();\r
-\r
-VOID EvalGraphSet( int first, int last, int current, ChessProgramStats_Move * pvInfo );\r
-VOID EvalGraphPopUp();\r
-VOID EvalGraphPopDown();\r
-BOOL EvalGraphIsUp();\r
-\r
-VOID EngineOutputPopUp();\r
-VOID EngineOutputPopDown();\r
-BOOL EngineOutputIsUp();\r
-VOID EngineOutputUpdate( FrontEndProgramStats * stats );\r
+WindowPlacement wpTags;\r
\r
VOID EngineOptionsPopup(); // [HGM] settings\r
\r
InitBackEnd2();\r
\r
/* Make the window visible; update its client area; and return "success" */\r
- EnsureOnScreen(&boardX, &boardY, minX, minY);\r
+ EnsureOnScreen(&wpMain.x, &wpMain.y, minX, minY);\r
wp.length = sizeof(WINDOWPLACEMENT);\r
wp.flags = 0;\r
wp.showCmd = nCmdShow;\r
wp.ptMaxPosition.x = wp.ptMaxPosition.y = 0;\r
- wp.rcNormalPosition.left = boardX;\r
- wp.rcNormalPosition.right = boardX + winWidth;\r
- wp.rcNormalPosition.top = boardY;\r
- wp.rcNormalPosition.bottom = boardY + winHeight;\r
+ wp.rcNormalPosition.left = wpMain.x;\r
+ wp.rcNormalPosition.right = wpMain.x + wpMain.width;\r
+ wp.rcNormalPosition.top = wpMain.y;\r
+ wp.rcNormalPosition.bottom = wpMain.y + wpMain.height;\r
SetWindowPlacement(hwndMain, &wp);\r
\r
if(!appData.noGUI) SetWindowPos(hwndMain, alwaysOnTop ? HWND_TOPMOST : HWND_NOTOPMOST,\r
// [HGM] placement: put all window layouts last in ini file, but man X,Y before all others\r
{ "minX", ArgZ, (LPVOID) &minX, FALSE }, // [HGM] placement: to make suer auxialary windows can be placed\r
{ "minY", ArgZ, (LPVOID) &minY, FALSE },\r
- { "winWidth", ArgInt, (LPVOID) &winWidth, TRUE }, // [HGM] placement: dummies to remember right & bottom\r
- { "winHeight", ArgInt, (LPVOID) &winHeight, TRUE }, // for attaching auxiliary windows to them\r
- { "x", ArgInt, (LPVOID) &boardX, TRUE },\r
- { "y", ArgInt, (LPVOID) &boardY, TRUE },\r
+ { "winWidth", ArgInt, (LPVOID) &wpMain.width, TRUE }, // [HGM] placement: dummies to remember right & bottom\r
+ { "winHeight", ArgInt, (LPVOID) &wpMain.height, TRUE }, // for attaching auxiliary windows to them\r
+ { "x", ArgInt, (LPVOID) &wpMain.x, TRUE },\r
+ { "y", ArgInt, (LPVOID) &wpMain.y, TRUE },\r
{ "icsX", ArgX, (LPVOID) &wpConsole.x, TRUE },\r
{ "icsY", ArgY, (LPVOID) &wpConsole.y, TRUE },\r
{ "icsW", ArgInt, (LPVOID) &wpConsole.width, TRUE },\r
{ "icsH", ArgInt, (LPVOID) &wpConsole.height, TRUE },\r
- { "analysisX", ArgX, (LPVOID) &analysisX, FALSE }, // [HGM] placement: analysis window no longer exists\r
- { "analysisY", ArgY, (LPVOID) &analysisY, FALSE }, // provided for compatibility with old ini files\r
- { "analysisW", ArgInt, (LPVOID) &analysisW, FALSE },\r
- { "analysisH", ArgInt, (LPVOID) &analysisH, FALSE },\r
- { "commentX", ArgX, (LPVOID) &commentX, TRUE },\r
- { "commentY", ArgY, (LPVOID) &commentY, TRUE },\r
- { "commentW", ArgInt, (LPVOID) &commentW, TRUE },\r
- { "commentH", ArgInt, (LPVOID) &commentH, TRUE },\r
- { "tagsX", ArgX, (LPVOID) &editTagsX, TRUE },\r
- { "tagsY", ArgY, (LPVOID) &editTagsY, TRUE },\r
- { "tagsW", ArgInt, (LPVOID) &editTagsW, TRUE },\r
- { "tagsH", ArgInt, (LPVOID) &editTagsH, TRUE },\r
+ { "analysisX", ArgX, (LPVOID) &dummy, FALSE }, // [HGM] placement: analysis window no longer exists\r
+ { "analysisY", ArgY, (LPVOID) &dummy, FALSE }, // provided for compatibility with old ini files\r
+ { "analysisW", ArgInt, (LPVOID) &dummy, FALSE },\r
+ { "analysisH", ArgInt, (LPVOID) &dummy, FALSE },\r
+ { "commentX", ArgX, (LPVOID) &wpComment.x, TRUE },\r
+ { "commentY", ArgY, (LPVOID) &wpComment.y, TRUE },\r
+ { "commentW", ArgInt, (LPVOID) &wpComment.width, TRUE },\r
+ { "commentH", ArgInt, (LPVOID) &wpComment.height, TRUE },\r
+ { "tagsX", ArgX, (LPVOID) &wpTags.x, TRUE },\r
+ { "tagsY", ArgY, (LPVOID) &wpTags.y, TRUE },\r
+ { "tagsW", ArgInt, (LPVOID) &wpTags.width, TRUE },\r
+ { "tagsH", ArgInt, (LPVOID) &wpTags.height, TRUE },\r
{ "gameListX", ArgX, (LPVOID) &wpGameList.x, TRUE },\r
{ "gameListY", ArgY, (LPVOID) &wpGameList.y, TRUE },\r
{ "gameListW", ArgInt, (LPVOID) &wpGameList.width, TRUE },\r
break;\r
\r
case ArgX:\r
- *(int *) ad->argLoc = atoi(argValue) + boardX; // [HGM] placement: translate stored relative to absolute \r
+ *(int *) ad->argLoc = atoi(argValue) + wpMain.x; // [HGM] placement: translate stored relative to absolute \r
break;\r
\r
case ArgY:\r
- *(int *) ad->argLoc = atoi(argValue) + boardY; // (this is really kludgey, it should be done where used...)\r
+ *(int *) ad->argLoc = atoi(argValue) + wpMain.y; // (this is really kludgey, it should be done where used...)\r
break;\r
\r
case ArgZ:\r
*(int *) ad->argLoc = atoi(argValue);\r
- EnsureOnScreen(&boardX, &boardY, minX, minY); \r
+ EnsureOnScreen(&wpMain.x, &wpMain.y, minX, minY); \r
break;\r
\r
case ArgFloat:\r
dcb.StopBits = ONESTOPBIT;\r
settingsFileName = SETTINGS_FILE;\r
saveSettingsOnExit = TRUE;\r
- boardX = CW_USEDEFAULT;\r
- boardY = CW_USEDEFAULT;\r
- analysisX = CW_USEDEFAULT; \r
- analysisY = CW_USEDEFAULT; \r
- analysisW = CW_USEDEFAULT;\r
- analysisH = CW_USEDEFAULT;\r
- commentX = CW_USEDEFAULT; \r
- commentY = CW_USEDEFAULT; \r
- commentW = CW_USEDEFAULT;\r
- commentH = CW_USEDEFAULT;\r
- editTagsX = CW_USEDEFAULT; \r
- editTagsY = CW_USEDEFAULT; \r
- editTagsW = CW_USEDEFAULT;\r
- editTagsH = CW_USEDEFAULT;\r
+ wpMain.x = CW_USEDEFAULT;\r
+ wpMain.y = CW_USEDEFAULT;\r
+ wpComment.x = CW_USEDEFAULT; \r
+ wpComment.y = CW_USEDEFAULT; \r
+ wpComment.width = CW_USEDEFAULT;\r
+ wpComment.height = CW_USEDEFAULT;\r
+ wpTags.x = CW_USEDEFAULT; \r
+ wpTags.y = CW_USEDEFAULT; \r
+ wpTags.width = CW_USEDEFAULT;\r
+ wpTags.height = CW_USEDEFAULT;\r
icsTextMenuString = ICS_TEXT_MENU_DEFAULT;\r
icsNames = ICS_NAMES;\r
firstChessProgramNames = FCP_NAMES;\r
MF_CHECKED : MF_UNCHECKED));\r
}\r
\r
+// [HGM] args: these two cases taken out to stay in front-end\r
+ void SaveFontArg(FILE *f, ArgDescriptor *ad)\r
+ {\r
+ int bs;\r
+ for (bs=0; bs<NUM_SIZES; bs++) {\r
+ MyFontParams *mfp = &font[bs][(int) ad->argLoc]->mfp;\r
+ fprintf(f, "/size=%s ", sizeInfo[bs].name);\r
+ fprintf(f, "/%s=\"%s:%g%s%s%s%s%sc%d\"\n",\r
+ ad->argName, mfp->faceName, mfp->pointSize,\r
+ mfp->bold || mfp->italic || mfp->underline || mfp->strikeout ? " " : "",\r
+ mfp->bold ? "b" : "",\r
+ mfp->italic ? "i" : "",\r
+ mfp->underline ? "u" : "",\r
+ mfp->strikeout ? "s" : "",\r
+ (int)mfp->charset);\r
+ }\r
+ }\r
+\r
+ void SaveAttribsArg(FILE *f, ArgDescriptor *ad)\r
+ {\r
+ MyTextAttribs* ta = &textAttribs[(ColorClass)ad->argLoc];\r
+ fprintf(f, "/%s=\"%s%s%s%s%s#%02lx%02lx%02lx\"\n", ad->argName,\r
+ (ta->effects & CFE_BOLD) ? "b" : "",\r
+ (ta->effects & CFE_ITALIC) ? "i" : "",\r
+ (ta->effects & CFE_UNDERLINE) ? "u" : "",\r
+ (ta->effects & CFE_STRIKEOUT) ? "s" : "",\r
+ (ta->effects) ? " " : "",\r
+ ta->color&0xff, (ta->color >> 8)&0xff, (ta->color >> 16)&0xff);\r
+ }\r
+\r
+int MainWindowUp()\r
+{ // [HGM] args: allows testing if main window is realized from back-end\r
+ return hwndMain != NULL;\r
+}\r
\r
VOID\r
SaveSettings(char* name)\r
{\r
FILE *f;\r
ArgDescriptor *ad;\r
- WINDOWPLACEMENT wp;\r
char dir[MSG_SIZ];\r
\r
- if (!hwndMain) return;\r
+ if (!MainWindowUp()) return;\r
\r
GetCurrentDirectory(MSG_SIZ, dir);\r
SetCurrentDirectory(installDir);\r
fprintf(f, "; Use a shortcut, an @indirection file, or a .bat file instead.\n");\r
fprintf(f, ";\n");\r
\r
- wp.length = sizeof(WINDOWPLACEMENT);\r
- GetWindowPlacement(hwndMain, &wp);\r
- boardX = wp.rcNormalPosition.left;\r
- boardY = wp.rcNormalPosition.top;\r
-\r
- if (hwndConsole) {\r
- GetWindowPlacement(hwndConsole, &wp);\r
- wpConsole.x = wp.rcNormalPosition.left;\r
- wpConsole.y = wp.rcNormalPosition.top;\r
- wpConsole.width = wp.rcNormalPosition.right - wp.rcNormalPosition.left;\r
- wpConsole.height = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;\r
- }\r
-\r
- if (analysisDialog) {\r
- GetWindowPlacement(analysisDialog, &wp);\r
- analysisX = wp.rcNormalPosition.left;\r
- analysisY = wp.rcNormalPosition.top;\r
- analysisW = wp.rcNormalPosition.right - wp.rcNormalPosition.left;\r
- analysisH = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;\r
- }\r
-\r
- if (commentDialog) {\r
- GetWindowPlacement(commentDialog, &wp);\r
- commentX = wp.rcNormalPosition.left;\r
- commentY = wp.rcNormalPosition.top;\r
- commentW = wp.rcNormalPosition.right - wp.rcNormalPosition.left;\r
- commentH = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;\r
- }\r
-\r
- if (editTagsDialog) {\r
- GetWindowPlacement(editTagsDialog, &wp);\r
- editTagsX = wp.rcNormalPosition.left;\r
- editTagsY = wp.rcNormalPosition.top;\r
- editTagsW = wp.rcNormalPosition.right - wp.rcNormalPosition.left;\r
- editTagsH = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;\r
- }\r
-\r
- if (gameListDialog) {\r
- GetWindowPlacement(gameListDialog, &wp);\r
- wpGameList.x = wp.rcNormalPosition.left;\r
- wpGameList.y = wp.rcNormalPosition.top;\r
- wpGameList.width = wp.rcNormalPosition.right - wp.rcNormalPosition.left;\r
- wpGameList.height = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;\r
- }\r
+ GetActualPlacement(hwndMain, &wpMain);\r
+ GetActualPlacement(hwndConsole, &wpConsole);\r
+ GetActualPlacement(commentDialog, &wpComment);\r
+ GetActualPlacement(editTagsDialog, &wpTags);\r
+ GetActualPlacement(gameListDialog, &wpGameList);\r
\r
/* [AS] Move history */\r
wpMoveHistory.visible = MoveHistoryIsUp();\r
- \r
- if( moveHistoryDialog ) {\r
- GetWindowPlacement(moveHistoryDialog, &wp);\r
- wpMoveHistory.x = wp.rcNormalPosition.left;\r
- wpMoveHistory.y = wp.rcNormalPosition.top;\r
- wpMoveHistory.width = wp.rcNormalPosition.right - wp.rcNormalPosition.left;\r
- wpMoveHistory.height = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;\r
- }\r
+ GetActualPlacement(moveHistoryDialog, &wpMoveHistory);\r
\r
/* [AS] Eval graph */\r
wpEvalGraph.visible = EvalGraphIsUp();\r
-\r
- if( evalGraphDialog ) {\r
- GetWindowPlacement(evalGraphDialog, &wp);\r
- wpEvalGraph.x = wp.rcNormalPosition.left;\r
- wpEvalGraph.y = wp.rcNormalPosition.top;\r
- wpEvalGraph.width = wp.rcNormalPosition.right - wp.rcNormalPosition.left;\r
- wpEvalGraph.height = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;\r
- }\r
+ GetActualPlacement(evalGraphDialog, &wpEvalGraph);\r
\r
/* [AS] Engine output */\r
wpEngineOutput.visible = EngineOutputIsUp();\r
-\r
- if( engineOutputDialog ) {\r
- GetWindowPlacement(engineOutputDialog, &wp);\r
- wpEngineOutput.x = wp.rcNormalPosition.left;\r
- wpEngineOutput.y = wp.rcNormalPosition.top;\r
- wpEngineOutput.width = wp.rcNormalPosition.right - wp.rcNormalPosition.left;\r
- wpEngineOutput.height = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;\r
- }\r
+ GetActualPlacement(engineOutputDialog, &wpEngineOutput);\r
\r
for (ad = argDescriptors; ad->argName != NULL; ad++) {\r
if (!ad->save) continue;\r
fprintf(f, "/%s=%d\n", ad->argName, *(int *)ad->argLoc);\r
break;\r
case ArgX:\r
- fprintf(f, "/%s=%d\n", ad->argName, *(int *)ad->argLoc - boardX); // [HGM] placement: stor relative value\r
+ fprintf(f, "/%s=%d\n", ad->argName, *(int *)ad->argLoc - wpMain.x); // [HGM] placement: stor relative value\r
break;\r
case ArgY:\r
- fprintf(f, "/%s=%d\n", ad->argName, *(int *)ad->argLoc - boardY);\r
+ fprintf(f, "/%s=%d\n", ad->argName, *(int *)ad->argLoc - wpMain.y);\r
break;\r
case ArgFloat:\r
fprintf(f, "/%s=%g\n", ad->argName, *(float *)ad->argLoc);\r
}\r
break;\r
case ArgAttribs:\r
- {\r
- MyTextAttribs* ta = &textAttribs[(ColorClass)ad->argLoc];\r
- fprintf(f, "/%s=\"%s%s%s%s%s#%02lx%02lx%02lx\"\n", ad->argName,\r
- (ta->effects & CFE_BOLD) ? "b" : "",\r
- (ta->effects & CFE_ITALIC) ? "i" : "",\r
- (ta->effects & CFE_UNDERLINE) ? "u" : "",\r
- (ta->effects & CFE_STRIKEOUT) ? "s" : "",\r
- (ta->effects) ? " " : "",\r
- ta->color&0xff, (ta->color >> 8)&0xff, (ta->color >> 16)&0xff);\r
- }\r
+ SaveAttribsArg(f, ad);\r
break;\r
case ArgFilename:\r
if (strchr(*(char **)ad->argLoc, '\"')) {\r
sizeInfo[*(BoardSize *)ad->argLoc].name);\r
break;\r
case ArgFont:\r
- {\r
- int bs;\r
- for (bs=0; bs<NUM_SIZES; bs++) {\r
- MyFontParams *mfp = &font[bs][(int) ad->argLoc]->mfp;\r
- fprintf(f, "/size=%s ", sizeInfo[bs].name);\r
- fprintf(f, "/%s=\"%s:%g%s%s%s%s%sc%d\"\n",\r
- ad->argName, mfp->faceName, mfp->pointSize,\r
- mfp->bold || mfp->italic || mfp->underline || mfp->strikeout ? " " : "",\r
- mfp->bold ? "b" : "",\r
- mfp->italic ? "i" : "",\r
- mfp->underline ? "u" : "",\r
- mfp->strikeout ? "s" : "",\r
- (int)mfp->charset);\r
- }\r
- }\r
+ SaveFontArg(f, ad);\r
break;\r
case ArgCommSettings:\r
PrintCommSettings(f, ad->argName, (DCB *)ad->argLoc);\r
}\r
else if( strstr(lf.lfFaceName,"GC2004D") != NULL ) {\r
/* Good Companion (Some characters get warped as literal :-( */\r
- char s[] = "1cmWG0ñueOS¯®oYI23wgQU";\r
+ char s[] = "1cmWG0??S??oYI23wgQU";\r
s[0]=0xB9; s[1]=0xA9; s[6]=0xB1; s[11]=0xBB; s[12]=0xAB; s[17]=0xB3;\r
SetCharTable(pieceToFontChar, s);\r
}\r
/* [HGM] call with -2 uses old size (for if nr of files, ranks changes) */\r
if(boardSize == (BoardSize)(-2) ) boardSize = oldBoardSize;\r
\r
- oldRect.left = boardX; //[HGM] placement: remember previous window params\r
- oldRect.top = boardY;\r
- oldRect.right = boardX + winWidth;\r
- oldRect.bottom = boardY + winHeight;\r
+ oldRect.left = wpMain.x; //[HGM] placement: remember previous window params\r
+ oldRect.top = wpMain.y;\r
+ oldRect.right = wpMain.x + wpMain.width;\r
+ oldRect.bottom = wpMain.y + wpMain.height;\r
\r
tinyLayout = sizeInfo[boardSize].tinyLayout;\r
smallLayout = sizeInfo[boardSize].smallLayout;\r
winH = 2 * GetSystemMetrics(SM_CYFRAME) + GetSystemMetrics(SM_CYMENU) +\r
GetSystemMetrics(SM_CYCAPTION) + boardRect.bottom + OUTER_MARGIN;\r
if(suppressVisibleEffects) return; // [HGM] when called for filling sizeInfo only\r
- winWidth = winW; // [HGM] placement: set through temporary which can used by initial sizing choice\r
- winHeight = winH; // without disturbing window attachments\r
+ wpMain.width = winW; // [HGM] placement: set through temporary which can used by initial sizing choice\r
+ wpMain.height = winH; // without disturbing window attachments\r
GetWindowRect(hwndMain, &wrect);\r
- SetWindowPos(hwndMain, NULL, 0, 0, winWidth, winHeight,\r
+ SetWindowPos(hwndMain, NULL, 0, 0, wpMain.width, wpMain.height,\r
SWP_NOCOPYBITS|SWP_NOZORDER|SWP_NOMOVE);\r
\r
// [HGM] placement: let attached windows follow size change.\r
- ReattachAfterSize( &oldRect, winWidth, winHeight, moveHistoryDialog, &wpMoveHistory );\r
- ReattachAfterSize( &oldRect, winWidth, winHeight, evalGraphDialog, &wpEvalGraph );\r
- ReattachAfterSize( &oldRect, winWidth, winHeight, engineOutputDialog, &wpEngineOutput );\r
- ReattachAfterSize( &oldRect, winWidth, winHeight, gameListDialog, &wpGameList );\r
- ReattachAfterSize( &oldRect, winWidth, winHeight, hwndConsole, &wpConsole );\r
+ ReattachAfterSize( &oldRect, wpMain.width, wpMain.height, moveHistoryDialog, &wpMoveHistory );\r
+ ReattachAfterSize( &oldRect, wpMain.width, wpMain.height, evalGraphDialog, &wpEvalGraph );\r
+ ReattachAfterSize( &oldRect, wpMain.width, wpMain.height, engineOutputDialog, &wpEngineOutput );\r
+ ReattachAfterSize( &oldRect, wpMain.width, wpMain.height, gameListDialog, &wpGameList );\r
+ ReattachAfterSize( &oldRect, wpMain.width, wpMain.height, hwndConsole, &wpConsole );\r
\r
/* compensate if menu bar wrapped */\r
GetClientRect(hwndMain, &crect);\r
offby = boardRect.bottom + OUTER_MARGIN - crect.bottom;\r
- winHeight += offby;\r
+ wpMain.height += offby;\r
switch (flags) {\r
case WMSZ_TOPLEFT:\r
SetWindowPos(hwndMain, NULL, \r
- wrect.right - winWidth, wrect.bottom - winHeight, \r
- winWidth, winHeight, SWP_NOCOPYBITS|SWP_NOZORDER);\r
+ wrect.right - wpMain.width, wrect.bottom - wpMain.height, \r
+ wpMain.width, wpMain.height, SWP_NOCOPYBITS|SWP_NOZORDER);\r
break;\r
\r
case WMSZ_TOPRIGHT:\r
case WMSZ_TOP:\r
SetWindowPos(hwndMain, NULL, \r
- wrect.left, wrect.bottom - winHeight, \r
- winWidth, winHeight, SWP_NOCOPYBITS|SWP_NOZORDER);\r
+ wrect.left, wrect.bottom - wpMain.height, \r
+ wpMain.width, wpMain.height, SWP_NOCOPYBITS|SWP_NOZORDER);\r
break;\r
\r
case WMSZ_BOTTOMLEFT:\r
case WMSZ_LEFT:\r
SetWindowPos(hwndMain, NULL, \r
- wrect.right - winWidth, wrect.top, \r
- winWidth, winHeight, SWP_NOCOPYBITS|SWP_NOZORDER);\r
+ wrect.right - wpMain.width, wrect.top, \r
+ wpMain.width, wpMain.height, SWP_NOCOPYBITS|SWP_NOZORDER);\r
break;\r
\r
case WMSZ_BOTTOMRIGHT:\r
case WMSZ_BOTTOM:\r
case WMSZ_RIGHT:\r
default:\r
- SetWindowPos(hwndMain, NULL, 0, 0, winWidth, winHeight,\r
+ SetWindowPos(hwndMain, NULL, 0, 0, wpMain.width, wpMain.height,\r
SWP_NOCOPYBITS|SWP_NOZORDER|SWP_NOMOVE);\r
break;\r
}\r
RECT rcMain;\r
\r
// GetWindowRect( hwnd, &rcMain ); //[HGM] sticky: in XP this returned new position, not old\r
- rcMain.left = boardX; // replace by these 4 lines to reconstruct old rect\r
- rcMain.right = boardX + winWidth;\r
- rcMain.top = boardY;\r
- rcMain.bottom = boardY + winHeight;\r
+ rcMain.left = wpMain.x; // replace by these 4 lines to reconstruct old rect\r
+ rcMain.right = wpMain.x + wpMain.width;\r
+ rcMain.top = wpMain.y;\r
+ rcMain.bottom = wpMain.y + wpMain.height;\r
\r
ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, moveHistoryDialog, &wpMoveHistory );\r
ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, evalGraphDialog, &wpEvalGraph );\r
ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, engineOutputDialog, &wpEngineOutput );\r
ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, gameListDialog, &wpGameList );\r
ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, hwndConsole, &wpConsole );\r
- boardX = lpwp->x;\r
- boardY = lpwp->y;\r
+ wpMain.x = lpwp->x;\r
+ wpMain.y = lpwp->y;\r
}\r
}\r
break;\r
GetClientRect(hDlg, &rect);\r
sizeX = rect.right;\r
sizeY = rect.bottom;\r
- if (commentX != CW_USEDEFAULT && commentY != CW_USEDEFAULT &&\r
- commentW != CW_USEDEFAULT && commentH != CW_USEDEFAULT) {\r
+ if (wpComment.x != CW_USEDEFAULT && wpComment.y != CW_USEDEFAULT &&\r
+ wpComment.width != CW_USEDEFAULT && wpComment.height != CW_USEDEFAULT) {\r
WINDOWPLACEMENT wp;\r
- EnsureOnScreen(&commentX, &commentY, 0, 0);\r
+ EnsureOnScreen(&wpComment.x, &wpComment.y, 0, 0);\r
wp.length = sizeof(WINDOWPLACEMENT);\r
wp.flags = 0;\r
wp.showCmd = SW_SHOW;\r
wp.ptMaxPosition.x = wp.ptMaxPosition.y = 0;\r
- wp.rcNormalPosition.left = commentX;\r
- wp.rcNormalPosition.right = commentX + commentW;\r
- wp.rcNormalPosition.top = commentY;\r
- wp.rcNormalPosition.bottom = commentY + commentH;\r
+ wp.rcNormalPosition.left = wpComment.x;\r
+ wp.rcNormalPosition.right = wpComment.x + wpComment.width;\r
+ wp.rcNormalPosition.top = wpComment.y;\r
+ wp.rcNormalPosition.bottom = wpComment.y + wpComment.height;\r
SetWindowPlacement(hDlg, &wp);\r
\r
GetClientRect(hDlg, &rect);\r
case WM_INITDIALOG:\r
GetWindowRect(hDlg, &rChild);\r
\r
- SetWindowPos(hDlg, NULL, boardX, boardY-height, winWidth, height,\r
+ SetWindowPos(hDlg, NULL, wpMain.x, wpMain.y-height, wpMain.width, height,\r
SWP_NOZORDER);\r
\r
/* \r
// [HGM] Chessknight's change 2004-07-13\r
else { /* Determine Defaults */\r
WINDOWPLACEMENT wp;\r
- wpConsole.x = winWidth + 1;\r
- wpConsole.y = boardY;\r
- wpConsole.width = screenWidth - winWidth;\r
- wpConsole.height = winHeight;\r
+ wpConsole.x = wpMain.width + 1;\r
+ wpConsole.y = wpMain.y;\r
+ wpConsole.width = screenWidth - wpMain.width;\r
+ wpConsole.height = wpMain.height;\r
EnsureOnScreen(&wpConsole.x, &wpConsole.y, 0, 0);\r
wp.length = sizeof(WINDOWPLACEMENT);\r
wp.flags = 0;\r
(UINT) 2000, NULL);\r
}\r
\r
-LRESULT CALLBACK\r
-AnalysisDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
-{\r
- static HANDLE hwndText;\r
- RECT rect;\r
- static int sizeX, sizeY;\r
- int newSizeX, newSizeY, flags;\r
- MINMAXINFO *mmi;\r
-\r
- switch (message) {\r
- case WM_INITDIALOG: /* message: initialize dialog box */\r
- /* Initialize the dialog items */\r
- hwndText = GetDlgItem(hDlg, OPT_AnalysisText);\r
- SetWindowText(hDlg, analysisTitle);\r
- SetDlgItemText(hDlg, OPT_AnalysisText, analysisText);\r
- /* Size and position the dialog */\r
- if (!analysisDialog) {\r
- analysisDialog = hDlg;\r
- flags = SWP_NOZORDER;\r
- GetClientRect(hDlg, &rect);\r
- sizeX = rect.right;\r
- sizeY = rect.bottom;\r
- if (analysisX != CW_USEDEFAULT && analysisY != CW_USEDEFAULT &&\r
- analysisW != CW_USEDEFAULT && analysisH != CW_USEDEFAULT) {\r
- WINDOWPLACEMENT wp;\r
- EnsureOnScreen(&analysisX, &analysisY, 0, 0);\r
- wp.length = sizeof(WINDOWPLACEMENT);\r
- wp.flags = 0;\r
- wp.showCmd = SW_SHOW;\r
- wp.ptMaxPosition.x = wp.ptMaxPosition.y = 0;\r
- wp.rcNormalPosition.left = analysisX;\r
- wp.rcNormalPosition.right = analysisX + analysisW;\r
- wp.rcNormalPosition.top = analysisY;\r
- wp.rcNormalPosition.bottom = analysisY + analysisH;\r
- SetWindowPlacement(hDlg, &wp);\r
-\r
- GetClientRect(hDlg, &rect);\r
- newSizeX = rect.right;\r
- newSizeY = rect.bottom;\r
- ResizeEditPlusButtons(hDlg, hwndText, sizeX, sizeY,\r
- newSizeX, newSizeY);\r
- sizeX = newSizeX;\r
- sizeY = newSizeY;\r
- }\r
- }\r
- return FALSE;\r
-\r
- case WM_COMMAND: /* message: received a command */\r
- switch (LOWORD(wParam)) {\r
- case IDCANCEL:\r
- if (appData.icsActive && appData.icsEngineAnalyze) { /* [DM] icsEngineAnalyze */\r
- ExitAnalyzeMode();\r
- ModeHighlight();\r
- return TRUE;\r
- }\r
- EditGameEvent();\r
- return TRUE;\r
- default:\r
- break;\r
- }\r
- break;\r
-\r
- case WM_SIZE:\r
- newSizeX = LOWORD(lParam);\r
- newSizeY = HIWORD(lParam);\r
- ResizeEditPlusButtons(hDlg, hwndText, sizeX, sizeY, newSizeX, newSizeY);\r
- sizeX = newSizeX;\r
- sizeY = newSizeY;\r
- break;\r
-\r
- case WM_GETMINMAXINFO:\r
- /* Prevent resizing window too small */\r
- mmi = (MINMAXINFO *) lParam;\r
- mmi->ptMinTrackSize.x = 100;\r
- mmi->ptMinTrackSize.y = 100;\r
- break;\r
- }\r
- return FALSE;\r
-}\r
-\r
VOID\r
SetHighlights(int fromX, int fromY, int toX, int toY)\r
{\r