* Massachusetts. \r
*\r
* Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,\r
- * 2007, 2008, 2009 Free Software Foundation, Inc.\r
+ * 2007, 2008, 2009, 2010 Free Software Foundation, Inc.\r
*\r
* Enhancements Copyright 2005 Alessandro Scotti\r
*\r
void AnimateAtomicCapture(int fromX, int fromY, int toX, int toY, int nFrames);\r
void DisplayMove P((int moveNumber));\r
Boolean ParseFEN P((Board board, int *blackPlaysFirst, char *fen));\r
-void ChatPopUp P(());\r
+void ChatPopUp P((char *s));\r
typedef struct {\r
ChessSquare piece; \r
POINT pos; /* window coordinates of current pos */\r
\r
void DrawSeekDot(int x, int y, int color)\r
{\r
+ int square = color & 0x80;\r
+ color &= 0x7F;\r
HBRUSH oldBrush = SelectObject(hdcSeek, \r
color == 0 ? markerBrush : color == 1 ? darkSquareBrush : explodeBrush);\r
+ if(square)\r
+ Rectangle(hdcSeek, boardRect.left+x - squareSize/9, boardRect.top+y - squareSize/9,\r
+ boardRect.left+x + squareSize/9, boardRect.top+y + squareSize/9);\r
+ else\r
Ellipse(hdcSeek, boardRect.left+x - squareSize/8, boardRect.top+y - squareSize/8,\r
boardRect.left+x + squareSize/8, boardRect.top+y + squareSize/8);\r
SelectObject(hdcSeek, oldBrush);\r
break;\r
\r
case WM_MOUSEMOVE:\r
- if(SeekGraphClick(Press, pt.x - boardRect.left, pt.y - boardRect.top, TRUE)) break;\r
+ if(SeekGraphClick(Press, pt.x - boardRect.left, pt.y - boardRect.top, 1)) break;\r
MovePV(pt.x - boardRect.left, pt.y - boardRect.top, boardRect.bottom - boardRect.top);\r
if ((appData.animateDragging || appData.highlightDragging)\r
&& (wParam & MK_LBUTTON)\r
break;\r
\r
case IDM_NewChat:\r
- ChatPopUp();\r
+ ChatPopUp(NULL);\r
break;\r
\r
case IDM_CopyPosition:\r
StopExaminingEvent();\r
break;\r
\r
+ case IDM_Upload:\r
+ UploadGameEvent();\r
+ break;\r
+\r
case IDM_TypeInMove:\r
PopUpMoveDialog('\000');\r
break;\r
while (e->item) {\r
if (strcmp(e->item, "-") == 0) {\r
AppendMenu(h, MF_SEPARATOR, 0, 0);\r
- } else {\r
+ } else { // [HGM] re-written a bit to use only one AppendMenu call for both cases (| or no |)\r
+ int flags = MF_STRING, j = 0;\r
if (e->item[0] == '|') {\r
- AppendMenu(h, MF_STRING|MF_MENUBARBREAK,\r
- IDM_CommandX + i, &e->item[1]);\r
- } else {\r
- AppendMenu(h, MF_STRING, IDM_CommandX + i, e->item);\r
+ flags |= MF_MENUBARBREAK;\r
+ j++;\r
}\r
+ if(!strcmp(e->command, "none")) flags |= MF_GRAYED; // [HGM] chatclick: provide inactive dummy\r
+ AppendMenu(h, flags, IDM_CommandX + i, e->item + j);\r
}\r
e++;\r
i++;\r
SetWindowText(hInput, buf);\r
SendMessage(hInput, WM_CHAR, '\r', 0);\r
} else {\r
+ if(!strcmp(command, "chat")) { ChatPopUp(name); return; }\r
sprintf(buf, "%s %s ", command, name); /* trailing space */\r
SetWindowText(hInput, buf);\r
sel.cpMin = 999999;\r
}\r
return 0;\r
} // [HGM] navigate: for Ctrl+R, flow into nex case (moved up here) to summon up menu\r
- case WM_RBUTTONUP:\r
- if (GetKeyState(VK_SHIFT) & ~1) {\r
- SendDlgItemMessage(hwndConsole, OPT_ConsoleText, \r
- WM_COMMAND, MAKEWPARAM(IDM_QuickPaste, 0), 0);\r
- } else {\r
+ case WM_RBUTTONDOWN:\r
+ if (!(GetKeyState(VK_SHIFT) & ~1)) {\r
+ /* Move selection here if it was empty */\r
+ POINT pt;\r
+ pt.x = LOWORD(lParam);\r
+ pt.y = HIWORD(lParam);\r
+ SendMessage(hwnd, EM_EXGETSEL, 0, (LPARAM)&sel);\r
+ if (sel.cpMin == sel.cpMax) {\r
+ sel.cpMin = SendMessage(hwnd, EM_CHARFROMPOS, 0, (LPARAM)&pt); /*doc is wrong*/\r
+ sel.cpMax = sel.cpMin;\r
+ SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM)&sel);\r
+ }\r
+ SendMessage(hwnd, EM_HIDESELECTION, FALSE, FALSE);\r
+{ // [HGM] chatclick: code moved here from WM_RBUTTONUP case, to have menu appear on down-click\r
POINT pt;\r
HMENU hmenu = LoadIcsTextMenu(icsTextMenuEntry);\r
SendMessage(hwnd, EM_EXGETSEL, 0, (LPARAM)&sel);\r
if (!IsClipboardFormatAvailable(CF_TEXT)) {\r
EnableMenuItem(hmenu, IDM_Paste, MF_BYCOMMAND|MF_GRAYED);\r
}\r
- pt.x = LOWORD(lParam);\r
- pt.y = HIWORD(lParam);\r
+ pt.x = LOWORD(lParam)-30; // [HGM] chatclick: make menu pop up with pointer above upper-right item\r
+ pt.y = HIWORD(lParam)-10; // make it appear as if mouse moved there, so it will be selected on up-click\r
+ PostMessage(hwnd, WM_MOUSEMOVE, wParam, lParam+5);\r
MenuPopup(hwnd, pt, hmenu, -1);\r
+}\r
+ }\r
+ return 0;\r
+ case WM_RBUTTONUP:\r
+ if (GetKeyState(VK_SHIFT) & ~1) {\r
+ SendDlgItemMessage(hwndConsole, OPT_ConsoleText, \r
+ WM_COMMAND, MAKEWPARAM(IDM_QuickPaste, 0), 0);\r
}\r
return 0;\r
case WM_PASTE:\r
return SendMessage(hInput, message, wParam, lParam);\r
case WM_MBUTTONDOWN:\r
return SendMessage(hwnd, WM_COMMAND, MAKEWPARAM(IDM_QuickPaste, 0), 0);\r
- case WM_RBUTTONDOWN:\r
- if (!(GetKeyState(VK_SHIFT) & ~1)) {\r
- /* Move selection here if it was empty */\r
- POINT pt;\r
- pt.x = LOWORD(lParam);\r
- pt.y = HIWORD(lParam);\r
- SendMessage(hwnd, EM_EXGETSEL, 0, (LPARAM)&sel);\r
- if (sel.cpMin == sel.cpMax) {\r
- sel.cpMin = SendMessage(hwnd, EM_CHARFROMPOS, 0, (LPARAM)&pt); /*doc is wrong*/\r
- sel.cpMax = sel.cpMin;\r
- SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM)&sel);\r
- }\r
- SendMessage(hwnd, EM_HIDESELECTION, FALSE, FALSE);\r
- }\r
- return 0;\r
case WM_COMMAND:\r
switch (LOWORD(wParam)) {\r
case IDM_QuickPaste:\r
{ IDM_Adjourn, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_StopExamining, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_StopObserving, MF_BYCOMMAND|MF_GRAYED },\r
+ { IDM_Upload, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_Revert, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_NewChat, MF_BYCOMMAND|MF_GRAYED },\r
{ -1, -1 }\r