2 * wedittags.c -- EditTags window for WinBoard
\r
5 * Copyright 1995 Free Software Foundation, Inc.
\r
7 * ------------------------------------------------------------------------
\r
8 * This program is free software; you can redistribute it and/or modify
\r
9 * it under the terms of the GNU General Public License as published by
\r
10 * the Free Software Foundation; either version 2 of the License, or
\r
11 * (at your option) any later version.
\r
13 * This program is distributed in the hope that it will be useful,
\r
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
16 * GNU General Public License for more details.
\r
18 * You should have received a copy of the GNU General Public License
\r
19 * along with this program; if not, write to the Free Software
\r
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
\r
21 * ------------------------------------------------------------------------
\r
26 #include <windows.h> /* required for all Windows applications */
\r
32 #include <commdlg.h>
\r
36 #include "winboard.h"
\r
37 #include "frontend.h"
\r
38 #include "backend.h"
\r
40 /* Module globals */
\r
41 static char *editTagsText;
\r
42 HWND editTagsDialog = NULL;
\r
43 BOOL editTagsUp = FALSE;
\r
44 BOOL canEditTags = FALSE;
\r
45 int editTagsX, editTagsY, editTagsW, editTagsH;
\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 (editTagsX != CW_USEDEFAULT && editTagsY != CW_USEDEFAULT &&
\r
87 editTagsW != CW_USEDEFAULT && editTagsH != CW_USEDEFAULT) {
\r
89 EnsureOnScreen(&editTagsX, &editTagsY);
\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 = editTagsX;
\r
95 wp.rcNormalPosition.right = editTagsX + editTagsW;
\r
96 wp.rcNormalPosition.top = editTagsY;
\r
97 wp.rcNormalPosition.bottom = editTagsY + editTagsH;
\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