2 * wedittags.c -- EditTags window for WinBoard
\r
4 * Copyright 1995, 2009, 2010 Free Software Foundation, Inc.
\r
6 * Enhancements Copyright 2005 Alessandro Scotti
\r
8 * ------------------------------------------------------------------------
\r
10 * GNU XBoard is free software: you can redistribute it and/or modify
\r
11 * it under the terms of the GNU General Public License as published by
\r
12 * the Free Software Foundation, either version 3 of the License, or (at
\r
13 * your option) any later version.
\r
15 * GNU XBoard is distributed in the hope that it will be useful, but
\r
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
\r
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
\r
18 * General Public License for more details.
\r
20 * You should have received a copy of the GNU General Public License
\r
21 * along with this program. If not, see http://www.gnu.org/licenses/. *
\r
23 *------------------------------------------------------------------------
\r
24 ** See the file ChangeLog for a revision history. */
\r
28 #include <windows.h> /* required for all Windows applications */
\r
34 #include <commdlg.h>
\r
38 #include "frontend.h"
\r
39 #include "backend.h"
\r
40 #include "winboard.h"
\r
42 /* Module globals */
\r
43 static char *editTagsText;
\r
44 BOOL editTagsUp = FALSE;
\r
45 BOOL canEditTags = FALSE;
\r
47 /* Imports from winboard.c */
\r
48 extern HINSTANCE hInst;
\r
49 extern HWND hwndMain;
\r
50 extern BoardSize boardSize;
\r
53 EditTagsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
\r
55 static HANDLE hwndText;
\r
56 static int sizeX, sizeY;
\r
57 int len, newSizeX, newSizeY, flags;
\r
64 case WM_INITDIALOG: /* message: initialize dialog box */
\r
65 /* Initialize the dialog items */
\r
66 hwndText = GetDlgItem(hDlg, OPT_TagsText);
\r
67 SendMessage(hwndText, WM_SETFONT,
\r
68 (WPARAM)font[boardSize][EDITTAGS_FONT]->hf, MAKELPARAM(FALSE, 0));
\r
69 SetDlgItemText(hDlg, OPT_TagsText, editTagsText);
\r
70 EnableWindow(GetDlgItem(hDlg, OPT_TagsCancel), canEditTags);
\r
71 EnableWindow(GetDlgItem(hDlg, OPT_EditTags), !canEditTags);
\r
72 SendMessage(hwndText, EM_SETREADONLY, !canEditTags, 0);
\r
74 SetWindowText(hDlg, "Edit Tags");
\r
77 SetWindowText(hDlg, "Tags");
\r
78 SetFocus(GetDlgItem(hDlg, IDOK));
\r
80 if (!editTagsDialog) {
\r
81 editTagsDialog = hDlg;
\r
82 flags = SWP_NOZORDER;
\r
83 GetClientRect(hDlg, &rect);
\r
85 sizeY = rect.bottom;
\r
86 if (wpTags.x != CW_USEDEFAULT && wpTags.y != CW_USEDEFAULT &&
\r
87 wpTags.width != CW_USEDEFAULT && wpTags.height != CW_USEDEFAULT) {
\r
89 EnsureOnScreen(&wpTags.x, &wpTags.y, 0, 0);
\r
90 wp.length = sizeof(WINDOWPLACEMENT);
\r
92 wp.showCmd = SW_SHOW;
\r
93 wp.ptMaxPosition.x = wp.ptMaxPosition.y = 0;
\r
94 wp.rcNormalPosition.left = wpTags.x;
\r
95 wp.rcNormalPosition.right = wpTags.x + wpTags.width;
\r
96 wp.rcNormalPosition.top = wpTags.y;
\r
97 wp.rcNormalPosition.bottom = wpTags.y + wpTags.height;
\r
98 SetWindowPlacement(hDlg, &wp);
\r
100 GetClientRect(hDlg, &rect);
\r
101 newSizeX = rect.right;
\r
102 newSizeY = rect.bottom;
\r
103 ResizeEditPlusButtons(hDlg, hwndText, sizeX, sizeY,
\r
104 newSizeX, newSizeY);
\r
112 switch (LOWORD(wParam)) {
\r
116 /* Read changed options from the dialog box */
\r
117 len = GetWindowTextLength(hwndText);
\r
118 str = (char *) malloc(len + 1);
\r
119 GetWindowText(hwndText, str, len + 1);
\r
122 if (*q == '\r'|| *q == '\n')
\r
128 err = ReplaceTags(str, &gameInfo);
\r
129 if (err) DisplayError("Error replacing tags.", err);
\r
137 case OPT_TagsCancel:
\r
151 newSizeX = LOWORD(lParam);
\r
152 newSizeY = HIWORD(lParam);
\r
153 ResizeEditPlusButtons(hDlg, hwndText, sizeX, sizeY, newSizeX, newSizeY);
\r
158 case WM_GETMINMAXINFO:
\r
159 /* Prevent resizing window too small */
\r
160 mmi = (MINMAXINFO *) lParam;
\r
161 mmi->ptMinTrackSize.x = 100;
\r
162 mmi->ptMinTrackSize.y = 100;
\r
168 VOID TagsPopDown(void)
\r
170 if (editTagsDialog) ShowWindow(editTagsDialog, SW_HIDE);
\r
171 CheckMenuItem(GetMenu(hwndMain), IDM_EditTags, MF_UNCHECKED);
\r
172 editTagsUp = FALSE;
\r
176 VOID EitherTagsPopUp(char *tags, char *msg, BOOLEAN edit)
\r
181 if (msg == NULL) msg = "";
\r
182 p = (char *) malloc(2 * (strlen(tags) + strlen(msg)) + 2);
\r
185 if (*tags == '\n') *q++ = '\r';
\r
188 if (*msg != NULLCHAR) {
\r
192 if (*msg == '\n') *q++ = '\r';
\r
197 if (editTagsText != NULL) free(editTagsText);
\r
199 canEditTags = edit;
\r
201 CheckMenuItem(GetMenu(hwndMain), IDM_EditTags, MF_CHECKED);
\r
202 if (editTagsDialog) {
\r
203 SendMessage(editTagsDialog, WM_INITDIALOG, 0, 0);
\r
204 ShowWindow(editTagsDialog, SW_SHOW);
\r
206 lpProc = MakeProcInstance((FARPROC)EditTagsDialog, hInst);
\r
207 CreateDialog(hInst, MAKEINTRESOURCE(DLG_EditTags),
\r
208 hwndMain, (DLGPROC)lpProc);
\r
209 FreeProcInstance(lpProc);
\r
214 VOID TagsPopUp(char *tags, char *msg)
\r
216 HWND hwnd = GetActiveWindow();
\r
217 EitherTagsPopUp(tags, msg, FALSE);
\r
218 SetActiveWindow(hwnd);
\r
221 VOID EditTagsPopUp(char *tags)
\r
223 EitherTagsPopUp(tags, "", TRUE);
\r
226 VOID EditTagsProc()
\r