/*\r
* wedittags.c -- EditTags window for WinBoard\r
- * $Id: wedittags.c,v 2.1 2003/10/27 19:21:02 mann Exp $\r
*\r
- * Copyright 1995,2009 Free Software Foundation, Inc.\r
+ * Copyright 1995, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Free\r
+ * Software Foundation, Inc.\r
+ *\r
+ * Enhancements Copyright 2005 Alessandro Scotti\r
*\r
* ------------------------------------------------------------------------\r
*\r
#include "config.h"\r
\r
#include <windows.h> /* required for all Windows applications */\r
+#include <richedit.h>\r
#include <stdio.h>\r
#include <stdlib.h>\r
#include <malloc.h>\r
#include <dlgs.h>\r
\r
#include "common.h"\r
-#include "winboard.h"\r
#include "frontend.h"\r
#include "backend.h"\r
-#include "wedittags.h"\r
+#include "winboard.h"\r
+\r
+#define _(s) T_(s)\r
\r
/* Module globals */\r
-static char *editTagsText;\r
-HWND editTagsDialog = NULL;\r
+static char *editTagsText, **resPtr;\r
+static HWND memo;\r
BOOL editTagsUp = FALSE;\r
BOOL canEditTags = FALSE;\r
-int editTagsX, editTagsY, editTagsW, editTagsH;\r
\r
/* Imports from winboard.c */\r
extern HINSTANCE hInst;\r
{\r
static HANDLE hwndText;\r
static int sizeX, sizeY;\r
- int len, newSizeX, newSizeY, flags;\r
+ int len, newSizeX, newSizeY;\r
char *str;\r
RECT rect;\r
MINMAXINFO *mmi;\r
switch (message) {\r
case WM_INITDIALOG: /* message: initialize dialog box */\r
/* Initialize the dialog items */\r
- hwndText = GetDlgItem(hDlg, OPT_TagsText);\r
+ Translate(hDlg, DLG_EditTags);\r
+ hwndText = memo = GetDlgItem(hDlg, OPT_TagsText);\r
SendMessage(hwndText, WM_SETFONT, \r
(WPARAM)font[boardSize][EDITTAGS_FONT]->hf, MAKELPARAM(FALSE, 0));\r
SetDlgItemText(hDlg, OPT_TagsText, editTagsText);\r
EnableWindow(GetDlgItem(hDlg, OPT_TagsCancel), canEditTags);\r
- EnableWindow(GetDlgItem(hDlg, OPT_EditTags), !canEditTags);\r
+ EnableWindow(GetDlgItem(hDlg, OPT_EditTags), !canEditTags || bookUp);\r
SendMessage(hwndText, EM_SETREADONLY, !canEditTags, 0);\r
+ if (bookUp) {\r
+ SetDlgItemText(hDlg, OPT_EditTags, _("&Play Move"));\r
+ SetWindowText(hDlg, _("Edit Book"));\r
+ SetFocus(hwndText);\r
+ } else\r
if (canEditTags) {\r
- SetWindowText(hDlg, "Edit Tags");\r
+ SetWindowText(hDlg, _("Edit Tags"));\r
SetFocus(hwndText);\r
} else {\r
- SetWindowText(hDlg, "Tags");\r
+ SetWindowText(hDlg, _("Tags"));\r
SetFocus(GetDlgItem(hDlg, IDOK));\r
}\r
if (!editTagsDialog) {\r
editTagsDialog = hDlg;\r
- flags = SWP_NOZORDER;\r
GetClientRect(hDlg, &rect);\r
sizeX = rect.right;\r
sizeY = rect.bottom;\r
- if (editTagsX != CW_USEDEFAULT && editTagsY != CW_USEDEFAULT &&\r
- editTagsW != CW_USEDEFAULT && editTagsH != CW_USEDEFAULT) {\r
+ SendDlgItemMessage( hDlg, OPT_TagsText, EM_SETEVENTMASK, 0, ENM_MOUSEEVENTS );\r
+ if (wpTags.x != CW_USEDEFAULT && wpTags.y != CW_USEDEFAULT &&\r
+ wpTags.width != CW_USEDEFAULT && wpTags.height != CW_USEDEFAULT) {\r
WINDOWPLACEMENT wp;\r
- EnsureOnScreen(&editTagsX, &editTagsY);\r
+ EnsureOnScreen(&wpTags.x, &wpTags.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 = editTagsX;\r
- wp.rcNormalPosition.right = editTagsX + editTagsW;\r
- wp.rcNormalPosition.top = editTagsY;\r
- wp.rcNormalPosition.bottom = editTagsY + editTagsH;\r
+ wp.rcNormalPosition.left = wpTags.x;\r
+ wp.rcNormalPosition.right = wpTags.x + wpTags.width;\r
+ wp.rcNormalPosition.top = wpTags.y;\r
+ wp.rcNormalPosition.bottom = wpTags.y + wpTags.height;\r
SetWindowPlacement(hDlg, &wp);\r
\r
GetClientRect(hDlg, &rect);\r
case WM_COMMAND:\r
switch (LOWORD(wParam)) {\r
case IDOK:\r
+ case OPT_TagsSave:\r
if (canEditTags) {\r
char *p, *q;\r
/* Read changed options from the dialog box */\r
GetWindowText(hwndText, str, len + 1);\r
p = q = str;\r
while (*q) {\r
- if (*q == '\r'|| *q == '\n')\r
+ if (*q == '\r')\r
q++;\r
else\r
*p++ = *q++;\r
}\r
- *p = NULLCHAR;\r
+ *p = NULLCHAR; err = 0;\r
+ if(resPtr) *resPtr = strdup(str); else\r
+ if(bookUp) SaveToBook(str), DisplayBook(currentMove); else\r
err = ReplaceTags(str, &gameInfo);\r
- if (err) DisplayError("Error replacing tags.", err);\r
+ if (err) DisplayError(_("Error replacing tags."), err);\r
\r
free(str);\r
}\r
- TagsPopDown();\r
+ if(LOWORD(wParam) == IDOK) TagsPopDown();\r
return TRUE;\r
\r
case IDCANCEL:\r
return TRUE;\r
\r
case OPT_EditTags:\r
+ if(bookUp) addToBookFlag = !addToBookFlag; else\r
EditTagsEvent();\r
return TRUE;\r
\r
}\r
break;\r
\r
+ case WM_NOTIFY: // [HGM] vari: cloned from whistory.c\r
+ if( wParam == OPT_TagsText ) {\r
+ MSGFILTER * lpMF = (MSGFILTER *) lParam;\r
+\r
+ if( lpMF->msg == WM_RBUTTONDOWN ) {\r
+ POINTL pt;\r
+ LRESULT index;\r
+\r
+ pt.x = LOWORD( lpMF->lParam );\r
+ pt.y = HIWORD( lpMF->lParam );\r
+\r
+ index = SendDlgItemMessage( hDlg, OPT_TagsText, EM_CHARFROMPOS, 0, (LPARAM) &pt );\r
+\r
+ hwndText = GetDlgItem(hDlg, OPT_TagsText); // cloned from above\r
+ len = GetWindowTextLength(hwndText);\r
+ str = (char *) malloc(len + 1);\r
+ GetWindowText(hwndText, str, len + 1);\r
+ if(bookUp) PlayBookMove(str, index);\r
+ free(str);\r
+\r
+ /* Zap the message for good: apparently, returning non-zero is not enough */\r
+ lpMF->msg = WM_USER;\r
+\r
+ return TRUE;\r
+ }\r
+ }\r
+ break;\r
+\r
case WM_SIZE:\r
newSizeX = LOWORD(lParam);\r
newSizeY = HIWORD(lParam);\r
return FALSE;\r
}\r
\r
+VOID AddBookMove(char *text)\r
+{\r
+ SendMessage( memo, EM_SETSEL, 999999, 999999 ); // [HGM] multivar: choose insertion point\r
+ SendMessage( memo, EM_REPLACESEL, (WPARAM) FALSE, (LPARAM) text );\r
+}\r
+\r
VOID TagsPopDown(void)\r
{\r
if (editTagsDialog) ShowWindow(editTagsDialog, SW_HIDE);\r
- CheckMenuItem(GetMenu(hwndMain), IDM_EditTags, MF_UNCHECKED);\r
- editTagsUp = FALSE;\r
+ CheckMenuItem(GetMenu(hwndMain), IDM_Tags, MF_UNCHECKED);\r
+ editTagsUp = bookUp = addToBookFlag = FALSE;\r
}\r
\r
\r
editTagsText = p;\r
canEditTags = edit;\r
\r
- CheckMenuItem(GetMenu(hwndMain), IDM_EditTags, MF_CHECKED);\r
+ CheckMenuItem(GetMenu(hwndMain), IDM_Tags, MF_CHECKED);\r
if (editTagsDialog) {\r
SendMessage(editTagsDialog, WM_INITDIALOG, 0, 0);\r
ShowWindow(editTagsDialog, SW_SHOW);\r
+ if(bookUp) SetFocus(hwndMain);\r
} else {\r
lpProc = MakeProcInstance((FARPROC)EditTagsDialog, hInst);\r
CreateDialog(hInst, MAKEINTRESOURCE(DLG_EditTags),\r
SetActiveWindow(hwnd);\r
}\r
\r
-VOID EditTagsPopUp(char *tags)\r
+VOID EditTagsPopUp(char *tags, char **dest)\r
{\r
+ resPtr = dest;\r
EitherTagsPopUp(tags, "", TRUE);\r
}\r
\r
VOID EditTagsProc()\r
{\r
- if (editTagsUp) {\r
+ if (editTagsUp && !bookUp) {\r
TagsPopDown();\r
} else {\r
EditTagsEvent();\r