1 /*
2 * propshet.c -- TODAY for Windows - Property Sheet Control
3 *
4 * Copyright (C) 1997,1998,1999,2003 by Yoshifumi Mori
5 *
6 * tab:4
7 */
8
9 #include "cdefs.h"
10 #include "extern.h"
11 #include "todayfw.rh"
12
13 #define MAX_SHEET 11
14 #define MAXLIST(x) (sizeof(x) / sizeof(char *))
15
16 struct LEVEL_LIST {
17 int level;
18 const char *string;
19 };
20
21 struct PROP_TAB_TBL {
22 int iResID;
23 DLGPROC DlgProc;
24 };
25
26 static const DWORD propHelpID[] = {
27 // DISPLAY
28 IDC_DISP_CHK_DATE, 1101,
29 IDC_DISP_CHK_BIRTHDAY, 1102,
30 IDC_DISP_CHK_DEATHDAY, 1112, /* add */
31 IDC_DISP_CHK_EVENT, 1103,
32 IDC_DISP_CHK_HISTORY, 1104,
33 IDC_DISP_CHK_SCHEDULE, 1105,
34 IDC_DISP_ORDER_EDIT1, 1106,
35 IDC_DISP_ORDER_EDIT2, 1107,
36 IDC_DISP_ORDER_EDIT3, 1108,
37 IDC_DISP_ORDER_EDIT4, 1109,
38 IDC_DISP_ORDER_EDIT5, 1110,
39 IDC_DISP_ORDER_PREVIEW, 1111,
40 // DATE
41 IDC_DATE_RBTN_DATE1, 1201,
42 IDC_DATE_RBTN_DATE2, 1202,
43 IDC_DATE_RBTN_TIME1, 1204,
44 IDC_DATE_RBTN_TIME2, 1205,
45 IDC_DATE_CHK_KYUREKI, 1206,
46 IDC_DATE_CHK_ETO1, 1207,
47 IDC_DATE_CHK_ETO2, 1208,
48 IDC_DATE_CHK_9SEI, 1209,
49 IDC_DATE_CHK_12CHOKU, 1210,
50 IDC_DATE_CHK_28SYUKU, 1211,
51 // BIRTHDAY
52 IDC_BIRTH_CBBOX_NOTICE, 1301,
53 IDC_BIRTH_EDIT_NOTICE, 1302,
54 IDC_BIRTH_CBBOX_AGE, 1303,
55 IDC_BIRTH_CBBOX_AGESORT,1304,
56 IDC_BIRTH_CBBOX_SORT, 1305,
57 IDC_BIRTH_EDIT_FILE, 1307,
58 IDC_BIRTH_FLOWER, 1308,
59 IDC_BIRTH_ADDINFO, 1309, /* add */
60 IDC_DEATH_CBBOX_NOTICE, 1310, /* add */
61 IDC_DEATH_EDIT_NOTICE, 1311, /* add */
62 IDC_DEATH_CBBOX_AGE, 1312, /* add */
63 // EVENT
64 IDC_EVENT_CBBOX_NOTICE, 1401,
65 IDC_EVENT_EDIT_NOTICE, 1402,
66 IDC_EVENT_CHK_RANGE, 1403,
67 IDC_EVENT_CBBOX_SORT, 1404,
68 IDC_EVENT_EDIT_FILE1, 1406,
69 IDC_EVENT_EDIT_FILE2, 1408,
70 // EVENT LEVEL
71 IDC_LEVEL_EDIT_00, 1502,
72 IDC_LEVEL_EDIT_01, 1504,
73 IDC_LEVEL_EDIT_02, 1506,
74 IDC_LEVEL_EDIT_03, 1508,
75 IDC_LEVEL_EDIT_04, 1510,
76 IDC_LEVEL_EDIT_05, 1512,
77 IDC_LEVEL_EDIT_06, 1514,
78 IDC_LEVEL_EDIT_07, 1516,
79 IDC_LEVEL_EDIT_08, 1518,
80 IDC_LEVEL_EDIT_09, 1520,
81 IDC_LEVEL_EDIT_10, 1522,
82 IDC_LEVEL_EDIT_11, 1524,
83 IDC_LEVEL_EDIT_12, 1526,
84 IDC_LEVEL_EDIT_13, 1528,
85 IDC_LEVEL_EDIT_14, 1530,
86 IDC_LEVEL_EDIT_15, 1532,
87 IDC_LEVEL_EDIT_16, 1534,
88 IDC_LEVEL_EDIT_17, 1536,
89 IDC_LEVEL_EDIT_18, 1538,
90 IDC_LEVEL_EDIT_19, 1540,
91 IDC_LEVEL_EDIT_20, 1542,
92 IDC_LEVEL_EDIT_21, 1544,
93 IDC_LEVEL_EDIT_22, 1546,
94 IDC_LEVEL_EDIT_23, 1548,
95 IDC_LEVEL_EDIT_24, 1550,
96 IDC_LEVEL_EDIT_25, 1552,
97 IDC_LEVEL_LIST, 1553,
98 // HISTORY
99 IDC_HIST_CBBOX_YEARCOM, 1601, /* change */
100 IDC_HIST_CBBOX_ADDINFO, 1602, /* change */
101 IDC_HIST_CHK_BOTH_DATE, 1603, /* change */
102 IDC_HIST_CBBOX_MSGTYPE, 1604,
103 IDC_HIST_TEXT_PREVIEW, 1605,
104 IDC_HIST_CBBOX_SORT, 1606,
105 IDC_HIST_EDIT_FILE, 1608,
106 // SCHEDULE
107 IDC_SCHE_EDIT_NOTICE, 1701,
108 IDC_SCHE_CBBOX_MSGTYPE, 1702,
109 IDC_SCHE_TEXT_PREVIEW, 1703,
110 IDC_SCHE_EDIT_FILE, 1705,
111 // SCREEN
112 IDC_SCRN_EDIT_W, 1801,
113 IDC_SCRN_EDIT_H, 1802,
114 IDC_SCRN_EDIT_C01, 1803,
115 IDC_SCRN_EDIT_C02, 1804,
116 IDC_SCRN_PREVIEW, 1805,
117 IDC_SCRN_DRAW_S00, 1806,
118 IDC_SCRN_DRAW_S01, 1806,
119 IDC_SCRN_DRAW_S02, 1806,
120 IDC_SCRN_DRAW_S03, 1806,
121 IDC_SCRN_DRAW_S04, 1806,
122 IDC_SCRN_DRAW_S05, 1806,
123 IDC_SCRN_DRAW_S06, 1806,
124 IDC_SCRN_DRAW_S07, 1806,
125 IDC_SCRN_DRAW_S08, 1806,
126 IDC_SCRN_DRAW_S09, 1806,
127 IDC_SCRN_DRAW_S10, 1806,
128 IDC_SCRN_DRAW_S11, 1806,
129 IDC_SCRN_DRAW_S12, 1806,
130 IDC_SCRN_DRAW_S13, 1806,
131 IDC_SCRN_DRAW_S14, 1806,
132 IDC_SCRN_DRAW_S15, 1806,
133 IDC_SCRN_DRAW_01, 1807, /* add */
134 IDC_SCRN_DRAW_02, 1808, /* add */
135 IDC_SCRN_FONTLIST, 1810, /* add */
136 IDC_SCRN_FONTSIZE, 1811, /* add */
137 // FILE
138 IDC_FILE_CHK_FKEEP, 1901,
139 IDC_FILE_EDIT_FPATH, 1902,
140 IDC_FILE_EDIT_FNAME, 1904,
141 IDC_FILE_EDIT_SUFFIX, 1906,
142 IDC_FILE_EDIT_TABLE, 1907,
143 // EVENT REKICHU
144 IDC_REKICHU_0001, 2001,
145 IDC_REKICHU_0002, 2002,
146 IDC_REKICHU_0003, 2003,
147 IDC_REKICHU_0004, 2004,
148 IDC_REKICHU_0005, 2005,
149 IDC_REKICHU_0006, 2006,
150 IDC_REKICHU_0007, 2007,
151 IDC_REKICHU_0008, 2008,
152 IDC_REKICHU_0009, 2009,
153 IDC_REKICHU_0010, 2010,
154 IDC_REKICHU_0011, 2011,
155 IDC_REKICHU_0012, 2012,
156 IDC_REKICHU_0013, 2013,
157 IDC_REKICHU_0014, 2014,
158 IDC_REKICHU_0015, 2015,
159 IDC_REKICHU_0016, 2016,
160 IDC_REKICHU_0017, 2017,
161 IDC_REKICHU_0018, 2018,
162 IDC_REKICHU_0019, 2019,
163 IDC_REKICHU_0020, 2020,
164 // EVENT REKICHU KADAN
165 IDC_KADAN_0001, 2101,
166 IDC_KADAN_0002, 2102,
167 IDC_KADAN_0003, 2103,
168 IDC_KADAN_0004, 2104,
169 IDC_KADAN_0005, 2105,
170 IDC_KADAN_0006, 2106,
171 IDC_KADAN_0007, 2107,
172 IDC_KADAN_0008, 2108,
173 IDC_KADAN_0009, 2109,
174 IDC_KADAN_0010, 2110,
175 IDC_KADAN_0011, 2111,
176 IDC_KADAN_0012, 2112,
177 IDC_KADAN_0013, 2113,
178 IDC_KADAN_0014, 2114,
179 IDC_KADAN_0015, 2115,
180 IDC_KADAN_0016, 2116,
181 IDC_KADAN_0017, 2117,
182 IDC_KADAN_0018, 2118,
183 IDC_KADAN_0019, 2119,
184 IDC_KADAN_0020, 2120,
185 IDC_KADAN_0021, 2121,
186 IDC_KADAN_0022, 2122,
187 //
188 0, 0
189 };
190
191 static const char *list_notice[3] = {
192 "ͽ�ʤ�", "����ͽ��", "'+'�Τ�ͽ��"
193 };
194 static const char *list_age[4] = {
195 "����ɽ��", "�����Τ�", "����24�аʲ�", "ɽ�����ʤ�"
196 };
197 static const char *list_death_age[4] = {
198 "ɽ�����ʤ�", "��ǯ�Τ�", "��ǯ�Τ�", "ξ��ɽ��"
199 };
200 static const char *list_hist_year[4] = {
201 "ɽ�����ʤ�", "����Τ�", "��ǯ�Τ�", "ξ��ɽ��"
202 };
203 static const char *list_addinfo[4] = {
204 "ɽ�����ʤ�", "�������Τ�", "̿���Τ�", "ξ��ɽ��"
205 };
206 static const char *list_sort[3] = {
207 "����", "�߽�", "���ʤ�"
208 };
209 static const char *list_type[4] = {
210 "Type0", "Type1", "Type2", "Type3"
211 };
212 static const char *list_order[6] = {
213 "����_����_����", "����_����_����",
214 "����_����_����", "����_����_����",
215 "����_����_����", "����_����_����",
216 };
217 static const char *msg_preview1[4] = {
218 " yyyy/mm/dd �����ͤ���˥ǡ�����ɽ�����ޤ�",
219 " yyyy/mm/dd �����ͤ���˥ǡ���\r\n ���ޤ��֤�ɽ�����ޤ�",
220 " yyyy/mm/dd �����ͤ���˥ǡ���\r\n ���ޤ��֤�ɽ������",
221 " yyyy/mm/dd �����ͤ���˥ǡ�\r\n �����ޤ��֤�ɽ����",
222 };
223 static const char *msg_preview2[4] = {
224 "commentfield �����ͤ˥�å�������ɽ�����ޤ�",
225 "commentfield �����ͤ˥�å�����\r\n ���ޤ��֤�ɽ�����ޤ�",
226 "commentfield �����ͤ˥�å�����\r\n ���ޤ��֤�ɽ������",
227 "commentfield �����ͤ˥�å���\r\n �����ޤ��֤�ɽ����",
228 };
229 #ifdef MSG_STYLE
230 #define MSG_PREVIEW_TEXT "����ˤ��ϡ�\n���礦�ϡ�ʿ��15ǯ 4��19�� (������) ����ϡ�\n����Ǥϡ�ʿ��15ǯ 3��18�� (ͧ��) [��Ĭ] ��\n���٤Ǥϡ��̤ (�ߤ��ΤȤҤĤ�) ��ǯ������\n�����ϡ���� �Ǥ���\n����ľ�ϡ��� �Ǥ���\n��Ȭ�ɤϡ��� �Ǥ���"
231 #else
232 #define MSG_PREVIEW_TEXT "����ˤ���.\n���礦�ϡ�ʿ��15ǯ 4��19�� (������) ����ϡ�\n����Ǥϡ�ʿ��15ǯ 3��18�� (ͧ��) [��Ĭ] ��\n���٤Ǥϡ��̤ (�ߤ��ΤȤҤĤ�) ��ǯ������\n�����ϡ���� �Ǥ�.\n����ľ�ϡ��� �Ǥ�.\n��Ȭ�ɤϡ��� �Ǥ�."
233 #endif
234 #define TEXT_SYSFONTNAME "TODAY Default"
235
236 static HINSTANCE ghInstance;
237 static HFONT hfontPreview;
238 static BOOL bChange;
239 static BOOL bRekichu_Kadan;
240 static BOOL bChangeDisplayParam;
241 static char szText[32];
242 static char msg[256];
243 static struct LEVEL_LIST *levellist;
244
245 static
setDropListInt(HWND hDlg,UINT ctrlID,const char ** list,int maxn,int pos)246 void setDropListInt(HWND hDlg, UINT ctrlID, const char **list, int maxn, int pos)
247 {
248 int i;
249
250 for (i = 0; i < maxn; i++) {
251 SendDlgItemMessage(hDlg, ctrlID, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)list[i]);
252 }
253 SendDlgItemMessage(hDlg, ctrlID, CB_SETCURSEL, pos, TRUE);
254 }
255
256 static
setDropListText(HWND hDlg,UINT ctrlID,const char ** list,int maxn,char * text)257 void setDropListText(HWND hDlg, UINT ctrlID, const char **list, int maxn, char *text)
258 {
259 int i;
260
261 for (i = 0; i < maxn; i++) {
262 SendDlgItemMessage(hDlg, ctrlID, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)list[i]);
263 }
264 if (text == NULL) {
265 text = "";
266 }
267 SetDlgItemText(hDlg, ctrlID, (LPCTSTR)text);
268 }
269
270 static
setFileList(HWND hDlg,UINT ctrlID,char ** filetbl,int maxtbl)271 void setFileList(HWND hDlg, UINT ctrlID, char **filetbl, int maxtbl)
272 {
273 int i;
274 int textlen;
275 char *bufp;
276 char *p;
277
278 textlen = 0;
279 for (i = 0; i < maxtbl; i++) {
280 if (filetbl[i] != NULL && *(filetbl[i]) != '\0') {
281 textlen += strlen(filetbl[i]) + 2;
282 }
283 }
284 textlen++;
285 bufp = malloc(textlen);
286 if (bufp != NULL) {
287 p = bufp;
288 for (i = 0; i < maxtbl; i++) {
289 if (filetbl[i] != NULL && *(filetbl[i]) != '\0') {
290 sprintf(p, "%s\r\n", filetbl[i]);
291 p = strchr(p, '\0');
292 }
293 }
294 *p = '\0';
295 SetDlgItemText(hDlg, ctrlID, (LPCTSTR)bufp);
296 free(bufp);
297 }
298 }
299
300 static
setEditText(HWND hDlg,UINT ctrlID,char * text)301 void setEditText(HWND hDlg, UINT ctrlID, char *text)
302 {
303 if (text == NULL) {
304 text = "";
305 }
306 SetDlgItemText(hDlg, ctrlID, (LPCTSTR)text);
307 }
308
309 static
updateCheckButton(HWND hDlg,UINT ctrlID,int * flag)310 void updateCheckButton(HWND hDlg, UINT ctrlID, int *flag)
311 {
312 int state;
313
314 state = IsDlgButtonChecked(hDlg, ctrlID);
315 if (*flag != state) {
316 *flag = state;
317 bChange = TRUE;
318 }
319 }
320
321 static
updateCheckDropListInt(HWND hDlg,UINT ctrlID,int * ip)322 void updateCheckDropListInt(HWND hDlg, UINT ctrlID, int *ip)
323 {
324 int state;
325
326 state = SendDlgItemMessage(hDlg, ctrlID, CB_GETCURSEL, 0, 0L);
327 if (state != CB_ERR && *ip != state) {
328 *ip = state;
329 bChange = TRUE;
330 }
331 }
332
333 static
updateCheckEditInt(HWND hDlg,UINT ctrlID,int * ip)334 void updateCheckEditInt(HWND hDlg, UINT ctrlID, int *ip)
335 {
336 int x;
337 BOOL bFlag;
338
339 x = GetDlgItemInt(hDlg, ctrlID, &bFlag, TRUE);
340 if (bFlag == TRUE && *ip != x) {
341 *ip = x;
342 bChange = TRUE;
343 }
344 }
345
346 static
updateCheckEditText(HWND hDlg,UINT ctrlID,char ** bufp)347 void updateCheckEditText(HWND hDlg, UINT ctrlID, char **bufp)
348 {
349 int textlen;
350 char *text;
351
352 textlen = SendDlgItemMessage(hDlg, ctrlID, WM_GETTEXTLENGTH, 0, 0L) + 1;
353 text = malloc(textlen);
354 if (text != NULL) {
355 SendDlgItemMessage(hDlg, ctrlID, WM_GETTEXT, textlen, (LPARAM)text);
356 (void)strtok(text, "\r\n"); /* cut CR/LF */
357 if (strlen(text) == 0) { /* edit text is empty */
358 if (*bufp != NULL) {
359 free(*bufp);
360 bChange = TRUE;
361 }
362 *bufp = NULL;
363 } else if (*bufp == NULL || strcmp(*bufp, text) != 0) {
364 if (*bufp != NULL) {
365 free(*bufp);
366 }
367 *bufp = xstrdup(text);
368 bChange = TRUE;
369 }
370 free(text);
371 }
372 }
373
374 static
updateCheckEditTextList(HWND hDlg,UINT ctrlID,char ** listp,int listcnt)375 void updateCheckEditTextList(HWND hDlg, UINT ctrlID, char **listp, int listcnt)
376 {
377 int i;
378 int cnt;
379 int textlen;
380 char *text;
381 char **bufp;
382 char *p;
383 char *lasts;
384
385 textlen = SendDlgItemMessage(hDlg, ctrlID, WM_GETTEXTLENGTH, 0, 0L) + 1;
386 text = malloc(textlen);
387 if (text != NULL) {
388 SendDlgItemMessage(hDlg, ctrlID, WM_GETTEXT, textlen, (LPARAM)text);
389
390 bufp = malloc(sizeof(char *) * listcnt);
391 if (bufp != NULL) {
392 memset(bufp, '\0', sizeof(char *) * listcnt);
393
394 cnt = 0;
395 lasts = NULL;
396 p = strtok_r(text, "\r\n", &lasts);
397 while (p != NULL) {
398 bufp[cnt++] = p;
399 if (cnt >= listcnt) {
400 break;
401 }
402 p = strtok_r(NULL, "\r\n", &lasts);
403 }
404
405 for (i = 0; i < listcnt; i++) {
406 if (listp[i] == NULL) {
407 if (bufp[i] != NULL) {
408 listp[i] = xstrdup(bufp[i]);
409 bChange = TRUE;
410 }
411 } else if (bufp[i] == NULL || strcmp(listp[i], bufp[i]) != 0) {
412 free(listp[i]);
413 if (bufp[i] == NULL) {
414 listp[i] = NULL;
415 } else {
416 listp[i] = xstrdup(bufp[i]);
417 }
418 bChange = TRUE;
419 }
420 }
421
422 free(bufp);
423 }
424 free(text);
425 }
426 }
427
428 static
makeOrderMessage(int tbl[MAX_DISPLAY_ORDER])429 char *makeOrderMessage(int tbl[MAX_DISPLAY_ORDER])
430 {
431 static char msgbuf[64];
432 int i;
433
434 msgbuf[0] = '\0';
435 for (i = 0; i <= MAX_DISPLAY_ORDER; i++) {
436 if (tbl[0] == i) {
437 strcat(msgbuf, "����\n");
438 }
439 if (tbl[1] == i) {
440 strcat(msgbuf, "���٥��\n");
441 }
442 if (tbl[2] == i) {
443 strcat(msgbuf, "��������̿��\n");
444 }
445 if (tbl[3] == i) {
446 strcat(msgbuf, "���\n");
447 }
448 if (tbl[4] == i) {
449 strcat(msgbuf, "�������塼��\n");
450 }
451 }
452
453 return (msgbuf);
454 }
455
displayTabProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)456 LRESULT CALLBACK displayTabProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
457 {
458 int i;
459 int n;
460 int order[MAX_DISPLAY_ORDER];
461 BOOL bFlag;
462
463 switch (iMessage) {
464 case WM_INITDIALOG:
465 CheckDlgButton(hDlg, IDC_DISP_CHK_DATE, date_flag);
466 CheckDlgButton(hDlg, IDC_DISP_CHK_BIRTHDAY, birthday_flag);
467 CheckDlgButton(hDlg, IDC_DISP_CHK_EVENT, event_flag);
468 CheckDlgButton(hDlg, IDC_DISP_CHK_HISTORY, history_flag);
469 CheckDlgButton(hDlg, IDC_DISP_CHK_SCHEDULE, schedule_flag);
470 CheckDlgButton(hDlg, IDC_DISP_CHK_DEATHDAY, deathday_flag);
471 if (birthday_flag == FALSE) {
472 EnableWindow(GetDlgItem(hDlg, IDC_DISP_CHK_DEATHDAY), FALSE);
473 }
474 SetDlgItemText(hDlg, IDC_DISP_ORDER_PREVIEW, (LPCTSTR)makeOrderMessage(display_order));
475 for (i = 0; i < MAX_DISPLAY_ORDER; i++) {
476 SetDlgItemInt(hDlg, IDC_DISP_ORDER_EDIT1 + i, (int)display_order[i], TRUE);
477 SendDlgItemMessage(hDlg, IDC_DISP_ORDER_EDIT1 + i, EM_LIMITTEXT, 1, 0L);
478 }
479 return (TRUE);
480 case WM_COMMAND:
481 switch (HIWORD(wParam)) {
482 case EN_CHANGE:
483 if (LOWORD(wParam) >= IDC_DISP_ORDER_EDIT1 && LOWORD(wParam) <= IDC_DISP_ORDER_EDIT5) {
484 for (i = 0; i < MAX_DISPLAY_ORDER; i++) {
485 n = GetDlgItemInt(hDlg, IDC_DISP_ORDER_EDIT1 + i, &bFlag, TRUE);
486 if (bFlag == TRUE) {
487 order[i] = n;
488 } else {
489 order[i] = -1;
490 }
491 }
492 SetDlgItemText(hDlg, IDC_DISP_ORDER_PREVIEW, (LPCTSTR)makeOrderMessage(order));
493 return (TRUE);
494 }
495 break;
496 case BN_CLICKED:
497 if (LOWORD(wParam) == IDC_DISP_CHK_BIRTHDAY) {
498 EnableWindow(GetDlgItem(hDlg, IDC_DISP_CHK_DEATHDAY), (IsDlgButtonChecked(hDlg, LOWORD(wParam)) == BST_CHECKED) ? TRUE : FALSE);
499 return (TRUE);
500 }
501 }
502 break;
503 case WM_NOTIFY:
504 switch (((NMHDR *)lParam)->code) {
505 case PSN_KILLACTIVE:
506 for (i = 0; i < MAX_DISPLAY_ORDER; i++) {
507 n = GetDlgItemInt(hDlg, IDC_DISP_ORDER_EDIT1 + i, &bFlag, TRUE);
508 if (bFlag == FALSE || n < 0 || n > MAX_DISPLAY_ORDER) {
509 LoadString(ghInstance, IDC_DISP_ORDER_EDIT1 + i, szText, sizeof(szText));
510 sprintf(msg, "%s���ϰ���ˤ���ޤ���", szText);
511 MessageBox(hDlg, msg, "�ϰϥ��顼", MB_ICONINFORMATION | MB_OK);
512 SetWindowLong(hDlg, DWL_MSGRESULT, TRUE);
513 }
514 }
515 return (TRUE);
516 case PSN_APPLY:
517 updateCheckButton(hDlg, IDC_DISP_CHK_DATE, &date_flag);
518 updateCheckButton(hDlg, IDC_DISP_CHK_BIRTHDAY, &birthday_flag);
519 updateCheckButton(hDlg, IDC_DISP_CHK_EVENT, &event_flag);
520 updateCheckButton(hDlg, IDC_DISP_CHK_HISTORY, &history_flag);
521 updateCheckButton(hDlg, IDC_DISP_CHK_SCHEDULE, &schedule_flag);
522 updateCheckButton(hDlg, IDC_DISP_CHK_DEATHDAY, &deathday_flag);
523 for (i = 0; i < MAX_DISPLAY_ORDER; i++) {
524 updateCheckEditInt(hDlg, IDC_DISP_ORDER_EDIT1 + i, &display_order[i]);
525 }
526 return (TRUE);
527 }
528 break;
529 case WM_HELP:
530 commonHelpControl(propHelpID, (LPHELPINFO)lParam);
531 return (TRUE);
532 }
533
534 return (FALSE);
535 }
536
dateTabProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)537 LRESULT CALLBACK dateTabProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
538 {
539 int state;
540
541 switch (iMessage) {
542 case WM_INITDIALOG:
543 CheckRadioButton(hDlg, IDC_DATE_RBTN_DATE1, IDC_DATE_RBTN_DATE2, date_yeartype == DATE_YEAR_AD ? IDC_DATE_RBTN_DATE1 : IDC_DATE_RBTN_DATE2);
544 CheckRadioButton(hDlg, IDC_DATE_RBTN_TIME1, IDC_DATE_RBTN_TIME2, date_timesystem_type == DATE_TIMESYSTEM_12H ? IDC_DATE_RBTN_TIME1 : IDC_DATE_RBTN_TIME2);
545 CheckDlgButton(hDlg, IDC_DATE_CHK_KYUREKI, date_kyureki_flag);
546 CheckDlgButton(hDlg, IDC_DATE_CHK_ETO1, date_eto_flag);
547 CheckDlgButton(hDlg, IDC_DATE_CHK_ETO2, date_eto2_flag);
548 EnableWindow(GetDlgItem(hDlg, IDC_DATE_CHK_ETO2), date_eto_flag);
549 CheckDlgButton(hDlg, IDC_DATE_CHK_9SEI, date_kyusei_flag);
550 CheckDlgButton(hDlg, IDC_DATE_CHK_12CHOKU, date_12_flag);
551 CheckDlgButton(hDlg, IDC_DATE_CHK_28SYUKU, date_28_flag);
552 return (TRUE);
553 case WM_COMMAND:
554 switch (HIWORD(wParam)) {
555 case BN_CLICKED:
556 if (LOWORD(wParam) == IDC_DATE_CHK_ETO1) {
557 EnableWindow(GetDlgItem(hDlg, IDC_DATE_CHK_ETO2), IsDlgButtonChecked(hDlg, IDC_DATE_CHK_ETO1));
558 }
559 return (TRUE);
560 }
561 break;
562 case WM_NOTIFY:
563 switch (((NMHDR *)lParam)->code) {
564 case PSN_APPLY:
565 state = IsDlgButtonChecked(hDlg, IDC_DATE_RBTN_DATE1) ? DATE_YEAR_AD : DATE_YEAR_JC;
566 if (date_yeartype != state) {
567 date_yeartype = state;
568 bChange = TRUE;
569 }
570 state = IsDlgButtonChecked(hDlg, IDC_DATE_RBTN_TIME1) ? DATE_TIMESYSTEM_12H : DATE_TIMESYSTEM_24H;
571 if (date_timesystem_type != state) {
572 date_timesystem_type = state;
573 bChange = TRUE;
574 }
575 updateCheckButton(hDlg, IDC_DATE_CHK_KYUREKI, &date_kyureki_flag);
576 updateCheckButton(hDlg, IDC_DATE_CHK_ETO1, &date_eto_flag);
577 updateCheckButton(hDlg, IDC_DATE_CHK_ETO2, &date_eto2_flag);
578 updateCheckButton(hDlg, IDC_DATE_CHK_9SEI, &date_kyusei_flag);
579 updateCheckButton(hDlg, IDC_DATE_CHK_12CHOKU, &date_12_flag);
580 updateCheckButton(hDlg, IDC_DATE_CHK_28SYUKU, &date_28_flag);
581 return (TRUE);
582 }
583 break;
584 case WM_HELP:
585 commonHelpControl(propHelpID, (LPHELPINFO)lParam);
586 return (TRUE);
587 }
588
589 return (FALSE);
590 }
591
birthdayTabProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)592 LRESULT CALLBACK birthdayTabProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
593 {
594 int i;
595 BOOL bFlag;
596
597 switch (iMessage) {
598 case WM_INITDIALOG:
599 setDropListInt(hDlg, IDC_BIRTH_CBBOX_NOTICE, list_notice, MAXLIST(list_notice), birthday_notice_flag);
600 SetDlgItemInt(hDlg, IDC_BIRTH_EDIT_NOTICE, birthday_notice_range, TRUE);
601 SendDlgItemMessage(hDlg, IDC_BIRTH_EDIT_NOTICE, EM_LIMITTEXT, 2, 0L);
602 SendDlgItemMessage(hDlg, IDC_BIRTH_UPDOWN_NOTICE, UDM_SETRANGE, 0, (LPARAM)MAKELONG(MAX_DAYOFMONTH, 0));
603 setDropListInt(hDlg, IDC_BIRTH_CBBOX_AGE, list_age, MAXLIST(list_age), birthday_agelevel);
604 setDropListInt(hDlg, IDC_BIRTH_CBBOX_AGESORT, list_sort, MAXLIST(list_sort), birthday_agesort);
605 setDropListText(hDlg, IDC_BIRTH_CBBOX_SORT, list_order, MAXLIST(list_order), birthday_sortorder);
606 setFileList(hDlg, IDC_BIRTH_EDIT_FILE, birthday_filetbl, MAXBIRTHFILE);
607 CheckDlgButton(hDlg, IDC_BIRTH_FLOWER, birthday_flower);
608 setDropListInt(hDlg, IDC_DEATH_CBBOX_NOTICE, list_notice, MAXLIST(list_notice), deathday_notice_flag);
609 SetDlgItemInt(hDlg, IDC_DEATH_EDIT_NOTICE, deathday_notice_range, TRUE);
610 SendDlgItemMessage(hDlg, IDC_DEATH_EDIT_NOTICE, EM_LIMITTEXT, 2, 0L);
611 SendDlgItemMessage(hDlg, IDC_DEATH_UPDOWN_NOTICE, UDM_SETRANGE, 0, (LPARAM)MAKELONG(MAX_DAYOFMONTH, 0));
612 setDropListInt(hDlg, IDC_DEATH_CBBOX_AGE, list_death_age, MAXLIST(list_death_age), deathday_agelevel);
613 setDropListInt(hDlg, IDC_BIRTH_ADDINFO, list_addinfo, MAXLIST(list_addinfo), birthday_addinfo);
614 return (TRUE);
615 case WM_NOTIFY:
616 switch (((NMHDR *)lParam)->code) {
617 case PSN_KILLACTIVE:
618 i = GetDlgItemInt(hDlg, IDC_BIRTH_EDIT_NOTICE, &bFlag, TRUE);
619 if (bFlag == FALSE || i < 0 || i > MAX_DAYOFMONTH) {
620 LoadString(ghInstance, IDC_BIRTH_EDIT_NOTICE, szText, sizeof(szText));
621 sprintf(msg, "%s���ϰ���ˤ���ޤ���", szText);
622 MessageBox(hDlg, msg, "�ϰϥ��顼", MB_ICONINFORMATION | MB_OK);
623 SetWindowLong(hDlg, DWL_MSGRESULT, TRUE);
624 }
625 return (TRUE);
626 case PSN_APPLY:
627 updateCheckDropListInt(hDlg, IDC_BIRTH_CBBOX_NOTICE, &birthday_notice_flag);
628 updateCheckEditInt(hDlg, IDC_BIRTH_EDIT_NOTICE, &birthday_notice_range);
629 updateCheckDropListInt(hDlg, IDC_BIRTH_CBBOX_AGE, &birthday_agelevel);
630 updateCheckDropListInt(hDlg, IDC_BIRTH_CBBOX_AGESORT, &birthday_agesort);
631 updateCheckEditText(hDlg, IDC_BIRTH_CBBOX_SORT, &birthday_sortorder);
632 updateCheckEditTextList(hDlg, IDC_BIRTH_EDIT_FILE, &birthday_filetbl[0], MAXBIRTHFILE);
633 updateCheckButton(hDlg, IDC_BIRTH_FLOWER, &birthday_flower);
634 updateCheckDropListInt(hDlg, IDC_DEATH_CBBOX_NOTICE, &deathday_notice_flag);
635 updateCheckEditInt(hDlg, IDC_DEATH_EDIT_NOTICE, &deathday_notice_range);
636 updateCheckDropListInt(hDlg, IDC_DEATH_CBBOX_AGE, &deathday_agelevel);
637 updateCheckDropListInt(hDlg, IDC_BIRTH_ADDINFO, &birthday_addinfo);
638 return (TRUE);
639 }
640 break;
641 case WM_HELP:
642 commonHelpControl(propHelpID, (LPHELPINFO)lParam);
643 return (TRUE);
644 }
645
646 return (FALSE);
647 }
648
eventTabProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)649 LRESULT CALLBACK eventTabProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
650 {
651 int i;
652 BOOL bFlag;
653
654 switch (iMessage) {
655 case WM_INITDIALOG:
656 setDropListInt(hDlg, IDC_EVENT_CBBOX_NOTICE, list_notice, MAXLIST(list_notice), event_notice_flag);
657 SetDlgItemInt(hDlg, IDC_EVENT_EDIT_NOTICE, event_notice_range, TRUE);
658 SendDlgItemMessage(hDlg, IDC_EVENT_EDIT_NOTICE, EM_LIMITTEXT, 2, 0L);
659 SendDlgItemMessage(hDlg, IDC_EVENT_UPDOWN_NOTICE, UDM_SETRANGE, 0, (LPARAM)MAKELONG(MAX_DAYOFMONTH, 0));
660 CheckDlgButton(hDlg, IDC_EVENT_CHK_RANGE, event_range_flag);
661 setDropListText(hDlg, IDC_EVENT_CBBOX_SORT, list_order, MAXLIST(list_order), event_sortorder);
662 setFileList(hDlg, IDC_EVENT_EDIT_FILE1, event_filetbl, MAXEVENTFILE);
663 setFileList(hDlg, IDC_EVENT_EDIT_FILE2, week_filetbl, MAXWEEKFILE);
664 return (TRUE);
665 case WM_NOTIFY:
666 switch (((NMHDR *)lParam)->code) {
667 case PSN_KILLACTIVE:
668 i = GetDlgItemInt(hDlg, IDC_EVENT_EDIT_NOTICE, &bFlag, TRUE);
669 if (bFlag == FALSE || i < 0 || i > MAX_DAYOFMONTH) {
670 LoadString(ghInstance, IDC_EVENT_EDIT_NOTICE, szText, sizeof(szText));
671 sprintf(msg, "%s���ϰ���ˤ���ޤ���", szText);
672 MessageBox(hDlg, msg, "�ϰϥ��顼", MB_ICONINFORMATION | MB_OK);
673 SetWindowLong(hDlg, DWL_MSGRESULT, TRUE);
674 }
675 return (TRUE);
676 case PSN_APPLY:
677 updateCheckDropListInt(hDlg, IDC_EVENT_CBBOX_NOTICE, &event_notice_flag);
678 updateCheckEditInt(hDlg, IDC_EVENT_EDIT_NOTICE, &event_notice_range);
679 updateCheckButton(hDlg, IDC_EVENT_CHK_RANGE, &event_range_flag);
680 updateCheckEditText(hDlg, IDC_EVENT_CBBOX_SORT, &event_sortorder);
681 updateCheckEditTextList(hDlg, IDC_EVENT_EDIT_FILE1, event_filetbl, MAXEVENTFILE);
682 updateCheckEditTextList(hDlg, IDC_EVENT_EDIT_FILE2, week_filetbl, MAXWEEKFILE);
683 return (TRUE);
684 }
685 break;
686 case WM_HELP:
687 commonHelpControl(propHelpID, (LPHELPINFO)lParam);
688 return (TRUE);
689 }
690
691 return (FALSE);
692 }
693
694 static
sortLevelList(const void * x,const void * y)695 int sortLevelList(const void *x, const void *y)
696 {
697 int diff;
698
699 diff = ((struct LEVEL_LIST *)x)->level - ((struct LEVEL_LIST *)y)->level;
700 if (diff == 0) {
701 diff = strcmp(((struct LEVEL_LIST *)x)->string, ((struct LEVEL_LIST *)y)->string);
702 }
703 return (diff);
704 }
705
706 static
addLevelList(HWND hDlg,struct LEVEL_LIST * levellist)707 void addLevelList(HWND hDlg, struct LEVEL_LIST *levellist)
708 {
709 int i;
710 struct LEVEL_LIST *list;
711
712 list = (struct LEVEL_LIST *)malloc(sizeof(struct LEVEL_LIST) * MAXLVAR);
713 if (list != NULL) {
714 for (i = 0; i < MAXLVAR; i++) {
715 list[i] = levellist[i];
716 }
717
718 qsort(list, MAXLVAR, sizeof(struct LEVEL_LIST), sortLevelList);
719
720 SendDlgItemMessage(hDlg, IDC_LEVEL_LIST, LB_RESETCONTENT, 0, 0L);
721 for (i = 0; i < MAXLVAR; i++) {
722 SendDlgItemMessage(hDlg,IDC_LEVEL_LIST, LB_ADDSTRING, 0, (LPARAM)list[i].string);
723 }
724
725 free(list);
726 }
727 }
728
729 static
createLevelList(HWND hDlg,char level[MAXLVAR])730 void createLevelList(HWND hDlg, char level[MAXLVAR])
731 {
732 int i;
733
734 levellist = (struct LEVEL_LIST *)malloc(sizeof(struct LEVEL_LIST) * MAXLVAR);
735 if (levellist != NULL) {
736 for (i = 0; i < MAXLVAR; i++) {
737 LoadString(ghInstance, IDC_LEVEL_EDIT_00 + i, szText, sizeof(szText));
738 levellist[i].level = level[i];
739 levellist[i].string = xstrdup(szText);
740 SetDlgItemInt(hDlg, IDC_LEVEL_EDIT_00 + i, (int)level[i], TRUE);
741 SendDlgItemMessage(hDlg, IDC_LEVEL_EDIT_00 + i, EM_LIMITTEXT, 2, 0L);
742 }
743 SendDlgItemMessage(hDlg, IDC_LEVEL_LIST, WM_SETFONT, (WPARAM)hfontPreview, TRUE);
744 addLevelList(hDlg, levellist);
745 }
746 }
747
748 static
deleteLevelList(void)749 void deleteLevelList(void)
750 {
751 int i;
752
753 if (levellist != NULL) {
754 for (i = 0; i < MAXLVAR; i++) {
755 if (levellist[i].string != NULL) {
756 free((char *)levellist[i].string);
757 }
758 }
759 free(levellist);
760 levellist = NULL;
761 }
762 }
763
levelTabProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)764 LRESULT CALLBACK levelTabProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
765 {
766 static BOOL bCritical = FALSE;
767 int i;
768 int n;
769 BOOL bFlag;
770 char *p;
771 char level[MAXLVAR];
772 char buf[MAXLVAR * 2 + 1];
773
774 switch (iMessage) {
775 case WM_INITDIALOG:
776 memset(level, 99, sizeof(level));
777 if (event_level_str != NULL) {
778 p = event_level_str;
779 i = 0;
780 while (*p != '\0' && i < MAXLVAR) {
781 if (sscanf(p, "%02d", &n) != 1) {
782 break;
783 }
784 level[i++] = (char)n;
785 p += 2;
786 }
787 }
788 bCritical = TRUE;
789 createLevelList(hDlg, level);
790 bCritical = FALSE;
791 return (TRUE);
792 case WM_COMMAND:
793 switch (HIWORD(wParam)) {
794 case EN_CHANGE:
795 if (levellist != NULL &&
796 bCritical == FALSE &&
797 LOWORD(wParam) >= IDC_LEVEL_EDIT_00 && LOWORD(wParam) <= IDC_LEVEL_EDIT_00 + MAXLVAR - 1) {
798 n = GetDlgItemInt(hDlg, LOWORD(wParam), &bFlag, TRUE);
799 if (n < 0) {
800 n = 0;
801 }
802 levellist[LOWORD(wParam) - IDC_LEVEL_EDIT_00].level = n;
803 addLevelList(hDlg, levellist);
804 return (TRUE);
805 }
806 }
807 break;
808 case WM_NOTIFY:
809 switch (((NMHDR *)lParam)->code) {
810 case PSN_APPLY:
811 p = buf;
812 for (i = 0; i < MAXLVAR; i++) {
813 n = GetDlgItemInt(hDlg, IDC_LEVEL_EDIT_00 + i, &bFlag, TRUE);
814 if (n < 0) {
815 n = 0;
816 }
817 sprintf(p, "%02d", n);
818 p += 2;
819 }
820 *p = '\0';
821 if (event_level_str == NULL || strcmp(event_level_str, buf) != 0) {
822 if (event_level_str != NULL) {
823 free(event_level_str);
824 }
825 event_level_str = xstrdup(buf);
826 bChange = TRUE;
827 }
828 return (TRUE);
829 }
830 break;
831 case WM_HELP:
832 commonHelpControl(propHelpID, (LPHELPINFO)lParam);
833 return (TRUE);
834 }
835
836 return (FALSE);
837 }
838
historyTabProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)839 LRESULT CALLBACK historyTabProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
840 {
841 int i;
842 UINT idCtrl;
843
844 switch (iMessage) {
845 case WM_INITDIALOG:
846 CheckDlgButton(hDlg, IDC_HIST_CHK_BOTH_DATE, history_both_date);
847 setDropListInt(hDlg, IDC_HIST_CBBOX_YEARCOM, list_hist_year, MAXLIST(list_hist_year), history_year_comment);
848 setDropListInt(hDlg, IDC_HIST_CBBOX_ADDINFO, list_addinfo, MAXLIST(list_addinfo), history_addinfo);
849 setDropListInt(hDlg, IDC_HIST_CBBOX_MSGTYPE, list_type, MAXLIST(list_type), history_foldtype);
850 SetDlgItemText(hDlg, IDC_HIST_TEXT_PREVIEW, (LPCTSTR)msg_preview1[history_foldtype]);
851 SendDlgItemMessage(hDlg, IDC_HIST_TEXT_PREVIEW, WM_SETFONT, (WPARAM)hfontPreview, TRUE);
852 setDropListInt(hDlg, IDC_HIST_CBBOX_SORT, list_sort, MAXLIST(list_sort), history_sort);
853 setFileList(hDlg, IDC_HIST_EDIT_FILE, history_filetbl, MAXHISTORYFILE);
854 return (TRUE);
855 case WM_COMMAND:
856 switch (HIWORD(wParam)) {
857 case CBN_SELENDOK:
858 idCtrl = LOWORD(wParam);
859 if (idCtrl == IDC_HIST_CBBOX_MSGTYPE) {
860 i = SendMessage((HWND)lParam, CB_GETCURSEL, 0, 0L);
861 if (i != CB_ERR) {
862 SetDlgItemText(hDlg, IDC_HIST_TEXT_PREVIEW, (LPCTSTR)msg_preview1[i]);
863 } else {
864 SetDlgItemText(hDlg, IDC_HIST_TEXT_PREVIEW, (LPCTSTR)"");
865 }
866 return (TRUE);
867 }
868 break;
869 }
870 break;
871 case WM_NOTIFY:
872 switch (((NMHDR *)lParam)->code) {
873 case PSN_APPLY:
874 updateCheckButton(hDlg, IDC_HIST_CHK_BOTH_DATE, &history_both_date);
875 updateCheckDropListInt(hDlg, IDC_HIST_CBBOX_YEARCOM, &history_year_comment);
876 updateCheckDropListInt(hDlg, IDC_HIST_CBBOX_ADDINFO, &history_addinfo);
877 i = history_foldtype;
878 updateCheckDropListInt(hDlg, IDC_HIST_CBBOX_MSGTYPE, &i);
879 history_foldtype = i;
880 updateCheckDropListInt(hDlg, IDC_HIST_CBBOX_SORT, &history_sort);
881 updateCheckEditTextList(hDlg, IDC_HIST_EDIT_FILE, history_filetbl, MAXHISTORYFILE);
882 return (TRUE);
883 }
884 break;
885 case WM_HELP:
886 commonHelpControl(propHelpID, (LPHELPINFO)lParam);
887 return (TRUE);
888 }
889
890 return (FALSE);
891 }
892
scheduleTabProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)893 LRESULT CALLBACK scheduleTabProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
894 {
895 int i;
896 BOOL bFlag;
897 UINT idCtrl;
898
899 switch (iMessage) {
900 case WM_INITDIALOG:
901 SetDlgItemInt(hDlg, IDC_SCHE_EDIT_NOTICE, schedule_limit, TRUE);
902 SendDlgItemMessage(hDlg, IDC_SCHE_EDIT_NOTICE, EM_LIMITTEXT, 3, 0L);
903 SendDlgItemMessage(hDlg, IDC_SCHE_UPDOWN_NOTICE, UDM_SETRANGE, 0, (LPARAM)MAKELONG(MAX_DAYOFMONTH, -MAX_DAYOFMONTH));
904 setDropListInt(hDlg, IDC_SCHE_CBBOX_MSGTYPE, list_type, MAXLIST(list_type), schedule_foldtype);
905 SetDlgItemText(hDlg, IDC_SCHE_TEXT_PREVIEW, (LPCTSTR)msg_preview2[schedule_foldtype]);
906 SendDlgItemMessage(hDlg, IDC_SCHE_TEXT_PREVIEW, WM_SETFONT, (WPARAM)hfontPreview, TRUE);
907 setFileList(hDlg, IDC_SCHE_EDIT_FILE, schedule_filetbl, MAXSCHEDULEFILE);
908 return (TRUE);
909 case WM_COMMAND:
910 switch (HIWORD(wParam)) {
911 case CBN_SELENDOK:
912 idCtrl = LOWORD(wParam);
913 if (idCtrl == IDC_SCHE_CBBOX_MSGTYPE) {
914 i = SendMessage((HWND)lParam, CB_GETCURSEL, 0, 0L);
915 if (i != CB_ERR) {
916 SetDlgItemText(hDlg, IDC_SCHE_TEXT_PREVIEW, (LPCTSTR)msg_preview2[i]);
917 } else {
918 SetDlgItemText(hDlg, IDC_SCHE_TEXT_PREVIEW, (LPCTSTR)"");
919 }
920 return (TRUE);
921 }
922 break;
923 }
924 break;
925 case WM_NOTIFY:
926 switch (((NMHDR *)lParam)->code) {
927 case PSN_KILLACTIVE:
928 i = GetDlgItemInt(hDlg, IDC_SCHE_EDIT_NOTICE, &bFlag, TRUE);
929 if (bFlag == FALSE) {
930 LoadString(ghInstance, IDC_SCHE_EDIT_NOTICE, szText, sizeof(szText));
931 sprintf(msg, "%s�ˤϿ��ͤ����Ϥ��Ʋ�����", szText);
932 MessageBox(hDlg, msg, "���ϥ��顼", MB_ICONINFORMATION | MB_OK);
933 SetWindowLong(hDlg, DWL_MSGRESULT, TRUE);
934 } else if (i < -MAX_DAYOFMONTH || i > MAX_DAYOFMONTH) {
935 LoadString(ghInstance, IDC_SCHE_EDIT_NOTICE, szText, sizeof(szText));
936 sprintf(msg, "%s���ϰ���ˤ���ޤ���", szText);
937 MessageBox(hDlg, msg, "�ϰϥ��顼", MB_ICONINFORMATION | MB_OK);
938 SetWindowLong(hDlg, DWL_MSGRESULT, TRUE);
939 }
940 return (TRUE);
941 case PSN_APPLY:
942 updateCheckEditInt(hDlg, IDC_SCHE_EDIT_NOTICE, &schedule_limit);
943 i = schedule_foldtype;
944 updateCheckDropListInt(hDlg, IDC_SCHE_CBBOX_MSGTYPE, &i);
945 schedule_foldtype = i;
946 updateCheckEditTextList(hDlg, IDC_SCHE_EDIT_FILE, schedule_filetbl, MAXSCHEDULEFILE);
947 return (TRUE);
948 }
949 break;
950 case WM_HELP:
951 commonHelpControl(propHelpID, (LPHELPINFO)lParam);
952 return (TRUE);
953 }
954
955 return (FALSE);
956 }
957
scrnEnumFontProc(ENUMLOGFONTEX * lpelfe,NEWTEXTMETRICEX * lpntme,DWORD nFontType,LPARAM lParam)958 int CALLBACK scrnEnumFontProc(ENUMLOGFONTEX *lpelfe, NEWTEXTMETRICEX *lpntme, DWORD nFontType, LPARAM lParam)
959 {
960 // if (nFontType & TRUETYPE_FONTTYPE) {
961 if (lpelfe->elfLogFont.lfFaceName[0] != '@') {
962 if (IsWindow((HWND)lParam)) {
963 SendMessage((HWND)lParam, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)lpelfe->elfLogFont.lfFaceName);
964 }
965 }
966 // }
967
968 return (TRUE);
969 }
970
971 static
scrnSetFontList(HWND hwnd,int ctrlID)972 void scrnSetFontList(HWND hwnd, int ctrlID)
973 {
974 LOGFONT lf;
975 HDC hdc;
976 int n;
977
978 SendDlgItemMessage(hwnd, ctrlID, CB_ADDSTRING, 0, (LPARAM)TEXT_SYSFONTNAME);
979 SendDlgItemMessage(hwnd, ctrlID, CB_SETCURSEL, 0, 0);
980 memset(&lf, 0, sizeof(lf));
981 lf.lfCharSet = SHIFTJIS_CHARSET;
982 hdc = GetDC(hwnd);
983 EnumFontFamiliesEx(hdc, &lf, (FONTENUMPROC)scrnEnumFontProc, (LPARAM)GetDlgItem(hwnd, ctrlID), 0);
984 ReleaseDC(hwnd, hdc);
985
986 if (disp_fontname != NULL) {
987 n = SendDlgItemMessage(hwnd, ctrlID, CB_FINDSTRING, -1, (LPARAM)disp_fontname);
988 if (n != CB_ERR) {
989 SendDlgItemMessage(hwnd, ctrlID, CB_SETCURSEL, n, 0);
990 }
991 }
992 }
993
994 /*
995 * ���Ѹ塢free() ��Ƥ֤���
996 * �����ƥ�ե���Ȼ���NULL ���֤�
997 */
998 static
scrnGetFontName(HWND hwnd,int ctrlID)999 char *scrnGetFontName(HWND hwnd, int ctrlID)
1000 {
1001 int n;
1002 int textlen;
1003 char *fontname = NULL;
1004
1005 n = SendDlgItemMessage(hwnd, ctrlID, CB_GETCURSEL, 0, 0);
1006 if (n != CB_ERR) {
1007 textlen = SendDlgItemMessage(hwnd, ctrlID, CB_GETLBTEXTLEN, n, 0);
1008 if (textlen != CB_ERR) {
1009 fontname = malloc(textlen + 1);
1010 if (fontname != NULL) {
1011 if (SendDlgItemMessage(hwnd, ctrlID, CB_GETLBTEXT, n, (LPARAM)fontname) == CB_ERR ||
1012 strcmp(fontname, TEXT_SYSFONTNAME) == 0) {
1013 free(fontname);
1014 fontname = NULL; /* �����ƥ�ե���Ȥ�����Ƥ��� */
1015 }
1016 }
1017 }
1018 }
1019
1020 return (fontname);
1021 }
1022
1023 /*
1024 * �����ƥ�ե���Ȼ���NULL ���֤�
1025 */
1026 static
scrnGetFontObject(HWND hwnd,int ctrlID,int ctrlID2)1027 HFONT scrnGetFontObject(HWND hwnd, int ctrlID, int ctrlID2)
1028 {
1029 char *new_fontname;
1030 int new_fontsize;
1031 HFONT hFont = NULL;
1032 BOOL bFlag;
1033
1034 new_fontname = scrnGetFontName(hwnd, ctrlID);
1035 if (new_fontname != NULL) {
1036 new_fontsize = GetDlgItemInt(hwnd, ctrlID2, &bFlag, TRUE);
1037 if (bFlag != TRUE) {
1038 new_fontsize = 0;
1039 }
1040 hFont = createDisplayFontObject(hwnd, new_fontname, &new_fontsize);
1041 free(new_fontname);
1042 }
1043
1044 return (hFont);
1045 }
1046
1047 static
scrnUpdateCheckFontName(HWND hwnd,int ctrlID,char ** fontname)1048 void scrnUpdateCheckFontName(HWND hwnd, int ctrlID, char **fontname)
1049 {
1050 char *new_fontname;
1051
1052 new_fontname = scrnGetFontName(hwnd, ctrlID);
1053
1054 if ((*fontname == NULL && new_fontname != NULL) ||
1055 (*fontname != NULL && new_fontname == NULL) ||
1056 (*fontname != NULL && new_fontname != NULL &&
1057 strcmp(*fontname, new_fontname) != 0)) {
1058 if (*fontname != NULL) {
1059 free(*fontname);
1060 }
1061 *fontname = new_fontname;
1062 bChange = TRUE;
1063 bChangeDisplayParam = TRUE;
1064 } else {
1065 if (new_fontname != NULL) {
1066 free(new_fontname);
1067 }
1068 }
1069 }
1070
1071 static
scrnUpdateCheckEditInt(HWND hDlg,int ctrlID,int * ip)1072 void scrnUpdateCheckEditInt(HWND hDlg, int ctrlID, int *ip)
1073 {
1074 int x;
1075 BOOL bFlag;
1076
1077 x = GetDlgItemInt(hDlg, ctrlID, &bFlag, TRUE);
1078 if (bFlag == TRUE && *ip != x) {
1079 *ip = x;
1080 bChange = TRUE;
1081 bChangeDisplayParam = TRUE;
1082 }
1083 }
1084
screenTabProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)1085 LRESULT CALLBACK screenTabProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
1086 {
1087 static int ctrlTbl[5] = {
1088 IDC_SCRN_EDIT_W, IDC_SCRN_EDIT_H, IDC_SCRN_EDIT_C01, IDC_SCRN_EDIT_C02,
1089 IDC_SCRN_FONTSIZE,
1090 };
1091 int i;
1092 int j;
1093 int col;
1094 BOOL bErr;
1095 BOOL bFlag;
1096 UINT idCtrl;
1097 LPDRAWITEMSTRUCT lpDIS;
1098 HBRUSH hBrush;
1099 HFONT hFont;
1100 HFONT oldFont;
1101
1102 switch (iMessage) {
1103 case WM_INITDIALOG:
1104 SetDlgItemInt(hDlg, IDC_SCRN_EDIT_W, screen_max_columns, TRUE);
1105 SendDlgItemMessage(hDlg, IDC_SCRN_EDIT_W, EM_LIMITTEXT, 3, 0L);
1106 SendDlgItemMessage(hDlg, IDC_SCRN_UPDOWN_W, UDM_SETRANGE, 0, (LPARAM)MAKELONG(MAX_SCRN_W, MIN_SCRN_W));
1107 SetDlgItemInt(hDlg, IDC_SCRN_EDIT_H, screen_max_rows, TRUE);
1108 SendDlgItemMessage(hDlg, IDC_SCRN_EDIT_H, EM_LIMITTEXT, 3, 0L);
1109 SendDlgItemMessage(hDlg, IDC_SCRN_UPDOWN_H, UDM_SETRANGE, 0, (LPARAM)MAKELONG(MAX_SCRN_H, MIN_SCRN_H));
1110 SetDlgItemInt(hDlg, IDC_SCRN_EDIT_C01, win_default_color & 0x0F, TRUE);
1111 SendDlgItemMessage(hDlg, IDC_SCRN_EDIT_C01, EM_LIMITTEXT, 2, 0L);
1112 SetDlgItemInt(hDlg, IDC_SCRN_EDIT_C02, (win_default_color >> 4) & 0x0F, TRUE);
1113 SendDlgItemMessage(hDlg, IDC_SCRN_EDIT_C02, EM_LIMITTEXT, 2, 0L);
1114 scrnSetFontList(hDlg, IDC_SCRN_FONTLIST);
1115 SetDlgItemInt(hDlg, IDC_SCRN_FONTSIZE, disp_fontsize, TRUE);
1116 SendDlgItemMessage(hDlg, IDC_SCRN_FONTSIZE, EM_LIMITTEXT, 2, 0L);
1117 SendDlgItemMessage(hDlg, IDC_SCRN_UPDOWN_FS, UDM_SETRANGE, 0, (LPARAM)MAKELONG(MAX_FONTSIZE, MIN_FONTSIZE));
1118 if (CHK_EXTFLAGS(EXTFLAGS_FONTCHOOSE) == 0) {
1119 ShowWindow(GetDlgItem(hDlg, IDC_SCRN_FONTLIST), SW_HIDE);
1120 ShowWindow(GetDlgItem(hDlg, IDC_SCRN_FONTSIZE), SW_HIDE);
1121 ShowWindow(GetDlgItem(hDlg, IDC_SCRN_UPDOWN_FS), SW_HIDE);
1122 ShowWindow(GetDlgItem(hDlg, IDC_SCRN_FONTSIZET), SW_HIDE);
1123 }
1124 return (TRUE);
1125 case WM_COMMAND:
1126 idCtrl = LOWORD(wParam);
1127 switch (HIWORD(wParam)) {
1128 case EN_CHANGE:
1129 if (idCtrl == IDC_SCRN_EDIT_C01 || idCtrl == IDC_SCRN_EDIT_C02) {
1130 InvalidateRect(GetDlgItem(hDlg, idCtrl - IDC_SCRN_EDIT_C01 + IDC_SCRN_DRAW_01), NULL, FALSE);
1131 InvalidateRect(GetDlgItem(hDlg, IDC_SCRN_PREVIEW), NULL, FALSE);
1132 return (TRUE);
1133 } else if (idCtrl == IDC_SCRN_FONTSIZE) {
1134 InvalidateRect(GetDlgItem(hDlg, IDC_SCRN_PREVIEW), NULL, FALSE);
1135 return (TRUE);
1136 }
1137 break;
1138 case CBN_SELCHANGE:
1139 // case STN_DBLCLK: /* CBN_SELCHANGE ��Ʊ���� */
1140 if (idCtrl == IDC_SCRN_FONTLIST) {
1141 InvalidateRect(GetDlgItem(hDlg, IDC_SCRN_PREVIEW), NULL, FALSE);
1142 return (TRUE);
1143 } else if (idCtrl == IDC_SCRN_DRAW_01 || idCtrl == IDC_SCRN_DRAW_02) {
1144 idCtrl = idCtrl - IDC_SCRN_DRAW_01 + IDC_SCRN_EDIT_C01;
1145 col = GetDlgItemInt(hDlg, idCtrl, &bFlag, TRUE);
1146 if (bFlag == FALSE || col < 0 || col >= MAX_COLORMAP) {
1147 col = 0;
1148 }
1149 if (SelectColorMapNo(hDlg, ghInstance, &col, win_colormap, MAX_COLORMAP) == TRUE) {
1150 SetDlgItemInt(hDlg, idCtrl, col, TRUE);
1151 SetFocus(GetDlgItem(hDlg, idCtrl));
1152 SendDlgItemMessage(hDlg, idCtrl, EM_SETSEL, 0, -1);
1153 InvalidateRect((HWND)lParam, NULL, FALSE);
1154 }
1155 return (TRUE);
1156 }
1157 break;
1158 }
1159 break;
1160 case WM_DRAWITEM:
1161 idCtrl = (UINT)wParam;
1162 lpDIS = (LPDRAWITEMSTRUCT)lParam;
1163 if (idCtrl == IDC_SCRN_DRAW_01 || idCtrl == IDC_SCRN_DRAW_02) {
1164 col = GetDlgItemInt(hDlg, idCtrl - IDC_SCRN_DRAW_01 + IDC_SCRN_EDIT_C01, &bFlag, TRUE);
1165 if (bFlag == TRUE && col >= 0 && col < MAX_COLORMAP) {
1166 hBrush = CreateSolidBrush(RGB2PALETTERGB(win_colormap[col]));
1167 FillRect(lpDIS->hDC, &lpDIS->rcItem, hBrush);
1168 DeleteObject(hBrush);
1169 return (TRUE);
1170 } else {
1171 hBrush = (HBRUSH)SendMessage(hDlg, WM_CTLCOLORDLG, (WPARAM)lpDIS->hDC, (LPARAM)lpDIS->hwndItem);
1172 FillRect(lpDIS->hDC, &lpDIS->rcItem, hBrush);
1173 return (TRUE);
1174 }
1175 } else if (idCtrl >= IDC_SCRN_DRAW_S00 && idCtrl < (IDC_SCRN_DRAW_S00 + MAX_COLORMAP)) {
1176 hBrush = CreateSolidBrush(RGB2PALETTERGB(win_colormap[idCtrl - IDC_SCRN_DRAW_S00]));
1177 FillRect(lpDIS->hDC, &lpDIS->rcItem, hBrush);
1178 DeleteObject(hBrush);
1179 return (TRUE);
1180 } else if (idCtrl == IDC_SCRN_PREVIEW) {
1181 int fc, bc;
1182 RECT wRc;
1183
1184 fc = GetDlgItemInt(hDlg, IDC_SCRN_EDIT_C01, &bFlag, TRUE);
1185 if (bFlag == TRUE && fc >= 0 && fc < MAX_COLORMAP) {
1186 fc = RGB2PALETTERGB(win_colormap[fc]);
1187 } else {
1188 fc = GetSysColor(COLOR_MENU);
1189 }
1190 bc = GetDlgItemInt(hDlg, IDC_SCRN_EDIT_C02, &bFlag, TRUE);
1191 if (bFlag == TRUE && bc >= 0 && bc < MAX_COLORMAP) {
1192 bc = RGB2PALETTERGB(win_colormap[bc]);
1193 } else {
1194 bc = GetSysColor(COLOR_MENU);
1195 }
1196 SetTextColor(lpDIS->hDC, fc);
1197 SetBkColor(lpDIS->hDC, bc);
1198 GetClientRect(hDlg, &wRc);
1199 hBrush = CreateSolidBrush(bc);
1200 FillRect(lpDIS->hDC, &wRc, hBrush);
1201 DeleteObject(hBrush);
1202 hFont = scrnGetFontObject(hDlg, IDC_SCRN_FONTLIST, IDC_SCRN_FONTSIZE);
1203 if (hFont == NULL) {
1204 oldFont = SelectObject(lpDIS->hDC, GetStockObject(SYSTEM_FIXED_FONT));
1205 } else {
1206 oldFont = SelectObject(lpDIS->hDC, hFont);
1207 }
1208 DrawText(lpDIS->hDC, MSG_PREVIEW_TEXT, -1, &wRc, DT_LEFT | DT_NOCLIP | DT_NOPREFIX);
1209 SelectObject(lpDIS->hDC, oldFont);
1210 if (hFont != NULL) {
1211 DeleteObject(hFont);
1212 }
1213 return (TRUE);
1214 }
1215 break;
1216 case WM_NOTIFY:
1217 switch (((NMHDR *)lParam)->code) {
1218 case PSN_KILLACTIVE:
1219 bErr = FALSE;
1220 for (i = 0; i < 5; i++) {
1221 j = GetDlgItemInt(hDlg, ctrlTbl[i], &bFlag, TRUE);
1222 switch (i) {
1223 case 0:
1224 if (bFlag == FALSE || j < MIN_SCRN_W || j > MAX_SCRN_W) {
1225 bErr = TRUE;
1226 }
1227 break;
1228 case 1:
1229 if (bFlag == FALSE || j < MIN_SCRN_H || j > MAX_SCRN_H) {
1230 bErr = TRUE;
1231 }
1232 break;
1233 case 2:
1234 case 3:
1235 if (bFlag == FALSE || j < 0 || j >= MAX_COLORMAP) {
1236 bErr = TRUE;
1237 }
1238 break;
1239 case 4:
1240 if (bFlag == FALSE || j < MIN_FONTSIZE || j > MAX_FONTSIZE) {
1241 bErr = TRUE;
1242 }
1243 break;
1244 }
1245 if (bErr == TRUE) {
1246 LoadString(ghInstance, ctrlTbl[i], szText, sizeof(szText));
1247 sprintf(msg, "%s���ϰ���ˤ���ޤ���", szText);
1248 MessageBox(hDlg, msg, "�ϰϥ��顼", MB_ICONINFORMATION | MB_OK);
1249 SetWindowLong(hDlg, DWL_MSGRESULT, TRUE);
1250 break;
1251 }
1252 }
1253 return (TRUE);
1254 case PSN_APPLY:
1255 scrnUpdateCheckEditInt(hDlg, IDC_SCRN_EDIT_W, &screen_max_columns);
1256 scrnUpdateCheckEditInt(hDlg, IDC_SCRN_EDIT_H, &screen_max_rows);
1257 i = win_default_color & 0x0F;
1258 j = (win_default_color >> 4) & 0x0F;
1259 scrnUpdateCheckEditInt(hDlg, IDC_SCRN_EDIT_C01, &i);
1260 scrnUpdateCheckEditInt(hDlg, IDC_SCRN_EDIT_C02, &j);
1261 win_default_color = (j << 4) | i;
1262 scrnUpdateCheckFontName(hDlg, IDC_SCRN_FONTLIST, &disp_fontname);
1263 scrnUpdateCheckEditInt(hDlg, IDC_SCRN_FONTSIZE, &disp_fontsize);
1264 return (TRUE);
1265 }
1266 break;
1267 case WM_HELP:
1268 commonHelpControl(propHelpID, (LPHELPINFO)lParam);
1269 return (TRUE);
1270 }
1271
1272 return (FALSE);
1273 }
1274
fileTabProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)1275 LRESULT CALLBACK fileTabProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
1276 {
1277 switch (iMessage) {
1278 case WM_INITDIALOG:
1279 CheckDlgButton(hDlg, IDC_FILE_CHK_FKEEP, pager_filekeep);
1280 setEditText(hDlg, IDC_FILE_EDIT_FPATH, pager_filelog_path);
1281 setEditText(hDlg, IDC_FILE_EDIT_FNAME, pager_outputfile);
1282 setEditText(hDlg, IDC_FILE_EDIT_SUFFIX, suffix_file);
1283 setEditText(hDlg, IDC_FILE_EDIT_TABLE, search_path);
1284 return (TRUE);
1285 case WM_NOTIFY:
1286 switch (((NMHDR *)lParam)->code) {
1287 case PSN_APPLY:
1288 updateCheckButton(hDlg, IDC_FILE_CHK_FKEEP, &pager_filekeep);
1289 updateCheckEditText(hDlg, IDC_FILE_EDIT_FPATH, &pager_filelog_path);
1290 updateCheckEditText(hDlg, IDC_FILE_EDIT_FNAME, &pager_outputfile);
1291 updateCheckEditText(hDlg, IDC_FILE_EDIT_SUFFIX, &suffix_file);
1292 updateCheckEditText(hDlg, IDC_FILE_EDIT_TABLE, &search_path);
1293 return (TRUE);
1294 }
1295 break;
1296 case WM_HELP:
1297 commonHelpControl(propHelpID, (LPHELPINFO)lParam);
1298 return (TRUE);
1299 }
1300
1301 return (FALSE);
1302 }
1303
rekichuTabProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)1304 LRESULT CALLBACK rekichuTabProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
1305 {
1306 char *p;
1307 char ch;
1308 int i;
1309 int flags[MAX_REKICHU];
1310
1311 switch (iMessage) {
1312 case WM_INITDIALOG:
1313 for (i = 0; i < MAX_REKICHU; i++) {
1314 flags[i] = TRUE;
1315 }
1316 if (rekichu_f_string != NULL) {
1317 p = rekichu_f_string;
1318 for (i = 0; *p != '\0' && i < MAX_REKICHU; i++, p++) {
1319 if (*p != '1') {
1320 flags[i] = FALSE;
1321 }
1322 }
1323 }
1324 for (i = 0; i < MAX_REKICHU; i++) {
1325 CheckDlgButton(hDlg, IDC_REKICHU_0001 + i, flags[i]);
1326 }
1327 return (TRUE);
1328 case WM_COMMAND:
1329 switch (HIWORD(wParam)) {
1330 case BN_CLICKED:
1331 if (LOWORD(wParam) == IDC_REKICHU_0002) {
1332 bRekichu_Kadan = (IsDlgButtonChecked(hDlg, IDC_REKICHU_0002) == 1) ? TRUE : FALSE;
1333 return (TRUE);
1334 }
1335 }
1336 break;
1337 case WM_NOTIFY:
1338 switch (((NMHDR *)lParam)->code) {
1339 case PSN_APPLY:
1340 p = malloc(sizeof(char) * MAX_REKICHU + 1);
1341 if (p != NULL) {
1342 for (i = 0; i < MAX_REKICHU; i++) {
1343 if (IsDlgButtonChecked(hDlg, IDC_REKICHU_0001 + i) == 1) {
1344 ch = '1';
1345 } else {
1346 ch = '0';
1347 }
1348 p[i] = ch;
1349 }
1350 p[i] = '\0';
1351 if (rekichu_f_string == NULL) {
1352 rekichu_f_string = p;
1353 bChange = TRUE;
1354 } else if (strcmp(rekichu_f_string, p) != 0) {
1355 free(rekichu_f_string);
1356 rekichu_f_string = p;
1357 bChange = TRUE;
1358 } else {
1359 free(p);
1360 }
1361 }
1362 return (TRUE);
1363 }
1364 break;
1365 case WM_HELP:
1366 commonHelpControl(propHelpID, (LPHELPINFO)lParam);
1367 return (TRUE);
1368 }
1369
1370 return (FALSE);
1371 }
1372
kadanTabProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)1373 LRESULT CALLBACK kadanTabProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
1374 {
1375 static const unsigned char used_bitmap[(MAX_REKICHU_KADAN + 7) / 8] = { 0xFB, 0xF1, 0x3F };
1376 char *p;
1377 char ch;
1378 int i;
1379 int flags[MAX_REKICHU_KADAN];
1380
1381 switch (iMessage) {
1382 case WM_INITDIALOG:
1383 for (i = 0; i < MAX_REKICHU_KADAN; i++) {
1384 flags[i] = TRUE;
1385 }
1386 if (rekichu_kadan_f_string != NULL) {
1387 p = rekichu_kadan_f_string;
1388 for (i = 0; *p != '\0' && i < MAX_REKICHU_KADAN; i++, p++) {
1389 if (*p != '1') {
1390 flags[i] = FALSE;
1391 }
1392 }
1393 }
1394 for (i = 0; i < MAX_REKICHU_KADAN; i++) {
1395 CheckDlgButton(hDlg, IDC_KADAN_0001 + i, flags[i]);
1396 if (bRekichu_Kadan == FALSE) {
1397 EnableWindow(GetDlgItem(hDlg, IDC_KADAN_0001 + i), FALSE);
1398 }
1399 }
1400 return (TRUE);
1401 case WM_NOTIFY:
1402 switch (((NMHDR *)lParam)->code) {
1403 case PSN_SETACTIVE:
1404 for (i = 0; i < MAX_REKICHU_KADAN; i++) {
1405 EnableWindow(GetDlgItem(hDlg, IDC_KADAN_0001 + i), bRekichu_Kadan);
1406 }
1407 return (TRUE);
1408 case PSN_APPLY:
1409 p = malloc(sizeof(char) * MAX_REKICHU_KADAN + 1);
1410 if (p != NULL) {
1411 for (i = 0; i < MAX_REKICHU_KADAN; i++) {
1412 if (CHKBIT(i, used_bitmap) == 0 || IsDlgButtonChecked(hDlg, IDC_KADAN_0001 + i) == 1) {
1413 ch = '1';
1414 } else {
1415 ch = '0';
1416 }
1417 p[i] = ch;
1418 }
1419 p[i] = '\0';
1420 if (rekichu_kadan_f_string == NULL) {
1421 rekichu_kadan_f_string = p;
1422 bChange = TRUE;
1423 } else if (strcmp(rekichu_kadan_f_string, p) != 0) {
1424 free(rekichu_kadan_f_string);
1425 rekichu_kadan_f_string = p;
1426 bChange = TRUE;
1427 } else {
1428 free(p);
1429 }
1430 }
1431 return (TRUE);
1432 }
1433 break;
1434 case WM_HELP:
1435 commonHelpControl(propHelpID, (LPHELPINFO)lParam);
1436 return (TRUE);
1437 }
1438
1439 return (FALSE);
1440 }
1441
setupPropertyProc(HWND hWnd,HINSTANCE hInstance,BOOL * bChangeDisplay)1442 BOOL setupPropertyProc(HWND hWnd, HINSTANCE hInstance, BOOL *bChangeDisplay)
1443 {
1444 static const struct PROP_TAB_TBL prop_tbl[MAX_SHEET] = {
1445 { IDD_TAB_DATE, (DLGPROC)dateTabProc },
1446 { IDD_TAB_EVENT, (DLGPROC)eventTabProc },
1447 { IDD_TAB_LEVEL, (DLGPROC)levelTabProc },
1448 { IDD_TAB_REKICHU, (DLGPROC)rekichuTabProc },
1449 { IDD_TAB_KADAN, (DLGPROC)kadanTabProc },
1450 { IDD_TAB_BIRTHDAY, (DLGPROC)birthdayTabProc },
1451 { IDD_TAB_HISTORY, (DLGPROC)historyTabProc },
1452 { IDD_TAB_SCHEDULE, (DLGPROC)scheduleTabProc },
1453 { IDD_TAB_DISPLAY, (DLGPROC)displayTabProc },
1454 { IDD_TAB_SCREEN, (DLGPROC)screenTabProc },
1455 { IDD_TAB_FILE, (DLGPROC)fileTabProc },
1456 };
1457 PROPSHEETPAGE psp[MAX_SHEET];
1458 PROPSHEETHEADER psh;
1459 HDC hdc;
1460 int i;
1461
1462 memset(psp, '\0', sizeof(psp));
1463
1464 for (i = 0; i < MAX_SHEET; i++) {
1465 psp[i].dwSize = sizeof(PROPSHEETPAGE);
1466 psp[i].dwFlags = PSP_DEFAULT;
1467 psp[i].hInstance = hInstance;
1468 psp[i].u.pszTemplate = MAKEINTRESOURCE(prop_tbl[i].iResID);
1469 psp[i].pfnDlgProc = prop_tbl[i].DlgProc;
1470 }
1471
1472 memset(&psh, '\0', sizeof(psh));
1473 psh.dwSize = sizeof(PROPSHEETHEADER);
1474 psh.dwFlags = PSH_PROPSHEETPAGE | PSH_PROPTITLE | PSH_NOAPPLYNOW;
1475 psh.hwndParent = hWnd;
1476 psh.hInstance = hInstance;
1477 psh.pszCaption = (LPSTR)szAppName;
1478 psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
1479 psh.u2.nStartPage = 8;
1480 psh.u3.ppsp = (LPCPROPSHEETPAGE)&psp;
1481
1482 hdc = GetDC(hWnd);
1483 hfontPreview = CreateFont(-MulDiv(9, GetDeviceCaps(hdc, LOGPIXELSY), 72), 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "�ͣ� �����å�");
1484 ReleaseDC(hWnd, hdc);
1485
1486 ghInstance = hInstance;
1487
1488 bChange = FALSE;
1489 if (rekichu_f_string == NULL || strlen(rekichu_f_string) < 2 || rekichu_f_string[1] == '1') {
1490 bRekichu_Kadan = TRUE;
1491 } else {
1492 bRekichu_Kadan = FALSE;
1493 }
1494 bChangeDisplayParam = FALSE;
1495
1496 PropertySheet(&psh);
1497
1498 *bChangeDisplay = bChangeDisplayParam;
1499
1500 if (hfontPreview) {
1501 DeleteObject(hfontPreview);
1502 }
1503 deleteLevelList();
1504
1505 return (bChange);
1506 }
1507