source: trunk/dll/notebook.c@ 1049

Last change on this file since 1049 was 1049, checked in by Gregg Young, 17 years ago

Fix for another memory leak

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 107.5 KB
Line 
1
2/***********************************************************************
3
4 $Id: notebook.c 1049 2008-07-07 04:03:27Z gyoung $
5
6 Configuration notebook
7
8 Copyright (c) 1993-98 M. Kimes
9 Copyright (c) 2004, 2008 Steven H. Levine
10
11 01 Aug 04 SHL Rework lstrip/rstrip usage
12 23 May 05 SHL Use QWL_USER
13 04 Jun 05 SHL Support Cancel button; make Esc key more consistent
14 29 May 06 SHL Comments
15 17 Jul 06 SHL Use Runtime_Error
16 15 Aug 06 SHL Rework SetMask args
17 03 Aug 07 GKY Enlarged and made setable everywhere Findbuf (speed file loading)
18 13 Aug 07 SHL Move #pragma alloc_text to end for OpenWatcom compat
19 13 Aug 07 SHL Rework FilesToGet min/max to match how DosFindFirst/Next works
20 19 Aug 07 SHL Sync with SaveDirCnrState mods
21 21 Aug 07 GKY Make Subject column in dircnr sizable and movable from the rigth to the left pane
22 26 Nov 07 GKY Allow a currently nonvalid path in the ext path field with warning
23 06 Jan 08 GKY Use NormalizeCmdLine to check program strings on entry
24 10 Jan 08 SHL Remember last settings page
25 10 Jan 08 SHL Rework page select logic
26 13 Jan 08 GKY Get Subjectwidth/Subjectleft working in the collector.
27 19 Jan 08 JBS Ticket 150: fix/improve save and restore of dir cnr state at FM/2 close/reopen
28 15 Feb 08 SHL Rework to support settings menu conditional cascade. Make more generic
29 16 Feb 08 SHL Restore SaveDirCnrState internal state save logic - accidentally removed
30 22 Feb 08 JBS Ticket 230: Fix/improve various code related to state or presparam values in the INI file.
31 29 Feb 08 GKY Changes to enable user settable command line length
32 08 Mar 08 JBS Ticket 230: Replace prefixless INI keys for default directory containers with
33 keys using a "DirCnr." prefix
34 06 Jul 08 GKY Update delete/undelete to include move to and open XWP trashcan
35
36***********************************************************************/
37
38#include <stdio.h>
39#include <stdlib.h>
40#include <string.h>
41
42#define INCL_DOS
43#define INCL_WIN
44#define INCL_LONGLONG // dircnrs.h
45
46#include "fm3dlg.h"
47#include "fm3str.h"
48#include "pathutil.h" // BldQuotedFileName
49#include "errutil.h" // Dos_Error...
50#include "strutil.h" // GetPString
51#include "notebook.h"
52#include "fm3dll.h"
53#include "fortify.h"
54
55#pragma data_seg(DATA2)
56
57static PSZ pszSrcFile = __FILE__;
58
59static HWND hwndNotebook;
60
61static VOID SaveLastPageIndex(HWND hwnd);
62
63MRESULT EXPENTRY CfgADlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
64{
65 ULONG ulResult;
66
67 switch (msg) {
68 case WM_INITDLG:
69 WinSendDlgItemMsg(hwnd, CFGA_VIRUS, EM_SETTEXTLIMIT,
70 MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
71 WinSendDlgItemMsg(hwnd, CFGA_EXTRACTPATH, EM_SETTEXTLIMIT,
72 MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
73 WinEnableWindow(WinWindowFromID(hwnd, CFGA_FIND), FALSE);
74 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
75 break;
76
77 case UM_UNDO:
78 WinCheckButton(hwnd, CFGA_ARCSTUFFVISIBLE, fArcStuffVisible);
79 WinCheckButton(hwnd, CFGA_FOLDERAFTEREXTRACT, fFolderAfterExtract);
80 WinCheckButton(hwnd, CFGA_QUICKARCFIND, fQuickArcFind);
81 WinCheckButton(hwnd, CFGA_DEFARC, (*szDefArc != 0));
82 WinSetDlgItemText(hwnd, CFGA_DEFARCNAME, szDefArc);
83 WinSetDlgItemText(hwnd, CFGA_VIRUS, virus);
84 WinSetDlgItemText(hwnd, CFGA_EXTRACTPATH, extractpath);
85 break;
86
87 case WM_CONTROL:
88 switch (SHORT1FROMMP(mp1)) {
89 case CFGA_VIRUS:
90 case CFGA_EXTRACTPATH:
91 switch (SHORT2FROMMP(mp1)) {
92 case EN_KILLFOCUS:
93 WinEnableWindow(WinWindowFromID(hwnd, CFGA_FIND), FALSE);
94 break;
95 case EN_SETFOCUS:
96 WinEnableWindow(WinWindowFromID(hwnd, CFGA_FIND), TRUE);
97 break;
98 }
99 break;
100 case CFGA_DEFARC:
101 switch (SHORT2FROMMP(mp1)) {
102 case BN_CLICKED:
103 if (WinQueryButtonCheckstate(hwnd, CFGA_DEFARC)) {
104
105 ARC_TYPE *pat = arcsighead; // Hide dups
106
107 if (!WinDlgBox(HWND_DESKTOP, hwnd,
108 SBoxDlgProc, FM3ModHandle, ASEL_FRAME,
109 (PVOID) & pat) || !pat || !pat->id || !*pat->id) {
110 DosBeep(250, 100); // Complain
111 WinCheckButton(hwnd, CFGA_DEFARC, FALSE);
112 }
113 else
114 WinSetDlgItemText(hwnd, CFGA_DEFARCNAME, pat->id);
115 }
116 break;
117 default:
118 break;
119 }
120 break;
121
122 default:
123 break;
124 }
125 return 0;
126
127 case WM_COMMAND:
128 switch (SHORT1FROMMP(mp1)) {
129 case IDM_UNDO:
130 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
131 break;
132
133 case DID_CANCEL:
134 WinSendMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
135
136 case DID_OK:
137 PostMsg((HWND) WinQueryWindowULong(hwnd, QWL_USER), msg, mp1, mp2);
138 break;
139
140 case IDM_HELP:
141 if (hwndHelp)
142 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
143 MPFROM2SHORT(HELP_CFGA, 0), MPFROMSHORT(HM_RESOURCEID));
144 break;
145
146 case CFGA_FIND:
147 {
148 CHAR filename[CCHMAXPATH + 9], szfilename[CCHMAXPATH + 9];
149 USHORT id;
150 HWND hwndFocus;
151
152 strcpy(filename, "*.EXE");
153 hwndFocus = WinQueryFocus(HWND_DESKTOP);
154 if (hwndFocus) {
155 id = WinQueryWindowUShort(hwndFocus, QWS_ID);
156 switch (id) {
157 case CFGA_VIRUS:
158 if (insert_filename(hwnd, filename, 2, FALSE) && *filename) {
159 BldQuotedFileName(szfilename, filename);
160 strcat(szfilename, " %p");
161 WinSetDlgItemText(hwnd, id, szfilename);
162 }
163 break;
164 case CFGA_EXTRACTPATH:
165 strcpy(filename, extractpath);
166 if (WinDlgBox(HWND_DESKTOP, hwndNotebook,
167 WalkExtractDlgProc, FM3ModHandle, WALK_FRAME,
168 MPFROMP(filename)) && *filename)
169 WinSetDlgItemText(hwnd, id, filename);
170 break;
171 default:
172 Runtime_Error(pszSrcFile, __LINE__, "bad case");
173 break;
174 }
175 }
176 }
177 break;
178 }
179 return 0;
180
181 case WM_CLOSE:
182 fQuickArcFind = WinQueryButtonCheckstate(hwnd, CFGA_QUICKARCFIND);
183 PrfWriteProfileData(fmprof,
184 appname,
185 "QuickArcFind", &fQuickArcFind, sizeof(BOOL));
186 fArcStuffVisible = WinQueryButtonCheckstate(hwnd, CFGA_ARCSTUFFVISIBLE);
187 PrfWriteProfileData(fmprof,
188 appname,
189 "ArcStuffVisible", &fArcStuffVisible, sizeof(BOOL));
190 fFolderAfterExtract = WinQueryButtonCheckstate(hwnd,
191 CFGA_FOLDERAFTEREXTRACT);
192 PrfWriteProfileData(fmprof,
193 appname,
194 "FolderAfterExtract",
195 &fFolderAfterExtract, sizeof(BOOL));
196 if (WinQueryButtonCheckstate(hwnd, CFGA_DEFARC)) {
197
198 CHAR temp[CCHMAXPATH];
199
200 *temp = 0;
201 WinQueryDlgItemText(hwnd, CFGA_DEFARCNAME, CCHMAXPATH, temp);
202 strcpy(szDefArc, temp);
203 }
204 else
205 *szDefArc = 0;
206 PrfWriteProfileString(fmprof, appname, "DefArc", szDefArc);
207 {
208 CHAR *szCLBuf;
209 CHAR szPathBuf[CCHMAXPATH];
210 PSZ pszWorkBuf;
211
212 szCLBuf = xmalloc(MaxComLineStrg, pszSrcFile, __LINE__);
213 if (!szCLBuf)
214 return 0; //already complained
215 pszWorkBuf = xmalloc(MaxComLineStrg, pszSrcFile, __LINE__);
216 if (!pszWorkBuf) {
217 free(szCLBuf);
218 return 0; //already complained
219 }
220 WinQueryDlgItemText(hwnd, CFGA_VIRUS, MaxComLineStrg, szCLBuf);
221 szCLBuf[MaxComLineStrg - 1] = 0;
222 if (strcmp(szCLBuf, virus)){
223 NormalizeCmdLine(pszWorkBuf, szCLBuf);
224 memcpy(virus, pszWorkBuf, strlen(pszWorkBuf) + 1);
225 if (!strchr(virus, '%') && strlen(virus) > 3)
226 strcat(virus, " %p");
227 }
228 free(pszWorkBuf);
229 free(szCLBuf);
230 if (!*virus)
231 strcpy(virus, "OS2SCAN.EXE %p /SUB /A");
232 WinQueryDlgItemText(hwnd, CFGA_EXTRACTPATH, CCHMAXPATH, szPathBuf);
233 szPathBuf[CCHMAXPATH - 1] = 0;
234 bstrip(szPathBuf);
235 if (strcmp(extractpath, szPathBuf)) {
236 memcpy(extractpath, szPathBuf, strlen(szPathBuf) + 1);
237 if (*extractpath){
238 MakeFullName(extractpath);
239 if (IsFile(extractpath)) {
240 ulResult = saymsg(MB_YESNOCANCEL | MB_ICONQUESTION | MB_DEFBUTTON1, HWND_DESKTOP,
241 GetPString(IDS_WARNINGTEXT),
242 GetPString(IDS_EXTPATHNOTVALIDTEXT),
243 extractpath);
244 if (ulResult == MBID_YES)
245 *extractpath = 0;
246 if (ulResult == MBID_CANCEL){
247 WinDlgBox(HWND_DESKTOP,
248 hwnd,
249 CfgDlgProc,
250 FM3ModHandle,
251 CFG_FRAME,
252 MPFROMLONG(IDM_ARCHIVERSETTINGS));
253 break;
254 }
255 }
256 }
257 }
258 }
259 PrfWriteProfileString(fmprof, appname, "Virus", virus);
260 PrfWriteProfileString(fmprof, appname, "ExtractPath", extractpath);
261 break;
262 }
263 if (fCancelAction) {
264 fCancelAction = FALSE;
265 WinDlgBox(HWND_DESKTOP,
266 hwnd,
267 CfgDlgProc,
268 FM3ModHandle,
269 CFG_FRAME,
270 MPFROMLONG(IDM_ARCHIVERSETTINGS));
271 }
272 return WinDefDlgProc(hwnd, msg, mp1, mp2);
273}
274
275MRESULT EXPENTRY CfgSDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
276{
277 switch (msg) {
278 case WM_INITDLG:
279 WinSendDlgItemMsg(hwnd, CFGS_FILESTOGET, SPBM_SETTEXTLIMIT,
280 MPFROMSHORT(8), MPVOID);
281 WinSendDlgItemMsg(hwnd, CFGS_FILESTOGET, SPBM_OVERRIDESETLIMITS,
282 MPFROMLONG(FILESTOGET_MAX), MPFROMLONG(FILESTOGET_MIN));
283 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
284 break;
285
286 case UM_UNDO:
287 WinCheckButton(hwnd, CFGS_NOICONSFILES, (fNoIconsFiles == FALSE));
288 WinCheckButton(hwnd, CFGS_NOICONSDIRS, (fNoIconsDirs == FALSE));
289 WinCheckButton(hwnd, CFGS_LOADSUBJECTS, fLoadSubject);
290 WinCheckButton(hwnd, CFGS_LOADLONGNAMES, fLoadLongnames);
291 WinCheckButton(hwnd, CFGS_FORCELOWER, fForceLower);
292 WinCheckButton(hwnd, CFGS_FORCEUPPER, fForceUpper);
293 WinCheckButton(hwnd, CFGS_NOREMOVABLESCAN, fNoRemovableScan);
294 WinCheckButton(hwnd, CFGS_REMOTEBUG, fRemoteBug);
295 WinSendDlgItemMsg(hwnd, CFGS_FILESTOGET, SPBM_SETCURRENTVALUE,
296 MPFROMLONG(FilesToGet), MPVOID);
297 return 0;
298
299 case WM_CONTROL:
300 switch (SHORT1FROMMP(mp1)) {
301 case CFGS_FORCEUPPER:
302 case CFGS_FORCELOWER:
303 {
304 BOOL temp;
305
306 temp = WinQueryButtonCheckstate(hwnd, SHORT1FROMMP(mp1));
307 if (temp) {
308 switch (SHORT1FROMMP(mp1)) {
309 case CFGS_FORCEUPPER:
310 WinCheckButton(hwnd, CFGS_FORCELOWER, FALSE);
311 break;
312 case CFGS_FORCELOWER:
313 WinCheckButton(hwnd, CFGS_FORCEUPPER, FALSE);
314 break;
315 }
316 }
317 }
318 break;
319 }
320 return 0;
321
322 case WM_COMMAND:
323 switch (SHORT1FROMMP(mp1)) {
324 case IDM_UNDO:
325 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
326 break;
327
328 case DID_CANCEL:
329 WinSendMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
330
331 case DID_OK:
332 PostMsg((HWND) WinQueryWindowULong(hwnd, QWL_USER), msg, mp1, mp2);
333 break;
334
335 case IDM_HELP:
336 if (hwndHelp)
337 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
338 MPFROM2SHORT(HELP_CFGS, 0), MPFROMSHORT(HM_RESOURCEID));
339 break;
340 }
341 return 0;
342
343 case WM_CLOSE:
344 fLoadLongnames = WinQueryButtonCheckstate(hwnd, CFGS_LOADLONGNAMES);
345 PrfWriteProfileData(fmprof, appname, "LoadLongname", &fLoadLongnames,
346 sizeof(BOOL));
347 fLoadSubject = WinQueryButtonCheckstate(hwnd, CFGS_LOADSUBJECTS);
348 PrfWriteProfileData(fmprof, appname, "LoadSubject", &fLoadSubject,
349 sizeof(BOOL));
350 fRemoteBug = WinQueryButtonCheckstate(hwnd, CFGS_REMOTEBUG);
351 PrfWriteProfileData(fmprof, appname, "RemoteBug", &fRemoteBug,
352 sizeof(BOOL));
353 fNoRemovableScan = WinQueryButtonCheckstate(hwnd, CFGS_NOREMOVABLESCAN);
354 PrfWriteProfileData(fmprof, FM3Str, "NoRemovableScan", &fNoRemovableScan,
355 sizeof(BOOL));
356 fNoIconsFiles = WinQueryButtonCheckstate(hwnd, CFGS_NOICONSFILES);
357 fNoIconsFiles = (fNoIconsFiles) ? FALSE : TRUE;
358 PrfWriteProfileData(fmprof, appname, "NoIconsFiles",
359 &fNoIconsFiles, sizeof(BOOL));
360 fNoIconsDirs = WinQueryButtonCheckstate(hwnd, CFGS_NOICONSDIRS);
361 fNoIconsDirs = (fNoIconsDirs) ? FALSE : TRUE;
362 PrfWriteProfileData(fmprof, appname, "NoIconsDirs",
363 &fNoIconsDirs, sizeof(BOOL));
364 fForceUpper = WinQueryButtonCheckstate(hwnd, CFGS_FORCEUPPER);
365 PrfWriteProfileData(fmprof, appname, "ForceUpper",
366 &fForceUpper, sizeof(BOOL));
367 fForceLower = WinQueryButtonCheckstate(hwnd, CFGS_FORCELOWER);
368 PrfWriteProfileData(fmprof, appname, "ForceLower",
369 &fForceLower, sizeof(BOOL));
370 {
371 WinSendDlgItemMsg(hwnd, CFGS_FILESTOGET, SPBM_QUERYVALUE,
372 MPFROMP(&FilesToGet), MPFROM2SHORT(0, SPBQ_DONOTUPDATE));
373 if (FilesToGet < FILESTOGET_MIN)
374 FilesToGet = FILESTOGET_MIN;
375 else if (FilesToGet > FILESTOGET_MAX)
376 FilesToGet = FILESTOGET_MAX;
377 PrfWriteProfileData(fmprof,
378 appname, "FilesToGet", &FilesToGet, sizeof(ULONG));
379 }
380 break;
381 }
382 return WinDefDlgProc(hwnd, msg, mp1, mp2);
383}
384
385MRESULT EXPENTRY CfgVDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
386{
387 switch (msg) {
388 case WM_INITDLG:
389 WinSendDlgItemMsg(hwnd, CFGV_VIEWER, EM_SETTEXTLIMIT,
390 MPFROM2SHORT(MaxComLineStrg, 0), MPVOID);
391 WinSendDlgItemMsg(hwnd, CFGV_EDITOR, EM_SETTEXTLIMIT,
392 MPFROM2SHORT(MaxComLineStrg, 0), MPVOID);
393 WinSendDlgItemMsg(hwnd, CFGV_BINVIEW, EM_SETTEXTLIMIT,
394 MPFROM2SHORT(MaxComLineStrg, 0), MPVOID);
395 WinSendDlgItemMsg(hwnd, CFGV_BINED, EM_SETTEXTLIMIT,
396 MPFROM2SHORT(MaxComLineStrg, 0), MPVOID);
397 WinEnableWindow(WinWindowFromID(hwnd, CFGV_FIND), FALSE);
398 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
399 break;
400
401 case UM_UNDO:
402 WinSetDlgItemText(hwnd, CFGV_VIEWER, viewer);
403 WinSetDlgItemText(hwnd, CFGV_EDITOR, editor);
404 WinSetDlgItemText(hwnd, CFGV_BINVIEW, binview);
405 WinSetDlgItemText(hwnd, CFGV_BINED, bined);
406 WinCheckButton(hwnd, CFGV_USENEWVIEWER, fUseNewViewer);
407 WinCheckButton(hwnd, CFGV_GUESSTYPE, fGuessType);
408 WinCheckButton(hwnd, CFGV_VIEWCHILD, fViewChild);
409 WinCheckButton(hwnd, CFGV_CHECKMM, fCheckMM);
410 return 0;
411
412 case WM_CONTROL:
413 switch (SHORT1FROMMP(mp1)) {
414 case CFGV_VIEWER:
415 case CFGV_EDITOR:
416 case CFGV_BINVIEW:
417 case CFGV_BINED:
418 switch (SHORT2FROMMP(mp1)) {
419 case EN_KILLFOCUS:
420 WinEnableWindow(WinWindowFromID(hwnd, CFGV_FIND), FALSE);
421 break;
422 case EN_SETFOCUS:
423 WinEnableWindow(WinWindowFromID(hwnd, CFGV_FIND), TRUE);
424 break;
425 }
426 break;
427 }
428 return 0;
429
430 case WM_COMMAND:
431 switch (SHORT1FROMMP(mp1)) {
432 case IDM_UNDO:
433 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
434 break;
435
436 case DID_CANCEL:
437 WinSendMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
438
439 case DID_OK:
440 PostMsg((HWND) WinQueryWindowULong(hwnd, QWL_USER), msg, mp1, mp2);
441 break;
442
443 case IDM_HELP:
444 if (hwndHelp)
445 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
446 MPFROM2SHORT(HELP_CFGV, 0), MPFROMSHORT(HM_RESOURCEID));
447 break;
448
449 case CFGV_FIND:
450 {
451 CHAR filename[CCHMAXPATH + 9], szfilename[CCHMAXPATH + 9];
452 USHORT id;
453 HWND hwndFocus;
454
455 strcpy(filename, "*.EXE");
456 hwndFocus = WinQueryFocus(HWND_DESKTOP);
457 if (hwndFocus) {
458 id = WinQueryWindowUShort(hwndFocus, QWS_ID);
459 switch (id) {
460 case CFGV_BINVIEW:
461 case CFGV_BINED:
462 case CFGV_VIEWER:
463 case CFGV_EDITOR:
464 if (insert_filename(hwnd, filename, 2, FALSE) && *filename) {
465 BldQuotedFileName(szfilename, filename);
466 strcat(szfilename, " %a");
467 WinSetDlgItemText(hwnd, id, szfilename);
468 }
469 break;
470 default:
471 Runtime_Error(pszSrcFile, __LINE__, "bad case %d", id);
472 break;
473 }
474 }
475 }
476 break;
477 }
478 return 0;
479
480 case WM_CLOSE:
481 {
482 CHAR *szCLBuf;
483 PSZ pszWorkBuf;
484
485 szCLBuf = xmalloc(MaxComLineStrg, pszSrcFile, __LINE__);
486 if (!szCLBuf)
487 return 0; //already complained
488 pszWorkBuf = xmalloc(MaxComLineStrg, pszSrcFile, __LINE__);
489 if (!pszWorkBuf) {
490 free(szCLBuf);
491 return 0; //already complained
492 }
493 WinQueryDlgItemText(hwnd, CFGV_VIEWER, MaxComLineStrg, szCLBuf);
494 szCLBuf[MaxComLineStrg - 1] = 0;
495 if (strcmp(szCLBuf, viewer)){
496 NormalizeCmdLine(pszWorkBuf, szCLBuf);
497 memcpy(viewer, pszWorkBuf, strlen(pszWorkBuf) + 1);
498 if (!strchr(viewer, '%') && strlen(viewer) > 3)
499 strcat(viewer, " %a");
500 }
501 WinQueryDlgItemText(hwnd, CFGV_EDITOR, MaxComLineStrg, szCLBuf);
502 szCLBuf[MaxComLineStrg - 1] = 0;
503 if (strcmp(szCLBuf, editor)){
504 NormalizeCmdLine(pszWorkBuf, szCLBuf);
505 memcpy(editor, pszWorkBuf, strlen(pszWorkBuf) + 1);
506 if (!strchr(editor, '%') && strlen(editor) > 3)
507 strcat(editor, " %a");
508 }
509 WinQueryDlgItemText(hwnd, CFGV_BINVIEW, MaxComLineStrg, szCLBuf);
510 szCLBuf[MaxComLineStrg - 1] = 0;
511 if (strcmp(szCLBuf, binview)){
512 NormalizeCmdLine(pszWorkBuf, szCLBuf);
513 memcpy(binview, pszWorkBuf, strlen(pszWorkBuf) + 1);
514 if (!strchr(binview, '%') && strlen(binview) > 3)
515 strcat(binview, " %a");
516 }
517 WinQueryDlgItemText(hwnd, CFGV_BINED, MaxComLineStrg, szCLBuf);
518 szCLBuf[MaxComLineStrg - 1] = 0;
519 if (strcmp(szCLBuf, bined)){
520 NormalizeCmdLine(pszWorkBuf, szCLBuf);
521 memcpy(bined, pszWorkBuf, strlen(pszWorkBuf) + 1);
522 if (!strchr(bined, '%') && strlen(bined) > 3)
523 strcat(bined, " %a");
524 }
525 free(pszWorkBuf);
526 free(szCLBuf);
527 PrfWriteProfileString(fmprof, appname, "Viewer", viewer);
528 PrfWriteProfileString(fmprof, appname, "Editor", editor);
529 PrfWriteProfileString(fmprof, appname, "BinView", binview);
530 PrfWriteProfileString(fmprof, appname, "BinEd", bined);
531 fUseNewViewer = WinQueryButtonCheckstate(hwnd, CFGV_USENEWVIEWER);
532 PrfWriteProfileData(fmprof, appname, "UseNewViewer", &fUseNewViewer,
533 sizeof(BOOL));
534 fGuessType = WinQueryButtonCheckstate(hwnd, CFGV_GUESSTYPE);
535 PrfWriteProfileData(fmprof, appname, "GuessType", &fGuessType,
536 sizeof(BOOL));
537 fViewChild = WinQueryButtonCheckstate(hwnd, CFGV_VIEWCHILD);
538 PrfWriteProfileData(fmprof, appname, "ViewChild", &fViewChild,
539 sizeof(BOOL));
540 fCheckMM = WinQueryButtonCheckstate(hwnd, CFGV_CHECKMM);
541 PrfWriteProfileData(fmprof, appname, "CheckMM", &fCheckMM, sizeof(BOOL));
542
543 break;
544 }
545 }
546 if (fCancelAction) {
547 fCancelAction = FALSE;
548 WinDlgBox(HWND_DESKTOP,
549 hwnd,
550 CfgDlgProc,
551 FM3ModHandle,
552 CFG_FRAME,
553 MPFROMLONG(IDM_VIEWERSETTINGS));
554 }
555 return WinDefDlgProc(hwnd, msg, mp1, mp2);
556}
557
558MRESULT EXPENTRY CfgHDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
559{
560 switch (msg) {
561 case WM_INITDLG:
562 WinSendDlgItemMsg(hwnd, CFGH_RUNFTPWORKDIR, EM_SETTEXTLIMIT,
563 MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
564 WinSendDlgItemMsg(hwnd, CFGH_RUNHTTPWORKDIR, EM_SETTEXTLIMIT,
565 MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
566 WinSendDlgItemMsg(hwnd, CFGH_FTPRUN, EM_SETTEXTLIMIT,
567 MPFROM2SHORT(MaxComLineStrg, 0), MPVOID);
568 WinSendDlgItemMsg(hwnd, CFGH_HTTPRUN, EM_SETTEXTLIMIT,
569 MPFROM2SHORT(MaxComLineStrg, 0), MPVOID);
570 WinSendDlgItemMsg(hwnd, CFGH_MAILRUN, EM_SETTEXTLIMIT,
571 MPFROM2SHORT(MaxComLineStrg, 0), MPVOID);
572 WinSendDlgItemMsg(hwnd, CFGH_RUNMAILWORKDIR, EM_SETTEXTLIMIT,
573 MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
574 WinEnableWindow(WinWindowFromID(hwnd, CFGH_FIND), FALSE);
575 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
576 break;
577
578 case UM_UNDO:
579 WinSetDlgItemText(hwnd, CFGH_RUNFTPWORKDIR, ftprundir);
580 WinSetDlgItemText(hwnd, CFGH_RUNHTTPWORKDIR, httprundir);
581 WinSetDlgItemText(hwnd, CFGH_RUNMAILWORKDIR, mailrundir);
582 WinSetDlgItemText(hwnd, CFGH_MAILRUN, mailrun);
583 WinSetDlgItemText(hwnd, CFGH_FTPRUN, ftprun);
584 WinSetDlgItemText(hwnd, CFGH_HTTPRUN, httprun);
585 WinCheckButton(hwnd, CFGH_HTTPRUNWPSDEFAULT, fHttpRunWPSDefault);
586 WinCheckButton(hwnd, CFGH_FTPRUNWPSDEFAULT, fFtpRunWPSDefault);
587 WinCheckButton(hwnd, CFGH_LIBPATHSTRICTHTTPRUN, fLibPathStrictHttpRun);
588 WinCheckButton(hwnd, CFGH_LIBPATHSTRICTFTPRUN, fLibPathStrictFtpRun);
589 WinCheckButton(hwnd, CFGH_LIBPATHSTRICTMAILRUN, fLibPathStrictMailRun);
590 WinCheckButton(hwnd, CFGH_NOMAILTOMAILRUN, fNoMailtoMailRun);
591 return 0;
592
593 case WM_CONTROL:
594 switch (SHORT1FROMMP(mp1)) {
595 case CFGH_HTTPRUN:
596 case CFGH_FTPRUN:
597 case CFGH_RUNFTPWORKDIR:
598 case CFGH_RUNHTTPWORKDIR:
599 case CFGH_RUNMAILWORKDIR:
600 case CFGH_MAILRUN:
601 switch (SHORT2FROMMP(mp1)) {
602 case EN_KILLFOCUS:
603 WinEnableWindow(WinWindowFromID(hwnd, CFGH_FIND), FALSE);
604 break;
605 case EN_SETFOCUS:
606 WinEnableWindow(WinWindowFromID(hwnd, CFGH_FIND), TRUE);
607 break;
608 }
609 break;
610 }
611 return 0;
612
613 case WM_COMMAND:
614 switch (SHORT1FROMMP(mp1)) {
615 case IDM_UNDO:
616 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
617 break;
618
619 case DID_CANCEL:
620 WinSendMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
621
622 case DID_OK:
623 PostMsg((HWND) WinQueryWindowULong(hwnd, QWL_USER), msg, mp1, mp2);
624 break;
625
626 case IDM_HELP:
627 if (hwndHelp)
628 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
629 MPFROM2SHORT(HELP_CFGH, 0), MPFROMSHORT(HM_RESOURCEID));
630 break;
631
632 case CFGH_FIND:
633 {
634 CHAR filename[CCHMAXPATH + 9], szfilename[CCHMAXPATH + 9];
635 USHORT id;
636 HWND hwndFocus;
637
638 strcpy(filename, "*.EXE");
639 hwndFocus = WinQueryFocus(HWND_DESKTOP);
640 if (hwndFocus) {
641 id = WinQueryWindowUShort(hwndFocus, QWS_ID);
642 switch (id) {
643 case CFGH_HTTPRUN:
644 case CFGH_FTPRUN:
645 case CFGH_MAILRUN:
646 if (insert_filename(hwnd, filename, 2, FALSE) && *filename) {
647 BldQuotedFileName(szfilename, filename);
648 WinSetDlgItemText(hwnd, id, szfilename);
649 }
650 break;
651 case CFGH_RUNFTPWORKDIR:
652 strcpy(filename, ftprundir);
653 if (WinDlgBox(HWND_DESKTOP, hwndNotebook,
654 WalkExtractDlgProc, FM3ModHandle, WALK_FRAME,
655 MPFROMP(filename)) && *filename)
656 WinSetDlgItemText(hwnd, id, filename);
657 break;
658 case CFGH_RUNHTTPWORKDIR:
659 strcpy(filename, httprundir);
660 if (WinDlgBox(HWND_DESKTOP, hwndNotebook,
661 WalkExtractDlgProc, FM3ModHandle, WALK_FRAME,
662 MPFROMP(filename)) && *filename)
663 WinSetDlgItemText(hwnd, id, filename);
664 break;
665 case CFGH_RUNMAILWORKDIR:
666 strcpy(filename, mailrundir);
667 if (WinDlgBox(HWND_DESKTOP, hwndNotebook,
668 WalkExtractDlgProc, FM3ModHandle, WALK_FRAME,
669 MPFROMP(filename)) && *filename)
670 WinSetDlgItemText(hwnd, id, filename);
671 break;
672 default:
673 Runtime_Error(pszSrcFile, __LINE__, "bad case %d", id);
674 break;
675 }
676 }
677 }
678 break;
679 }
680 return 0;
681
682 case WM_CLOSE:
683 {
684 CHAR *szCLBuf;
685 CHAR szPathBuf[CCHMAXPATH];
686 PSZ pszWorkBuf;
687
688 szCLBuf = xmalloc(MaxComLineStrg, pszSrcFile, __LINE__);
689 if (!szCLBuf)
690 return 0; //already complained
691 pszWorkBuf = xmalloc(MaxComLineStrg, pszSrcFile, __LINE__);
692 if (!pszWorkBuf) {
693 free(szCLBuf);
694 return 0; //already complained
695 }
696 WinQueryDlgItemText(hwnd, CFGH_RUNHTTPWORKDIR, CCHMAXPATH, szPathBuf);
697 szPathBuf[CCHMAXPATH - 1] = 0;
698 bstrip(szPathBuf);
699 memcpy(httprundir, szPathBuf, strlen(szPathBuf) + 1);
700 WinQueryDlgItemText(hwnd, CFGH_RUNFTPWORKDIR, CCHMAXPATH, szPathBuf);
701 szPathBuf[CCHMAXPATH - 1] = 0;
702 bstrip(szPathBuf);
703 memcpy(ftprundir, szPathBuf, strlen(szPathBuf) + 1);
704 WinQueryDlgItemText(hwnd, CFGH_RUNMAILWORKDIR, CCHMAXPATH, szPathBuf);
705 szPathBuf[CCHMAXPATH - 1] = 0;
706 bstrip(szPathBuf);
707 memcpy(mailrundir, szPathBuf, strlen(szPathBuf) + 1);
708 WinQueryDlgItemText(hwnd, CFGH_FTPRUN, MaxComLineStrg, szCLBuf);
709 szCLBuf[MaxComLineStrg - 1] = 0;
710 if (strcmp(szCLBuf, ftprun)){
711 NormalizeCmdLine(pszWorkBuf, szCLBuf);
712 memcpy(ftprun, pszWorkBuf, strlen(pszWorkBuf) + 1);
713 }
714 WinQueryDlgItemText(hwnd, CFGH_HTTPRUN, MaxComLineStrg, szCLBuf);
715 szCLBuf[MaxComLineStrg - 1] = 0;
716 if (strcmp(szCLBuf, httprun)){
717 NormalizeCmdLine(pszWorkBuf, szCLBuf);
718 memcpy(httprun, pszWorkBuf, strlen(pszWorkBuf) + 1);
719 }
720 WinQueryDlgItemText(hwnd, CFGH_MAILRUN, MaxComLineStrg, szCLBuf);
721 szCLBuf[MaxComLineStrg - 1] = 0;
722 if (strcmp(szCLBuf, mailrun)){
723 NormalizeCmdLine(pszWorkBuf, szCLBuf);
724 memcpy(mailrun, pszWorkBuf, strlen(pszWorkBuf) + 1);
725 }
726 free(pszWorkBuf);
727 free(szCLBuf);
728 PrfWriteProfileString(fmprof, appname, "HttpRunDir", httprundir);
729 PrfWriteProfileString(fmprof, appname, "FtpRunDir", ftprundir);
730 PrfWriteProfileString(fmprof, appname, "MailRunDir", mailrundir);
731 PrfWriteProfileString(fmprof, appname, "FTPRun", ftprun);
732 PrfWriteProfileString(fmprof, appname, "HTTPRun", httprun);
733 PrfWriteProfileString(fmprof, appname, "MailRun", mailrun);
734 fHttpRunWPSDefault = WinQueryButtonCheckstate(hwnd, CFGH_HTTPRUNWPSDEFAULT);
735 PrfWriteProfileData(fmprof, appname, "HttpRunWPSDefault", &fHttpRunWPSDefault,
736 sizeof(BOOL));
737 fFtpRunWPSDefault = WinQueryButtonCheckstate(hwnd, CFGH_FTPRUNWPSDEFAULT);
738 PrfWriteProfileData(fmprof, appname, "FtpRunWPSDefault", &fFtpRunWPSDefault,
739 sizeof(BOOL));
740 fLibPathStrictHttpRun = WinQueryButtonCheckstate(hwnd, CFGH_LIBPATHSTRICTHTTPRUN);
741 PrfWriteProfileData(fmprof, appname, "LibPathStrictHttpRun",
742 &fLibPathStrictHttpRun, sizeof(BOOL));
743 fLibPathStrictFtpRun = WinQueryButtonCheckstate(hwnd, CFGH_LIBPATHSTRICTFTPRUN);
744 PrfWriteProfileData(fmprof, appname, "LibPathStrictFtpRun",
745 &fLibPathStrictFtpRun, sizeof(BOOL));
746 fLibPathStrictMailRun = WinQueryButtonCheckstate(hwnd, CFGH_LIBPATHSTRICTMAILRUN);
747 PrfWriteProfileData(fmprof, appname, "LibPathStrictMailRun",
748 &fLibPathStrictMailRun, sizeof(BOOL));
749 fNoMailtoMailRun = WinQueryButtonCheckstate(hwnd, CFGH_NOMAILTOMAILRUN);
750 PrfWriteProfileData(fmprof, appname, "NoMailtoMailRun",
751 &fNoMailtoMailRun, sizeof(BOOL));
752 break;
753 }
754 }
755 if (fCancelAction) {
756 fCancelAction = FALSE;
757 WinDlgBox(HWND_DESKTOP,
758 hwnd,
759 CfgDlgProc,
760 FM3ModHandle,
761 CFG_FRAME,
762 MPFROMLONG(IDM_VIEWERSETTINGS));
763 }
764 return WinDefDlgProc(hwnd, msg, mp1, mp2);
765}
766
767MRESULT EXPENTRY CfgBDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
768{
769 switch (msg) {
770 case WM_INITDLG:
771 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
772 break;
773
774 case UM_UNDO:
775 WinCheckButton(hwnd, CFGB_TOOLBARHELP, fToolbarHelp);
776 WinCheckButton(hwnd, CFGB_DRIVEBARHELP, fDrivebarHelp);
777 WinCheckButton(hwnd, CFGB_OTHERHELP, fOtherHelp);
778 return 0;
779
780 case WM_COMMAND:
781 switch (SHORT1FROMMP(mp1)) {
782 case IDM_UNDO:
783 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
784 break;
785
786 case DID_CANCEL:
787 WinSendMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
788
789 case DID_OK:
790 PostMsg((HWND) WinQueryWindowULong(hwnd, QWL_USER), msg, mp1, mp2);
791 break;
792
793 case IDM_HELP:
794 if (hwndHelp)
795 WinSendMsg(hwndHelp,
796 HM_DISPLAY_HELP,
797 MPFROM2SHORT(HELP_CFGB, 0), MPFROMSHORT(HM_RESOURCEID));
798 break;
799 }
800 return 0;
801
802 case WM_CLOSE:
803 fToolbarHelp = WinQueryButtonCheckstate(hwnd, CFGB_TOOLBARHELP);
804 PrfWriteProfileData(fmprof,
805 FM3Str, "ToolbarHelp", &fToolbarHelp, sizeof(BOOL));
806 fDrivebarHelp = WinQueryButtonCheckstate(hwnd, CFGB_DRIVEBARHELP);
807 PrfWriteProfileData(fmprof,
808 FM3Str, "DrivebarHelp", &fDrivebarHelp, sizeof(BOOL));
809 fOtherHelp = WinQueryButtonCheckstate(hwnd, CFGB_OTHERHELP);
810 PrfWriteProfileData(fmprof,
811 FM3Str, "OtherHelp", &fOtherHelp, sizeof(BOOL));
812 break;
813 }
814 return WinDefDlgProc(hwnd, msg, mp1, mp2);
815}
816
817MRESULT EXPENTRY CfgTSDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
818{
819 static MASK mask;
820
821 switch (msg) {
822 case WM_INITDLG:
823 WinSendDlgItemMsg(hwnd,
824 CFG5_FILTER,
825 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
826 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
827 break;
828
829 case UM_FOCUSME:
830 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, IDM_HELP));
831 return 0;
832
833 case UM_UNDO:
834 {
835 ULONG flWindowAttr = 0;
836 ULONG ulSize = sizeof(ULONG);
837
838 if (!PrfQueryProfileData(fmprof,
839 appname,
840 "TreeflWindowAttr",
841 (PVOID) & flWindowAttr, &ulSize))
842 flWindowAttr |= (CV_TREE | CA_TREELINE | CV_ICON | CV_MINI | CV_FLOW);
843 WinCheckButton(hwnd, CFG5_ICON, ((flWindowAttr & CV_ICON) != FALSE));
844 WinCheckButton(hwnd, CFG5_MINIICONS,
845 ((flWindowAttr & CV_MINI) != FALSE));
846 memset(&mask, 0, sizeof(mask));
847 mask.attrFile = FILE_DIRECTORY | FILE_ARCHIVED | FILE_HIDDEN |
848 FILE_SYSTEM | FILE_NORMAL | FILE_READONLY;
849 mask.fIsTree = TRUE;
850 ulSize = sizeof(MASK);
851 if (PrfQueryProfileData(fmprof, appname, "TreeFilter", &mask, &ulSize)) {
852 SetMask(NULL, &mask);
853 }
854 if (!mask.attrFile)
855 mask.attrFile = (FILE_READONLY | FILE_NORMAL |
856 FILE_ARCHIVED | FILE_DIRECTORY |
857 FILE_HIDDEN | FILE_SYSTEM);
858 strcpy(mask.prompt, GetPString(IDS_TREEFILTERTITLETEXT));
859 WinSetDlgItemText(hwnd, CFG5_FILTER, mask.szMask);
860 WinCheckButton(hwnd, CFG6_SORTFIRST, FALSE);
861 WinCheckButton(hwnd, CFG6_SORTLAST, FALSE);
862 WinCheckButton(hwnd, CFG6_SORTSIZE, FALSE);
863 WinCheckButton(hwnd, CFG6_SORTEASIZE, FALSE);
864 WinCheckButton(hwnd, CFG6_SORTLWDATE, FALSE);
865 WinCheckButton(hwnd, CFG6_SORTLADATE, FALSE);
866 WinCheckButton(hwnd, CFG6_SORTCRDATE, FALSE);
867 WinCheckButton(hwnd, CFG6_SORTNAME, FALSE);
868 WinCheckButton(hwnd, CFG6_SORTREVERSE, FALSE);
869 if (TreesortFlags & SORT_FIRSTEXTENSION)
870 WinCheckButton(hwnd, CFG6_SORTFIRST, TRUE);
871 else if (TreesortFlags & SORT_LASTEXTENSION)
872 WinCheckButton(hwnd, CFG6_SORTLAST, TRUE);
873 else if (TreesortFlags & SORT_SIZE)
874 WinCheckButton(hwnd, CFG6_SORTSIZE, TRUE);
875 else if (TreesortFlags & SORT_EASIZE)
876 WinCheckButton(hwnd, CFG6_SORTEASIZE, TRUE);
877 else if (TreesortFlags & SORT_LWDATE)
878 WinCheckButton(hwnd, CFG6_SORTLWDATE, TRUE);
879 else if (TreesortFlags & SORT_LADATE)
880 WinCheckButton(hwnd, CFG6_SORTLADATE, TRUE);
881 else if (TreesortFlags & SORT_CRDATE)
882 WinCheckButton(hwnd, CFG6_SORTCRDATE, TRUE);
883 else if (TreesortFlags & SORT_FILENAME)
884 WinCheckButton(hwnd, CFG6_SORTFILENAME, TRUE);
885 else
886 WinCheckButton(hwnd, CFG6_SORTNAME, TRUE);
887 if (TreesortFlags & SORT_REVERSE)
888 WinCheckButton(hwnd, CFG6_SORTREVERSE, TRUE);
889 }
890 return 0;
891
892 case UM_SETUP5:
893 if (WinDlgBox(HWND_DESKTOP, hwndNotebook, PickMaskDlgProc,
894 FM3ModHandle, MSK_FRAME, MPFROMP(&mask))) {
895 SetMask(NULL, &mask);
896 WinSetDlgItemText(hwnd, CFG5_FILTER, mask.szMask);
897 }
898 return 0;
899
900 case WM_CONTROL:
901 switch (SHORT1FROMMP(mp1)) {
902 case CFG5_FILTER:
903 switch (SHORT2FROMMP(mp1)) {
904 case EN_SETFOCUS:
905 PostMsg(hwnd, UM_FOCUSME, MPVOID, MPVOID);
906 PostMsg(hwnd, UM_SETUP5, MPVOID, MPVOID);
907 break;
908 }
909 break;
910 }
911 return 0;
912
913 case WM_COMMAND:
914 switch (SHORT1FROMMP(mp1)) {
915 case IDM_UNDO:
916 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
917 break;
918
919 case DID_CANCEL:
920 WinSendMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
921
922 case DID_OK:
923 PostMsg((HWND) WinQueryWindowULong(hwnd, QWL_USER), msg, mp1, mp2);
924 break;
925
926 case IDM_HELP:
927 if (hwndHelp)
928 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
929 MPFROM2SHORT(HELP_TREEVIEW, 0),
930 MPFROMSHORT(HM_RESOURCEID));
931 break;
932 }
933 return 0;
934
935 case WM_CLOSE:
936 {
937 ULONG flWindowAttr = 0;
938
939 if (WinQueryButtonCheckstate(hwnd, CFG5_ICON))
940 flWindowAttr |= CV_ICON;
941 else
942 flWindowAttr |= CV_TEXT;
943 if (WinQueryButtonCheckstate(hwnd, CFG5_MINIICONS))
944 flWindowAttr |= CV_MINI;
945 flWindowAttr |= (CV_TREE | CV_FLOW | CA_TREELINE);
946 PrfWriteProfileData(fmprof,
947 appname,
948 "TreeflWindowAttr", &flWindowAttr, sizeof(ULONG));
949 if (hwndTree) {
950
951 CNRINFO cnri;
952
953 memset(&cnri, 0, sizeof(cnri));
954 cnri.cb = sizeof(cnri);
955 WinSendMsg(WinWindowFromID
956 (WinWindowFromID(hwndTree, FID_CLIENT), TREE_CNR),
957 CM_QUERYCNRINFO, MPFROMP(&cnri), MPFROMLONG(sizeof(cnri)));
958 cnri.flWindowAttr = flWindowAttr;
959 WinSendMsg(WinWindowFromID
960 (WinWindowFromID(hwndTree, FID_CLIENT), TREE_CNR),
961 CM_SETCNRINFO, MPFROMP(&cnri),
962 MPFROMLONG(CMA_FLWINDOWATTR));
963 }
964 }
965 TreesortFlags = 0;
966 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTFILENAME))
967 TreesortFlags |= SORT_FILENAME;
968 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTSIZE))
969 TreesortFlags |= SORT_SIZE;
970 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTEASIZE))
971 TreesortFlags |= SORT_EASIZE;
972 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTFIRST))
973 TreesortFlags |= SORT_FIRSTEXTENSION;
974 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTLAST))
975 TreesortFlags |= SORT_LASTEXTENSION;
976 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTLWDATE))
977 TreesortFlags |= SORT_LWDATE;
978 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTLADATE))
979 TreesortFlags |= SORT_LADATE;
980 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTCRDATE))
981 TreesortFlags |= SORT_CRDATE;
982 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTDIRSFIRST))
983 TreesortFlags |= SORT_DIRSFIRST;
984 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTDIRSLAST))
985 TreesortFlags |= SORT_DIRSLAST;
986 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTREVERSE))
987 TreesortFlags |= SORT_REVERSE;
988 PrfWriteProfileData(fmprof, appname, "TreeSort", &TreesortFlags,
989 sizeof(INT));
990 if (hwndTree)
991 PostMsg(hwndTree, WM_COMMAND, MPFROM2SHORT(IDM_RESORT, 0), MPVOID);
992 *mask.prompt = 0;
993 PrfWriteProfileData(fmprof, appname, "TreeFilter", &mask, sizeof(MASK));
994 if (hwndTree) {
995
996 DIRCNRDATA *dcd;
997
998 dcd = WinQueryWindowPtr(WinWindowFromID(WinWindowFromID(hwndTree,
999 FID_CLIENT),
1000 TREE_CNR), QWL_USER);
1001 if (dcd && dcd->size == sizeof(DIRCNRDATA)) {
1002 dcd->mask = mask;
1003 PostMsg(hwndTree, UM_FILTER, MPVOID, MPVOID);
1004 }
1005 }
1006 break;
1007 }
1008 return WinDefDlgProc(hwnd, msg, mp1, mp2);
1009}
1010
1011MRESULT EXPENTRY CfgTDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1012{
1013 switch (msg) {
1014 case WM_INITDLG:
1015 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1016 break;
1017
1018 case UM_UNDO:
1019 WinCheckButton(hwnd, CFGT_FOLLOWTREE, fFollowTree);
1020 WinCheckButton(hwnd, CFGT_TOPDIR, fTopDir);
1021 WinCheckButton(hwnd, CFGT_DCOPENS, fDCOpens);
1022 WinCheckButton(hwnd, CFGT_VTREEOPENSWPS, fVTreeOpensWPS);
1023 WinCheckButton(hwnd, CFGT_COLLAPSEFIRST, fCollapseFirst);
1024 WinCheckButton(hwnd, CFGT_SWITCHTREEONFOCUS, fSwitchTreeOnFocus);
1025 WinCheckButton(hwnd, CFGT_SWITCHTREE, fSwitchTree);
1026 WinCheckButton(hwnd, CFGT_SWITCHTREEEXPAND, fSwitchTreeExpand);
1027 WinCheckButton(hwnd, CFGT_SHOWENV, fShowEnv);
1028 return 0;
1029
1030 case WM_COMMAND:
1031 switch (SHORT1FROMMP(mp1)) {
1032 case IDM_UNDO:
1033 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1034 break;
1035
1036 case DID_CANCEL:
1037 WinSendMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1038
1039 case DID_OK:
1040 PostMsg((HWND) WinQueryWindowULong(hwnd, QWL_USER), msg, mp1, mp2);
1041 break;
1042
1043 case IDM_HELP:
1044 if (hwndHelp)
1045 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
1046 MPFROM2SHORT(HELP_CFGT, 0), MPFROMSHORT(HM_RESOURCEID));
1047 break;
1048 }
1049 return 0;
1050
1051 case WM_CLOSE:
1052 fVTreeOpensWPS = WinQueryButtonCheckstate(hwnd, CFGT_VTREEOPENSWPS);
1053 PrfWriteProfileData(fmprof, FM3Str, "VTreeOpensWPS", &fVTreeOpensWPS,
1054 sizeof(BOOL));
1055 fCollapseFirst = WinQueryButtonCheckstate(hwnd, CFGT_COLLAPSEFIRST);
1056 PrfWriteProfileData(fmprof, appname, "CollapseFirst", &fCollapseFirst,
1057 sizeof(BOOL));
1058 fSwitchTreeOnFocus = WinQueryButtonCheckstate(hwnd,
1059 CFGT_SWITCHTREEONFOCUS);
1060 PrfWriteProfileData(fmprof, appname, "SwitchTreeOnFocus",
1061 &fSwitchTreeOnFocus, sizeof(BOOL));
1062 fSwitchTreeExpand = WinQueryButtonCheckstate(hwnd, CFGT_SWITCHTREEEXPAND);
1063 PrfWriteProfileData(fmprof, appname, "SwitchTreeExpand",
1064 &fSwitchTreeExpand, sizeof(BOOL));
1065 fSwitchTree = WinQueryButtonCheckstate(hwnd, CFGT_SWITCHTREE);
1066 PrfWriteProfileData(fmprof, appname, "SwitchTree", &fSwitchTree,
1067 sizeof(BOOL));
1068 fFollowTree = WinQueryButtonCheckstate(hwnd, CFGT_FOLLOWTREE);
1069 PrfWriteProfileData(fmprof, appname, "FollowTree", &fFollowTree,
1070 sizeof(BOOL));
1071 fTopDir = WinQueryButtonCheckstate(hwnd, CFGT_TOPDIR);
1072 PrfWriteProfileData(fmprof, appname, "TopDir", (PVOID) & fTopDir,
1073 sizeof(BOOL));
1074 fDCOpens = WinQueryButtonCheckstate(hwnd, CFGT_DCOPENS);
1075 PrfWriteProfileData(fmprof, FM3Str, "DoubleClickOpens", &fDCOpens,
1076 sizeof(BOOL));
1077 if (hwndTree && fShowEnv != WinQueryButtonCheckstate(hwnd, CFGT_SHOWENV))
1078 PostMsg(WinWindowFromID
1079 (WinWindowFromID(hwndTree, FID_CLIENT), TREE_CNR), WM_COMMAND,
1080 MPFROM2SHORT(IDM_RESCAN, 0), MPVOID);
1081 fShowEnv = WinQueryButtonCheckstate(hwnd, CFGT_SHOWENV);
1082 PrfWriteProfileData(fmprof, appname, "ShowEnv", &fShowEnv, sizeof(BOOL));
1083 break;
1084 }
1085 return WinDefDlgProc(hwnd, msg, mp1, mp2);
1086}
1087
1088MRESULT EXPENTRY CfgGDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1089{
1090 switch (msg) {
1091 case WM_INITDLG:
1092 WinSendDlgItemMsg(hwnd, CFGG_CMDLNLNGTH, SPBM_SETTEXTLIMIT,
1093 MPFROMSHORT(8), MPVOID);
1094 WinSendDlgItemMsg(hwnd, CFGG_CMDLNLNGTH, SPBM_OVERRIDESETLIMITS,
1095 MPFROMLONG(CMDLNLNGTH_MAX), MPFROMLONG(CMDLNLNGTH_MIN));
1096 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1097 break;
1098
1099 case UM_UNDO:
1100 WinCheckButton(hwnd, CFGG_CONFIRMDELETE, fConfirmDelete);
1101 WinCheckButton(hwnd, CFGG_VERIFYWRITES, fVerify);
1102 WinCheckButton(hwnd, CFGG_LINKSETSICON, fLinkSetsIcon);
1103 WinCheckButton(hwnd, CFGG_DONTMOVEMOUSE, fDontMoveMouse);
1104 WinCheckButton(hwnd, CFGG_DEFAULTCOPY, fCopyDefault);
1105 WinCheckButton(hwnd, CFGG_IDLECOPY, fRealIdle);
1106 WinCheckButton(hwnd, CFGG_DNDDLG, fDragndropDlg);
1107 WinCheckButton(hwnd, CFGG_DEFAULTDELETEPERM, fDefaultDeletePerm);
1108 {
1109 long th = fNoFinger ? 2 : (fNoDead ? 1 : 0);
1110 WinCheckButton(hwnd, CFGG_NODEAD, th);
1111 }
1112 WinCheckButton(hwnd, CFGG_BORING, fDullMin);
1113 WinCheckButton(hwnd, CFGG_CUSTOMFILEDLG, fCustomFileDlg);
1114 WinCheckButton(hwnd, CFGG_FM2DELETES, fFM2Deletes);
1115 WinCheckButton(hwnd, CFGG_CONFIRMTARGET, fConfirmTarget);
1116 WinSetDlgItemText(hwnd, CFGG_TARGETDIR, targetdir);
1117 WinCheckButton(hwnd, CFGG_TRASHCAN, fTrashCan);
1118 WinSendDlgItemMsg(hwnd, CFGG_CMDLNLNGTH, SPBM_SETCURRENTVALUE,
1119 MPFROMLONG(MaxComLineStrg), MPVOID);
1120 return 0;
1121
1122 case UM_FOCUSME:
1123 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, IDM_HELP));
1124 return 0;
1125
1126 case UM_SETUP5:
1127 SetTargetDir(hwnd, FALSE);
1128 WinSetDlgItemText(hwnd, CFGG_TARGETDIR, targetdir);
1129 return 0;
1130
1131 case WM_CONTROL:
1132 switch (SHORT1FROMMP(mp1)) {
1133 case CFGG_TARGETDIR:
1134 switch (SHORT2FROMMP(mp1)) {
1135 case EN_SETFOCUS:
1136 PostMsg(hwnd, UM_FOCUSME, MPVOID, MPVOID);
1137 PostMsg(hwnd, UM_SETUP5, MPVOID, MPVOID);
1138 break;
1139 }
1140 break;
1141 }
1142 return 0;
1143
1144 case WM_COMMAND:
1145 switch (SHORT1FROMMP(mp1)) {
1146 case IDM_UNDO:
1147 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1148 break;
1149
1150 case DID_CANCEL:
1151 WinSendMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1152
1153 case DID_OK:
1154 PostMsg((HWND) WinQueryWindowULong(hwnd, QWL_USER), msg, mp1, mp2);
1155 break;
1156
1157 case IDM_HELP:
1158 if (hwndHelp)
1159 WinSendMsg(hwndHelp,
1160 HM_DISPLAY_HELP,
1161 MPFROM2SHORT(HELP_CFGG, 0), MPFROMSHORT(HM_RESOURCEID));
1162 break;
1163 }
1164 return 0;
1165
1166 case WM_CLOSE:
1167 {
1168 long test;
1169
1170 test = WinQueryButtonCheckstate(hwnd, CFGG_NODEAD);
1171 fNoDead = (test == 1);
1172 fNoFinger = (test == 2);
1173 PrfWriteProfileData(fmprof, FM3Str, "NoDead", &fNoDead, sizeof(BOOL));
1174 PrfWriteProfileData(fmprof,
1175 FM3Str, "NoFinger", &fNoFinger, sizeof(BOOL));
1176 WinDestroyPointer(hptrFinger);
1177 if (!fNoDead)
1178 hptrFinger = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, FINGER_ICON);
1179 else
1180 hptrFinger = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, FINGER2_ICON);
1181 }
1182 fLinkSetsIcon = WinQueryButtonCheckstate(hwnd, CFGG_LINKSETSICON);
1183 PrfWriteProfileData(fmprof,
1184 appname,
1185 "LinkSetsIcon", &fLinkSetsIcon, sizeof(BOOL));
1186 fCustomFileDlg = WinQueryButtonCheckstate(hwnd, CFGG_CUSTOMFILEDLG);
1187 PrfWriteProfileData(fmprof,
1188 FM3Str,
1189 "CustomFileDlg", &fCustomFileDlg, sizeof(BOOL));
1190 fDullMin = WinQueryButtonCheckstate(hwnd, CFGG_BORING);
1191 PrfWriteProfileData(fmprof,
1192 FM3Str, "DullDatabar", &fDullMin, sizeof(BOOL));
1193 fConfirmDelete = WinQueryButtonCheckstate(hwnd, CFGG_CONFIRMDELETE);
1194 PrfWriteProfileData(fmprof,
1195 appname,
1196 "ConfirmDelete", &fConfirmDelete, sizeof(BOOL));
1197 fDontMoveMouse = WinQueryButtonCheckstate(hwnd, CFGG_DONTMOVEMOUSE);
1198 PrfWriteProfileData(fmprof,
1199 appname,
1200 "DontMoveMouse", &fDontMoveMouse, sizeof(BOOL));
1201 fCopyDefault = WinQueryButtonCheckstate(hwnd, CFGG_DEFAULTCOPY);
1202 PrfWriteProfileData(fmprof, appname, "DefaultCopy",
1203 &fCopyDefault, sizeof(BOOL));
1204 fRealIdle = WinQueryButtonCheckstate(hwnd, CFGG_IDLECOPY);
1205 PrfWriteProfileData(fmprof, appname, "IdleCopy",
1206 &fRealIdle, sizeof(BOOL));
1207 fDragndropDlg = WinQueryButtonCheckstate(hwnd, CFGG_DNDDLG);
1208 PrfWriteProfileData(fmprof, appname, "Drag&DropDlg",
1209 &fDragndropDlg, sizeof(BOOL));
1210 fVerify = WinQueryButtonCheckstate(hwnd, CFGG_VERIFYWRITES);
1211 PrfWriteProfileData(fmprof, appname, "VerifyWrites",
1212 &fVerify, sizeof(BOOL));
1213 DosSetVerify(fVerify);
1214 fDefaultDeletePerm = WinQueryButtonCheckstate(hwnd,
1215 CFGG_DEFAULTDELETEPERM);
1216 PrfWriteProfileData(fmprof, appname, "DefaultDeletePerm",
1217 &fDefaultDeletePerm, sizeof(BOOL));
1218 fFM2Deletes = WinQueryButtonCheckstate(hwnd, CFGG_FM2DELETES);
1219 PrfWriteProfileData(fmprof, FM3Str, "FM2Deletes",
1220 &fFM2Deletes, sizeof(BOOL));
1221 fTrashCan = WinQueryButtonCheckstate(hwnd, CFGG_TRASHCAN);
1222 PrfWriteProfileData(fmprof, FM3Str, "TrashCan",
1223 &fTrashCan, sizeof(BOOL));
1224 fConfirmTarget = WinQueryButtonCheckstate(hwnd, CFGG_CONFIRMTARGET);
1225 PrfWriteProfileData(fmprof, appname, "ConfirmTarget",
1226 &fConfirmTarget, sizeof(BOOL));
1227 {
1228 WinSendDlgItemMsg(hwnd, CFGG_CMDLNLNGTH, SPBM_QUERYVALUE,
1229 MPFROMP(&MaxComLineStrg), MPFROM2SHORT(0, SPBQ_DONOTUPDATE));
1230 if (MaxComLineStrg < CMDLNLNGTH_MIN)
1231 MaxComLineStrg = CMDLNLNGTH_MIN;
1232 else if (MaxComLineStrg > CMDLNLNGTH_MAX)
1233 MaxComLineStrg = CMDLNLNGTH_MAX;
1234 PrfWriteProfileData(fmprof,
1235 appname, "MaxComLineStrg", &MaxComLineStrg, sizeof(ULONG));
1236 }
1237 break;
1238 }
1239 return WinDefDlgProc(hwnd, msg, mp1, mp2);
1240}
1241
1242MRESULT EXPENTRY CfgCDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1243{
1244 switch (msg) {
1245 case WM_INITDLG:
1246 WinSendDlgItemMsg(hwnd, CFGC_COMPARE, EM_SETTEXTLIMIT,
1247 MPFROM2SHORT(MaxComLineStrg, 0), MPVOID);
1248 WinSendDlgItemMsg(hwnd, CFGC_DIRCOMPARE, EM_SETTEXTLIMIT,
1249 MPFROM2SHORT(MaxComLineStrg, 0), MPVOID);
1250 WinEnableWindow(WinWindowFromID(hwnd, CFGC_FIND), FALSE);
1251 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1252 break;
1253
1254 case UM_UNDO:
1255 WinSetDlgItemText(hwnd, CFGC_COMPARE, compare);
1256 WinSetDlgItemText(hwnd, CFGC_DIRCOMPARE, dircompare);
1257 return 0;
1258
1259 case WM_CONTROL:
1260 switch (SHORT1FROMMP(mp1)) {
1261 case CFGC_COMPARE:
1262 case CFGC_DIRCOMPARE:
1263 switch (SHORT2FROMMP(mp1)) {
1264 case EN_KILLFOCUS:
1265 WinEnableWindow(WinWindowFromID(hwnd, CFGC_FIND), FALSE);
1266 break;
1267 case EN_SETFOCUS:
1268 WinEnableWindow(WinWindowFromID(hwnd, CFGC_FIND), TRUE);
1269 break;
1270 }
1271 break;
1272 }
1273 return 0;
1274
1275 case WM_COMMAND:
1276 switch (SHORT1FROMMP(mp1)) {
1277 case IDM_UNDO:
1278 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1279 break;
1280
1281 case DID_CANCEL:
1282 WinSendMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1283
1284 case DID_OK:
1285 PostMsg((HWND) WinQueryWindowULong(hwnd, QWL_USER), msg, mp1, mp2);
1286 break;
1287
1288 case IDM_HELP:
1289 if (hwndHelp)
1290 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
1291 MPFROM2SHORT(HELP_CFGC, 0), MPFROMSHORT(HM_RESOURCEID));
1292 break;
1293
1294 case CFGC_FIND:
1295 {
1296 CHAR filename[CCHMAXPATH + 9], szfilename[CCHMAXPATH + 9];
1297 USHORT id;
1298 HWND hwndFocus;
1299
1300 strcpy(filename, "*.EXE");
1301 hwndFocus = WinQueryFocus(HWND_DESKTOP);
1302 if (hwndFocus) {
1303 id = WinQueryWindowUShort(hwndFocus, QWS_ID);
1304 switch (id) {
1305 case CFGC_COMPARE:
1306 case CFGC_DIRCOMPARE:
1307 if (insert_filename(hwnd, filename, 2, FALSE) && *filename) {
1308 BldQuotedFileName(szfilename, filename);
1309 strcat(szfilename, " %a");
1310 WinSetDlgItemText(hwnd, id, szfilename);
1311 }
1312 break;
1313 default:
1314 Runtime_Error(pszSrcFile, __LINE__, "bad case %d", id);
1315 break;
1316 }
1317 }
1318 }
1319 break;
1320 }
1321 return 0;
1322
1323 case WM_CLOSE:
1324 {
1325 CHAR *szCLBuf;
1326 PSZ pszWorkBuf;
1327
1328 szCLBuf = xmalloc(MaxComLineStrg, pszSrcFile, __LINE__);
1329 if (!szCLBuf)
1330 return 0; //already complained
1331 pszWorkBuf = xmalloc(MaxComLineStrg, pszSrcFile, __LINE__);
1332 if (!pszWorkBuf) {
1333 free(szCLBuf);
1334 return 0; //already complained
1335 }
1336 WinQueryDlgItemText(hwnd, CFGC_DIRCOMPARE, MaxComLineStrg, szCLBuf);
1337 szCLBuf[MaxComLineStrg - 1] = 0;
1338 if (strcmp(szCLBuf, dircompare)){
1339 NormalizeCmdLine(pszWorkBuf, szCLBuf);
1340 memcpy(dircompare, pszWorkBuf, strlen(pszWorkBuf) + 1);
1341 if (!strchr(dircompare, '%') && strlen(dircompare) > 3)
1342 strcat(dircompare, " %a");
1343 }
1344 PrfWriteProfileString(fmprof, appname, "DirCompare", dircompare);
1345 WinQueryDlgItemText(hwnd, CFGC_COMPARE, MaxComLineStrg, szCLBuf);
1346 szCLBuf[MaxComLineStrg - 1] = 0;
1347 if (strcmp(szCLBuf, compare)){
1348 NormalizeCmdLine(pszWorkBuf, szCLBuf);
1349 memcpy(compare, pszWorkBuf, strlen(pszWorkBuf) + 1);
1350 if (!strchr(compare, '%') && strlen(compare) > 3)
1351 strcat(compare, " %a");
1352 }
1353 free(pszWorkBuf);
1354 free(szCLBuf);
1355 PrfWriteProfileString(fmprof, appname, "Compare", compare);
1356 break;
1357 }
1358 }
1359 if (fCancelAction) {
1360 fCancelAction = FALSE;
1361 WinDlgBox(HWND_DESKTOP,
1362 hwnd,
1363 CfgDlgProc,
1364 FM3ModHandle,
1365 CFG_FRAME,
1366 MPFROMLONG(IDM_COMPARESETTINGS));
1367 }
1368 return WinDefDlgProc(hwnd, msg, mp1, mp2);
1369}
1370
1371MRESULT EXPENTRY CfgDDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1372{
1373 switch (msg) {
1374 case WM_INITDLG:
1375 WinSendMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1376 break;
1377
1378 case UM_UNDO:
1379 WinCheckButton(hwnd, CFGD_UNHILITE, fUnHilite);
1380 WinCheckButton(hwnd, CFGD_SYNCUPDATES, fSyncUpdates);
1381 WinCheckButton(hwnd, CFGD_LOOKINDIR, fLookInDir);
1382 WinCheckButton(hwnd, CFGD_MINONOPEN, fMinOnOpen);
1383 WinCheckButton(hwnd, CFGD_SELECTEDALWAYS, fSelectedAlways);
1384 WinCheckButton(hwnd, CFGD_NOSEARCH, fNoSearch);
1385 WinCheckButton(hwnd, CFGD_EXTENDEDSEL,
1386 ((ulCnrType & CCS_EXTENDSEL) != 0));
1387 WinCheckButton(hwnd, CFGD_MULTIPLESEL,
1388 ((ulCnrType & CCS_MULTIPLESEL) != 0));
1389 WinCheckButton(hwnd, CFGD_LEAVETREE, fLeaveTree);
1390 WinCheckButton(hwnd, CFGD_NOFOLDMENU, fNoFoldMenu);
1391 return 0;
1392
1393 case WM_COMMAND:
1394 switch (SHORT1FROMMP(mp1)) {
1395 case IDM_UNDO:
1396 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1397 break;
1398
1399 case DID_CANCEL:
1400 WinSendMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1401
1402 case DID_OK:
1403 PostMsg((HWND) WinQueryWindowULong(hwnd, QWL_USER), msg, mp1, mp2);
1404 break;
1405
1406 case IDM_HELP:
1407 if (hwndHelp)
1408 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
1409 MPFROM2SHORT(HELP_CFGD, 0), MPFROMSHORT(HM_RESOURCEID));
1410 break;
1411 }
1412 return 0;
1413
1414 case WM_CLOSE:
1415 ulCnrType = 0;
1416 if (WinQueryButtonCheckstate(hwnd, CFGD_EXTENDEDSEL))
1417 ulCnrType |= CCS_EXTENDSEL;
1418 if (WinQueryButtonCheckstate(hwnd, CFGD_MULTIPLESEL))
1419 ulCnrType |= CCS_MULTIPLESEL;
1420 PrfWriteProfileData(fmprof, appname, "ContainerType",
1421 (PVOID) & ulCnrType, sizeof(BOOL));
1422 fMinOnOpen = WinQueryButtonCheckstate(hwnd, CFGD_MINONOPEN);
1423 PrfWriteProfileData(fmprof, FM3Str, "MinDirOnOpen", &fMinOnOpen,
1424 sizeof(BOOL));
1425 fLeaveTree = WinQueryButtonCheckstate(hwnd, CFGD_LEAVETREE);
1426 PrfWriteProfileData(fmprof, appname, "LeaveTree", &fLeaveTree,
1427 sizeof(BOOL));
1428 fNoFoldMenu = WinQueryButtonCheckstate(hwnd, CFGD_NOFOLDMENU);
1429 PrfWriteProfileData(fmprof, appname, "NoFoldMenu", &fNoFoldMenu,
1430 sizeof(BOOL));
1431 fSelectedAlways = WinQueryButtonCheckstate(hwnd, CFGD_SELECTEDALWAYS);
1432 PrfWriteProfileData(fmprof, appname, "SelectedAlways", &fSelectedAlways,
1433 sizeof(BOOL));
1434 fNoSearch = WinQueryButtonCheckstate(hwnd, CFGD_NOSEARCH);
1435 PrfWriteProfileData(fmprof, appname, "NoSearch", &fNoSearch,
1436 sizeof(BOOL));
1437 fLookInDir = WinQueryButtonCheckstate(hwnd, CFGD_LOOKINDIR);
1438 PrfWriteProfileData(fmprof, FM3Str, "LookInDir", (PVOID) & fLookInDir,
1439 sizeof(BOOL));
1440 fUnHilite = WinQueryButtonCheckstate(hwnd, CFGD_UNHILITE);
1441 PrfWriteProfileData(fmprof, appname, "UnHilite",
1442 &fUnHilite, sizeof(BOOL));
1443 {
1444 BOOL fOldSyncUpdates = WinQueryButtonCheckstate(hwnd, CFGD_SYNCUPDATES);
1445
1446 if (fOldSyncUpdates != fSyncUpdates) {
1447 fSyncUpdates = fOldSyncUpdates;
1448 if (hwndMain && !strcmp(realappname, FM3Str)) {
1449 // Save state and restore to refresh windows with new settings
1450 if (SaveDirCnrState(hwndMain, GetPString(IDS_FM2TEMPTEXT)) > 0) {
1451 PostMsg(MainObjectHwnd, UM_RESTORE, MPVOID, MPFROMLONG(2));
1452// PostMsg(hwndMain, UM_RESTORE, MPVOID, MPVOID);
1453 PostMsg(MainObjectHwnd, UM_RESTORE, GetPString(IDS_FM2TEMPTEXT), MPVOID);
1454 }
1455 }
1456 }
1457 }
1458 PrfWriteProfileData(fmprof, appname, "SyncUpdates",
1459 &fSyncUpdates, sizeof(BOOL));
1460 if (!(ulCnrType & (CCS_EXTENDSEL | CCS_MULTIPLESEL)))
1461 saymsg(MB_ENTER | MB_ICONEXCLAMATION,
1462 HWND_DESKTOP,
1463 GetPString(IDS_WARNINGTEXT),
1464 GetPString(IDS_SELECTTYPEERRORTEXT));
1465 break; // WM_CLOSE
1466 }
1467 return WinDefDlgProc(hwnd, msg, mp1, mp2);
1468}
1469
1470MRESULT EXPENTRY CfgMDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1471{
1472 switch (msg) {
1473 case WM_INITDLG:
1474 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1475 break;
1476
1477 case UM_UNDO:
1478 WinCheckButton(hwnd, CFGM_EXTERNALINIS, fExternalINIs);
1479 WinCheckButton(hwnd, CFGM_EXTERNALARCBOXES, fExternalArcboxes);
1480 WinCheckButton(hwnd, CFGM_EXTERNALVIEWER, fExternalViewer);
1481 WinCheckButton(hwnd, CFGM_EXTERNALCOLLECTOR, fExternalCollector);
1482 WinCheckButton(hwnd, CFGM_SAVESTATE, fSaveState);
1483 WinCheckButton(hwnd, CFGM_AUTOTILE, (fAutoTile));
1484 WinCheckButton(hwnd, CFGM_FREETREE, (fFreeTree));
1485 WinCheckButton(hwnd, CFGM_SPLITSTATUS, (fSplitStatus));
1486 WinCheckButton(hwnd, CFGM_NOTREEGAP, (fNoTreeGap));
1487 WinCheckButton(hwnd, CFGM_STARTMIN, (fStartMinimized));
1488 WinCheckButton(hwnd, CFGM_STARTMAX, (fStartMaximized));
1489 WinCheckButton(hwnd, CFGM_DATAMIN, (fDataMin));
1490 WinCheckButton(hwnd, CFGM_TILEBACKWARDS, (fTileBackwards));
1491 {
1492 long th;
1493
1494 th = (fAutoAddDirs && fAutoAddAllDirs) ? 2 : (fAutoAddDirs) ? 1 : 0;
1495 WinCheckButton(hwnd, CFGM_RECENTDIRS, th);
1496 WinSendMsg(hwnd, UM_RESTORE, MPFROM2SHORT(CFGM_RECENTDIRS, 0), MPVOID);
1497 }
1498 WinCheckButton(hwnd, CFGM_USERLISTSWITCHES, fUserListSwitches);
1499 WinCheckButton(hwnd, CFGM_WSANIMATE, (fwsAnimate != 0));
1500 WinCheckButton(hwnd, CFGM_SEPARATEPARMS, fSeparateParms);
1501 WinCheckButton(hwnd, CFGM_BLUELED, fBlueLED);
1502 WinCheckButton(hwnd, CFGM_SHOWTARGET, fShowTarget);
1503 WinEnableWindow(WinWindowFromID(hwnd, CFGM_STARTMAX), !(fStartMinimized));
1504 WinEnableWindow(WinWindowFromID(hwnd, CFGM_STARTMIN), !(fStartMaximized));
1505 return 0;
1506
1507 case UM_RESTORE:
1508 {
1509 long test;
1510 BOOL th, oh;
1511 char s[80];
1512
1513 test = WinQueryButtonCheckstate(hwnd, SHORT1FROMMP(mp1));
1514 th = (test != 0);
1515 oh = (test == 1);
1516 *s = 0;
1517 switch (SHORT1FROMMP(mp1)) {
1518 case CFGM_RECENTDIRS:
1519 sprintf(s,
1520 GetPString(IDS_RECENTHELPWHICHTEXT),
1521 (!oh && th) ?
1522 GetPString(IDS_RECENTONLYTEXT) :
1523 (oh && th) ?
1524 GetPString(IDS_ALLONLYTEXT) : GetPString(IDS_NONE));
1525 break;
1526 }
1527 if (*s)
1528 WinSetDlgItemText(hwnd, SHORT1FROMMP(mp1), s);
1529 }
1530 return 0;
1531
1532 case WM_CONTROL:
1533 switch (SHORT1FROMMP(mp1)) {
1534 case CFGM_RECENTDIRS:
1535 WinSendMsg(hwnd, UM_RESTORE, mp1, MPVOID);
1536 break;
1537 case CFGM_STARTMIN:
1538 if (WinQueryButtonCheckstate(hwnd, CFGM_STARTMIN)) {
1539 WinCheckButton(hwnd, CFGM_STARTMAX, FALSE);
1540 WinEnableWindow(WinWindowFromID(hwnd, CFGM_STARTMAX), FALSE);
1541 }
1542 else
1543 WinEnableWindow(WinWindowFromID(hwnd, CFGM_STARTMAX), TRUE);
1544 break;
1545 case CFGM_STARTMAX:
1546 if (WinQueryButtonCheckstate(hwnd, CFGM_STARTMAX)) {
1547 WinCheckButton(hwnd, CFGM_STARTMIN, FALSE);
1548 WinEnableWindow(WinWindowFromID(hwnd, CFGM_STARTMIN), FALSE);
1549 }
1550 else
1551 WinEnableWindow(WinWindowFromID(hwnd, CFGM_STARTMIN), TRUE);
1552 break;
1553 }
1554 return 0;
1555
1556 case WM_COMMAND:
1557 switch (SHORT1FROMMP(mp1)) {
1558 case IDM_UNDO:
1559 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1560 break;
1561
1562 case DID_CANCEL:
1563 WinSendMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1564
1565 case DID_OK:
1566 PostMsg((HWND) WinQueryWindowULong(hwnd, QWL_USER), msg, mp1, mp2);
1567 break;
1568
1569 case IDM_HELP:
1570 if (hwndHelp)
1571 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
1572 MPFROM2SHORT(HELP_CFGM, 0), MPFROMSHORT(HM_RESOURCEID));
1573 break;
1574 }
1575 return 0;
1576
1577 case WM_CLOSE:
1578 if (hwndMain && !strcmp(realappname, FM3Str)) {
1579 if (fFreeTree != WinQueryButtonCheckstate(hwnd, CFGM_FREETREE))
1580 PostMsg(hwndMain, WM_COMMAND, MPFROM2SHORT(IDM_FREETREE, 0), MPVOID);
1581 if (fAutoTile != WinQueryButtonCheckstate(hwnd, CFGM_AUTOTILE))
1582 PostMsg(hwndMain, WM_COMMAND, MPFROM2SHORT(IDM_AUTOTILE, 0), MPVOID);
1583 if (fSplitStatus != WinQueryButtonCheckstate(hwnd, CFGM_SPLITSTATUS)) {
1584 fSplitStatus = (fSplitStatus) ? FALSE : TRUE;
1585 PostMsg(hwndMain, WM_COMMAND, MPFROM2SHORT(IDM_BLINK, 0), MPVOID);
1586 PrfWriteProfileData(fmprof, FM3Str, "SplitStatus", &fSplitStatus,
1587 sizeof(BOOL));
1588 }
1589 }
1590 fUserListSwitches = WinQueryButtonCheckstate(hwnd, CFGM_USERLISTSWITCHES);
1591 PrfWriteProfileData(fmprof, FM3Str, "UserListSwitches",
1592 (PVOID) & fUserListSwitches, sizeof(BOOL));
1593 fExternalINIs = WinQueryButtonCheckstate(hwnd, CFGM_EXTERNALINIS);
1594 PrfWriteProfileData(fmprof, FM3Str, "ExternalINIs",
1595 (PVOID) & fExternalINIs, sizeof(BOOL));
1596 fExternalArcboxes = WinQueryButtonCheckstate(hwnd, CFGM_EXTERNALARCBOXES);
1597 PrfWriteProfileData(fmprof, FM3Str, "ExternalArcboxes",
1598 (PVOID) & fExternalArcboxes, sizeof(BOOL));
1599 fExternalCollector =
1600 WinQueryButtonCheckstate(hwnd, CFGM_EXTERNALCOLLECTOR);
1601 PrfWriteProfileData(fmprof, FM3Str, "ExternalCollector",
1602 (PVOID) & fExternalCollector, sizeof(BOOL));
1603 fExternalViewer = WinQueryButtonCheckstate(hwnd, CFGM_EXTERNALVIEWER);
1604 PrfWriteProfileData(fmprof, FM3Str, "ExternalViewer",
1605 (PVOID) & fExternalViewer, sizeof(BOOL));
1606 {
1607 long test;
1608
1609 test = WinQueryButtonCheckstate(hwnd, CFGM_RECENTDIRS);
1610 fAutoAddDirs = (test != 0);
1611 fAutoAddAllDirs = (test == 2);
1612 }
1613 PrfWriteProfileData(fmprof,
1614 appname,
1615 "AutoAddDirs", (PVOID) & fAutoAddDirs, sizeof(BOOL));
1616 PrfWriteProfileData(fmprof,
1617 appname,
1618 "AutoAddAllDirs",
1619 (PVOID) & fAutoAddAllDirs, sizeof(BOOL));
1620 fwsAnimate = WinQueryButtonCheckstate(hwnd, CFGM_WSANIMATE);
1621 if (fwsAnimate)
1622 fwsAnimate = WS_ANIMATE;
1623 PrfWriteProfileData(fmprof,
1624 appname,
1625 "WS_ANIMATE", (PVOID) & fwsAnimate, sizeof(ULONG));
1626 fSaveState = WinQueryButtonCheckstate(hwnd, CFGM_SAVESTATE);
1627 PrfWriteProfileData(fmprof,
1628 FM3Str,
1629 "SaveState", (PVOID) & fSaveState, sizeof(BOOL));
1630 fStartMinimized = WinQueryButtonCheckstate(hwnd, CFGM_STARTMIN);
1631 PrfWriteProfileData(fmprof,
1632 appname,
1633 "StartMinimized",
1634 (PVOID) & fStartMinimized, sizeof(BOOL));
1635 fStartMaximized = WinQueryButtonCheckstate(hwnd, CFGM_STARTMAX);
1636 PrfWriteProfileData(fmprof,
1637 appname,
1638 "StartMaximized",
1639 (PVOID) & fStartMaximized, sizeof(BOOL));
1640 fDataMin = WinQueryButtonCheckstate(hwnd, CFGM_DATAMIN);
1641 PrfWriteProfileData(fmprof,
1642 FM3Str, "DataMin", (PVOID) & fDataMin, sizeof(BOOL));
1643 fTileBackwards = WinQueryButtonCheckstate(hwnd, CFGM_TILEBACKWARDS);
1644 PrfWriteProfileData(fmprof,
1645 FM3Str,
1646 "TileBackwards",
1647 (PVOID) & fTileBackwards, sizeof(BOOL));
1648 fNoTreeGap = WinQueryButtonCheckstate(hwnd, CFGM_NOTREEGAP);
1649 PrfWriteProfileData(fmprof,
1650 FM3Str,
1651 "NoTreeGap", (PVOID) & fNoTreeGap, sizeof(BOOL));
1652 fBlueLED = WinQueryButtonCheckstate(hwnd, CFGM_BLUELED);
1653 PrfWriteProfileData(fmprof,
1654 appname, "BlueLED", (PVOID) & fBlueLED, sizeof(BOOL));
1655 {
1656 BOOL dummy;
1657
1658 dummy = WinQueryButtonCheckstate(hwnd, CFGM_SHOWTARGET);
1659 if (dummy != fShowTarget) {
1660 fShowTarget = dummy;
1661 PrfWriteProfileData(fmprof,
1662 appname,
1663 "ShowTarget",
1664 (PVOID) & fShowTarget, sizeof(BOOL));
1665 if (hwndMain)
1666 PostMsg(WinQueryWindow(hwndMain, QW_PARENT),
1667 WM_UPDATEFRAME, MPFROMLONG(FCF_SIZEBORDER), MPVOID);
1668 SetTargetDir(hwnd, TRUE);
1669 }
1670 dummy = WinQueryButtonCheckstate(hwnd, CFGM_SEPARATEPARMS);
1671 if (dummy != fSeparateParms) {
1672 fSeparateParms = dummy;
1673 PrfWriteProfileData(fmprof,
1674 FM3Str,
1675 "SeparateParms",
1676 (PVOID) & fSeparateParms, sizeof(BOOL));
1677 WinSendMsg((HWND) WinQueryWindowULong(hwnd, QWL_USER),
1678 UM_UNDO, MPVOID, MPVOID);
1679 }
1680 }
1681 break;
1682 }
1683 return WinDefDlgProc(hwnd, msg, mp1, mp2);
1684}
1685
1686MRESULT EXPENTRY Cfg5DlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1687{
1688 static MASK mask;
1689
1690 switch (msg) {
1691 case WM_INITDLG:
1692 WinSendDlgItemMsg(hwnd, CFG5_SUBJECTDISPLAYWIDTH, SPBM_SETTEXTLIMIT,
1693 MPFROMSHORT(8), MPVOID);
1694 WinSendDlgItemMsg(hwnd, CFG5_SUBJECTDISPLAYWIDTH, SPBM_OVERRIDESETLIMITS,
1695 MPFROMLONG(1000), MPFROMLONG(50));
1696 WinSendDlgItemMsg(hwnd,
1697 CFG5_FILTER,
1698 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
1699 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1700 break;
1701
1702 case UM_FOCUSME:
1703 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, CFG5_MINIICONS));
1704 return 0;
1705
1706 case UM_UNDO:
1707 {
1708 ULONG flWindowAttr = 0;
1709 ULONG ulSize = sizeof(ULONG);
1710
1711 if (!PrfQueryProfileData(fmprof,
1712 appname,
1713 "DirflWindowAttr", &flWindowAttr, &ulSize))
1714 flWindowAttr = (CV_NAME | CV_MINI | CA_DETAILSVIEWTITLES | CV_FLOW);
1715 if (flWindowAttr & CV_ICON)
1716 WinCheckButton(hwnd, CFG5_ICON, TRUE);
1717 if (flWindowAttr & CV_NAME)
1718 WinCheckButton(hwnd, CFG5_NAME, TRUE);
1719 if (flWindowAttr & CV_TEXT)
1720 WinCheckButton(hwnd, CFG5_TEXT, TRUE);
1721 if (flWindowAttr & CV_DETAIL)
1722 WinCheckButton(hwnd, CFG5_DETAIL, TRUE);
1723 if (flWindowAttr & CV_MINI)
1724 WinCheckButton(hwnd, CFG5_MINIICONS, TRUE);
1725 if (flWindowAttr & CA_DETAILSVIEWTITLES)
1726 WinCheckButton(hwnd, CFG5_SHOWTITLES, TRUE);
1727 WinCheckButton(hwnd, CFG5_SHOWLNAMES, detailslongname);
1728 WinCheckButton(hwnd, CFG5_SHOWSUBJECT, detailssubject);
1729 WinCheckButton(hwnd, CFG5_SHOWEAS, detailsea);
1730 WinCheckButton(hwnd, CFG5_SHOWSIZE, detailssize);
1731 WinCheckButton(hwnd, CFG5_SHOWICON, detailsicon);
1732 WinCheckButton(hwnd, CFG5_SHOWLWDATE, detailslwdate);
1733 WinCheckButton(hwnd, CFG5_SHOWLWTIME, detailslwtime);
1734 WinCheckButton(hwnd, CFG5_SHOWLADATE, detailsladate);
1735 WinCheckButton(hwnd, CFG5_SHOWLATIME, detailslatime);
1736 WinCheckButton(hwnd, CFG5_SHOWCRDATE, detailscrdate);
1737 WinCheckButton(hwnd, CFG5_SHOWCRTIME, detailscrtime);
1738 WinCheckButton(hwnd, CFG5_SHOWATTR, detailsattr);
1739 memset(&mask, 0, sizeof(mask));
1740 mask.attrFile = FILE_DIRECTORY | FILE_ARCHIVED | FILE_HIDDEN |
1741 FILE_SYSTEM | FILE_NORMAL | FILE_READONLY;
1742 ulSize = sizeof(MASK);
1743 if (PrfQueryProfileData(fmprof, appname, "DirFilter", &mask, &ulSize))
1744 SetMask(NULL, &mask);
1745 if (!mask.attrFile)
1746 mask.attrFile = FILE_DIRECTORY | FILE_ARCHIVED | FILE_HIDDEN |
1747 FILE_SYSTEM | FILE_NORMAL | FILE_READONLY;
1748 strcpy(mask.prompt, GetPString(IDS_DEFDIRFILTERTITLETEXT));
1749 WinSetDlgItemText(hwnd, CFG5_FILTER, mask.szMask);
1750 WinCheckButton(hwnd, CFG5_SUBJECTINLEFTPANE, fSubjectInLeftPane);
1751 WinCheckButton(hwnd, CFG5_SUBJECTLENGTHMAX, fSubjectLengthMax);
1752 WinSendDlgItemMsg(hwnd, CFG5_SUBJECTDISPLAYWIDTH, SPBM_SETCURRENTVALUE,
1753 MPFROMLONG(SubjectDisplayWidth), MPVOID);
1754 }
1755 return 0;
1756
1757 case UM_SETUP5:
1758 if (WinDlgBox(HWND_DESKTOP, hwndNotebook, PickMaskDlgProc,
1759 FM3ModHandle, MSK_FRAME, MPFROMP(&mask))) {
1760 SetMask(NULL, &mask);
1761 WinSetDlgItemText(hwnd, CFG5_FILTER, mask.szMask);
1762 }
1763 return 0;
1764
1765 case WM_CONTROL:
1766 switch (SHORT1FROMMP(mp1)) {
1767 case CFG5_FILTER:
1768 switch (SHORT2FROMMP(mp1)) {
1769 case EN_SETFOCUS:
1770 PostMsg(hwnd, UM_FOCUSME, MPVOID, MPVOID);
1771 PostMsg(hwnd, UM_SETUP5, MPVOID, MPVOID);
1772 break;
1773 }
1774 break;
1775 }
1776 return 0;
1777
1778 case WM_COMMAND:
1779 switch (SHORT1FROMMP(mp1)) {
1780 case IDM_UNDO:
1781 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1782 break;
1783
1784 case DID_CANCEL:
1785 WinSendMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1786
1787 case DID_OK:
1788 PostMsg((HWND) WinQueryWindowULong(hwnd, QWL_USER), msg, mp1, mp2);
1789 break;
1790
1791 case IDM_HELP:
1792 if (hwndHelp)
1793 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
1794 MPFROM2SHORT(HELP_CFG5, 0), MPFROMSHORT(HM_RESOURCEID));
1795 break;
1796 }
1797 return 0;
1798
1799 case WM_CLOSE:
1800 {
1801 ULONG flWindowAttr = 0;
1802
1803 if (WinQueryButtonCheckstate(hwnd, CFG5_ICON))
1804 flWindowAttr |= CV_ICON;
1805 if (WinQueryButtonCheckstate(hwnd, CFG5_NAME))
1806 flWindowAttr |= CV_NAME;
1807 if (WinQueryButtonCheckstate(hwnd, CFG5_TEXT))
1808 flWindowAttr |= CV_TEXT;
1809 if (WinQueryButtonCheckstate(hwnd, CFG5_DETAIL))
1810 flWindowAttr |= CV_DETAIL;
1811 if (WinQueryButtonCheckstate(hwnd, CFG5_MINIICONS))
1812 flWindowAttr |= CV_MINI;
1813 if (WinQueryButtonCheckstate(hwnd, CFG5_SHOWTITLES))
1814 flWindowAttr |= CA_DETAILSVIEWTITLES;
1815 flWindowAttr |= CV_FLOW;
1816 PrfWriteProfileData(fmprof,
1817 appname,
1818 "DirflWindowAttr", &flWindowAttr, sizeof(ULONG));
1819 }
1820 detailslongname = WinQueryButtonCheckstate(hwnd, CFG5_SHOWLNAMES);
1821 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsLongname",
1822 &detailslongname, sizeof(BOOL));
1823 detailssubject = WinQueryButtonCheckstate(hwnd, CFG5_SHOWSUBJECT);
1824 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsSubject",
1825 &detailssubject, sizeof(BOOL));
1826 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsEA",
1827 &detailsea, sizeof(BOOL));
1828 detailssize = WinQueryButtonCheckstate(hwnd, CFG5_SHOWSIZE);
1829 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsSize",
1830 &detailssize, sizeof(BOOL));
1831 detailsicon = WinQueryButtonCheckstate(hwnd, CFG5_SHOWICON);
1832 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsIcon",
1833 &detailsicon, sizeof(BOOL));
1834 detailslwdate = WinQueryButtonCheckstate(hwnd, CFG5_SHOWLWDATE);
1835 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsLWDate",
1836 &detailslwdate, sizeof(BOOL));
1837 detailslwtime = WinQueryButtonCheckstate(hwnd, CFG5_SHOWLWTIME);
1838 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsLWTime",
1839 &detailslwtime, sizeof(BOOL));
1840 detailsladate = WinQueryButtonCheckstate(hwnd, CFG5_SHOWLADATE);
1841 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsLADate",
1842 &detailsladate, sizeof(BOOL));
1843 detailslatime = WinQueryButtonCheckstate(hwnd, CFG5_SHOWLATIME);
1844 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsLATime",
1845 &detailslatime, sizeof(BOOL));
1846 detailscrdate = WinQueryButtonCheckstate(hwnd, CFG5_SHOWCRDATE);
1847 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsCRDate",
1848 &detailscrdate, sizeof(BOOL));
1849 detailscrtime = WinQueryButtonCheckstate(hwnd, CFG5_SHOWCRTIME);
1850 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsCRTime",
1851 &detailscrtime, sizeof(BOOL));
1852 detailsattr = WinQueryButtonCheckstate(hwnd, CFG5_SHOWATTR);
1853 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsAttr",
1854 &detailsattr, sizeof(BOOL));
1855 fSubjectInLeftPane = WinQueryButtonCheckstate(hwnd, CFG5_SUBJECTINLEFTPANE);
1856 PrfWriteProfileData(fmprof, appname, "DirCnr.SubjectInLeftPane",
1857 &fSubjectInLeftPane, sizeof(BOOL));
1858 fSubjectLengthMax = WinQueryButtonCheckstate(hwnd, CFG5_SUBJECTLENGTHMAX);
1859 PrfWriteProfileData(fmprof, appname, "DirCnr.SubjectLengthMax",
1860 &fSubjectLengthMax, sizeof(BOOL));
1861 *mask.prompt = 0;
1862 PrfWriteProfileData(fmprof, appname, "DirFilter", &mask, sizeof(MASK));
1863 {
1864 if (!WinQueryButtonCheckstate(hwnd, CFG5_SUBJECTLENGTHMAX)) {
1865 WinSendDlgItemMsg(hwnd, CFG5_SUBJECTDISPLAYWIDTH, SPBM_QUERYVALUE,
1866 MPFROMP(&SubjectDisplayWidth), MPFROM2SHORT(0, SPBQ_DONOTUPDATE));
1867 if (SubjectDisplayWidth < 50)
1868 SubjectDisplayWidth = 0;
1869 else if (SubjectDisplayWidth > 1000)
1870 SubjectDisplayWidth = 1000;
1871 }
1872 else
1873 SubjectDisplayWidth = 0;
1874 PrfWriteProfileData(fmprof,
1875 appname, "DirCnr.SubjectDisplayWidth",
1876 &SubjectDisplayWidth, sizeof(ULONG));
1877 }
1878 break;
1879 }
1880 return WinDefDlgProc(hwnd, msg, mp1, mp2);
1881}
1882
1883MRESULT EXPENTRY Cfg6DlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1884{
1885 switch (msg) {
1886 case WM_INITDLG:
1887 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1888 break;
1889
1890 case UM_UNDO:
1891 WinCheckButton(hwnd, CFG6_SORTFIRST, FALSE);
1892 WinCheckButton(hwnd, CFG6_SORTLAST, FALSE);
1893 WinCheckButton(hwnd, CFG6_SORTSIZE, FALSE);
1894 WinCheckButton(hwnd, CFG6_SORTEASIZE, FALSE);
1895 WinCheckButton(hwnd, CFG6_SORTLWDATE, FALSE);
1896 WinCheckButton(hwnd, CFG6_SORTLADATE, FALSE);
1897 WinCheckButton(hwnd, CFG6_SORTCRDATE, FALSE);
1898 WinCheckButton(hwnd, CFG6_SORTNAME, FALSE);
1899 WinCheckButton(hwnd, CFG6_SORTDIRSFIRST, FALSE);
1900 WinCheckButton(hwnd, CFG6_SORTDIRSLAST, FALSE);
1901 WinCheckButton(hwnd, CFG6_SORTREVERSE, FALSE);
1902 if (sortFlags & SORT_FIRSTEXTENSION)
1903 WinCheckButton(hwnd, CFG6_SORTFIRST, TRUE);
1904 else if (sortFlags & SORT_LASTEXTENSION)
1905 WinCheckButton(hwnd, CFG6_SORTLAST, TRUE);
1906 else if (sortFlags & SORT_SIZE)
1907 WinCheckButton(hwnd, CFG6_SORTSIZE, TRUE);
1908 else if (sortFlags & SORT_EASIZE)
1909 WinCheckButton(hwnd, CFG6_SORTEASIZE, TRUE);
1910 else if (sortFlags & SORT_LWDATE)
1911 WinCheckButton(hwnd, CFG6_SORTLWDATE, TRUE);
1912 else if (sortFlags & SORT_LADATE)
1913 WinCheckButton(hwnd, CFG6_SORTLADATE, TRUE);
1914 else if (sortFlags & SORT_CRDATE)
1915 WinCheckButton(hwnd, CFG6_SORTCRDATE, TRUE);
1916 else if (sortFlags & SORT_FILENAME)
1917 WinCheckButton(hwnd, CFG6_SORTFILENAME, TRUE);
1918 else
1919 WinCheckButton(hwnd, CFG6_SORTNAME, TRUE);
1920 if (sortFlags & SORT_DIRSFIRST)
1921 WinCheckButton(hwnd, CFG6_SORTDIRSFIRST, TRUE);
1922 else if (sortFlags & SORT_DIRSLAST)
1923 WinCheckButton(hwnd, CFG6_SORTDIRSLAST, TRUE);
1924 if (sortFlags & SORT_REVERSE)
1925 WinCheckButton(hwnd, CFG6_SORTREVERSE, TRUE);
1926 return 0;
1927
1928 case WM_CONTROL:
1929 switch (SHORT1FROMMP(mp1)) {
1930 case CFG6_SORTDIRSFIRST:
1931 case CFG6_SORTDIRSLAST:
1932 {
1933 BOOL temp;
1934
1935 temp = WinQueryButtonCheckstate(hwnd, SHORT1FROMMP(mp1));
1936 if (temp) {
1937 switch (SHORT1FROMMP(mp1)) {
1938 case CFG6_SORTDIRSFIRST:
1939 WinCheckButton(hwnd, CFG6_SORTDIRSLAST, FALSE);
1940 break;
1941 case CFG6_SORTDIRSLAST:
1942 WinCheckButton(hwnd, CFG6_SORTDIRSFIRST, FALSE);
1943 break;
1944 }
1945 }
1946 }
1947 break;
1948 }
1949 return 0;
1950
1951 case WM_COMMAND:
1952 switch (SHORT1FROMMP(mp1)) {
1953 case IDM_UNDO:
1954 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1955 break;
1956
1957 case DID_CANCEL:
1958 WinSendMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1959
1960 case DID_OK:
1961 PostMsg((HWND) WinQueryWindowULong(hwnd, QWL_USER), msg, mp1, mp2);
1962 break;
1963
1964 case IDM_HELP:
1965 if (hwndHelp)
1966 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
1967 MPFROM2SHORT(HELP_CFG6, 0), MPFROMSHORT(HM_RESOURCEID));
1968 break;
1969 }
1970 return 0;
1971
1972 case WM_CLOSE:
1973 sortFlags = 0;
1974 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTFILENAME))
1975 sortFlags |= SORT_FILENAME;
1976 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTSIZE))
1977 sortFlags |= SORT_SIZE;
1978 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTEASIZE))
1979 sortFlags |= SORT_EASIZE;
1980 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTFIRST))
1981 sortFlags |= SORT_FIRSTEXTENSION;
1982 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTLAST))
1983 sortFlags |= SORT_LASTEXTENSION;
1984 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTLWDATE))
1985 sortFlags |= SORT_LWDATE;
1986 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTLADATE))
1987 sortFlags |= SORT_LADATE;
1988 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTCRDATE))
1989 sortFlags |= SORT_CRDATE;
1990 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTDIRSFIRST))
1991 sortFlags |= SORT_DIRSFIRST;
1992 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTDIRSLAST))
1993 sortFlags |= SORT_DIRSLAST;
1994 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTREVERSE))
1995 sortFlags |= SORT_REVERSE;
1996 PrfWriteProfileData(fmprof, appname, "Sort", &sortFlags, sizeof(INT));
1997 break;
1998 }
1999 return WinDefDlgProc(hwnd, msg, mp1, mp2);
2000}
2001
2002MRESULT EXPENTRY Cfg7DlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
2003{
2004 static MASK mask;
2005
2006 switch (msg) {
2007 case WM_INITDLG:
2008 WinSendDlgItemMsg(hwnd, CFG5_SUBJECTDISPLAYWIDTH, SPBM_SETTEXTLIMIT,
2009 MPFROMSHORT(8), MPVOID);
2010 WinSendDlgItemMsg(hwnd, CFG5_SUBJECTDISPLAYWIDTH, SPBM_OVERRIDESETLIMITS,
2011 MPFROMLONG(1000), MPFROMLONG(50));
2012 WinSendDlgItemMsg(hwnd, CFG5_FILTER, EM_SETTEXTLIMIT,
2013 MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
2014 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
2015 break;
2016
2017 case UM_FOCUSME:
2018 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, CFG5_MINIICONS));
2019 return 0;
2020
2021 case UM_UNDO:
2022 WinCheckButton(hwnd, CFG5_EXTERNALCOLLECTOR, fExternalCollector);
2023 {
2024 ULONG flWindowAttr = 0;
2025 ULONG ulSize = sizeof(ULONG);
2026
2027 if (!PrfQueryProfileData(fmprof,
2028 appname,
2029 "CollectorflWindowAttr", &flWindowAttr, &ulSize))
2030 flWindowAttr = (CV_NAME | CA_DETAILSVIEWTITLES | CV_MINI | CV_FLOW);
2031 if (flWindowAttr & CV_ICON)
2032 WinCheckButton(hwnd, CFG5_ICON, TRUE);
2033 if (flWindowAttr & CV_NAME)
2034 WinCheckButton(hwnd, CFG5_NAME, TRUE);
2035 if (flWindowAttr & CV_TEXT)
2036 WinCheckButton(hwnd, CFG5_TEXT, TRUE);
2037 if (flWindowAttr & CV_DETAIL)
2038 WinCheckButton(hwnd, CFG5_DETAIL, TRUE);
2039 if (flWindowAttr & CV_MINI)
2040 WinCheckButton(hwnd, CFG5_MINIICONS, TRUE);
2041 if (flWindowAttr & CA_DETAILSVIEWTITLES)
2042 WinCheckButton(hwnd, CFG5_SHOWTITLES, TRUE);
2043 memset(&mask, 0, sizeof(mask));
2044 mask.attrFile = FILE_DIRECTORY | FILE_ARCHIVED | FILE_HIDDEN |
2045 FILE_SYSTEM | FILE_NORMAL | FILE_READONLY;
2046 ulSize = sizeof(MASK);
2047 if (PrfQueryProfileData(fmprof,
2048 appname, "CollectorFilter", &mask, &ulSize)) {
2049 SetMask(NULL, &mask);
2050 }
2051 if (!mask.attrFile)
2052 mask.attrFile = FILE_DIRECTORY | FILE_ARCHIVED | FILE_HIDDEN |
2053 FILE_SYSTEM | FILE_NORMAL | FILE_READONLY;
2054 strcpy(mask.prompt, GetPString(IDS_DEFCOLFILTERTITLETEXT));
2055 WinSetDlgItemText(hwnd, CFG5_FILTER, mask.szMask);
2056 }
2057 {
2058 DIRCNRDATA dcd;
2059
2060 memset(&dcd, 0, sizeof(dcd));
2061 LoadDetailsSwitches("Collector", &dcd);
2062 WinCheckButton(hwnd, CFG5_SHOWLNAMES, dcd.detailslongname);
2063 WinCheckButton(hwnd, CFG5_SHOWSUBJECT, dcd.detailssubject);
2064 WinCheckButton(hwnd, CFG5_SHOWEAS, dcd.detailsea);
2065 WinCheckButton(hwnd, CFG5_SHOWSIZE, dcd.detailssize);
2066 WinCheckButton(hwnd, CFG5_SHOWICON, dcd.detailsicon);
2067 WinCheckButton(hwnd, CFG5_SHOWLWDATE, dcd.detailslwdate);
2068 WinCheckButton(hwnd, CFG5_SHOWLWTIME, dcd.detailslwtime);
2069 WinCheckButton(hwnd, CFG5_SHOWLADATE, dcd.detailsladate);
2070 WinCheckButton(hwnd, CFG5_SHOWLATIME, dcd.detailslatime);
2071 WinCheckButton(hwnd, CFG5_SHOWCRDATE, dcd.detailscrdate);
2072 WinCheckButton(hwnd, CFG5_SHOWCRTIME, dcd.detailscrtime);
2073 WinCheckButton(hwnd, CFG5_SHOWATTR, dcd.detailsattr);
2074 WinCheckButton(hwnd, CFG5_SUBJECTINLEFTPANE, dcd.fSubjectInLeftPane);
2075 WinCheckButton(hwnd, CFG5_SUBJECTLENGTHMAX, dcd.fSubjectLengthMax);
2076 WinSendDlgItemMsg(hwnd, CFG5_SUBJECTDISPLAYWIDTH, SPBM_SETCURRENTVALUE,
2077 MPFROMLONG(dcd.SubjectDisplayWidth), MPVOID);
2078
2079 }
2080 return 0;
2081
2082 case UM_SETUP5:
2083 if (WinDlgBox(HWND_DESKTOP, hwndNotebook, PickMaskDlgProc,
2084 FM3ModHandle, MSK_FRAME, MPFROMP(&mask))) {
2085 SetMask(NULL, &mask);
2086 WinSetDlgItemText(hwnd, CFG5_FILTER, mask.szMask);
2087 }
2088 return 0;
2089
2090 case WM_CONTROL:
2091 switch (SHORT1FROMMP(mp1)) {
2092 case CFG5_FILTER:
2093 switch (SHORT2FROMMP(mp1)) {
2094 case EN_SETFOCUS:
2095 PostMsg(hwnd, UM_FOCUSME, MPVOID, MPVOID);
2096 PostMsg(hwnd, UM_SETUP5, MPVOID, MPVOID);
2097 break;
2098 }
2099 break;
2100 }
2101 return 0;
2102
2103 case WM_COMMAND:
2104 switch (SHORT1FROMMP(mp1)) {
2105 case IDM_UNDO:
2106 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
2107 break;
2108
2109 case DID_CANCEL:
2110 WinSendMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
2111
2112 case DID_OK:
2113 PostMsg((HWND) WinQueryWindowULong(hwnd, QWL_USER), msg, mp1, mp2);
2114 break;
2115
2116 case IDM_HELP:
2117 if (hwndHelp)
2118 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
2119 MPFROM2SHORT(HELP_CFG7, 0), MPFROMSHORT(HM_RESOURCEID));
2120 break;
2121 }
2122 return 0;
2123
2124 case WM_CLOSE:
2125 fExternalCollector = WinQueryButtonCheckstate(hwnd,
2126 CFG5_EXTERNALCOLLECTOR);
2127 PrfWriteProfileData(fmprof, FM3Str, "ExternalCollector",
2128 &fExternalCollector, sizeof(BOOL));
2129 {
2130 ULONG flWindowAttr = 0;
2131
2132 if (WinQueryButtonCheckstate(hwnd, CFG5_ICON))
2133 flWindowAttr |= CV_ICON;
2134 if (WinQueryButtonCheckstate(hwnd, CFG5_NAME))
2135 flWindowAttr |= CV_NAME;
2136 if (WinQueryButtonCheckstate(hwnd, CFG5_TEXT))
2137 flWindowAttr |= CV_TEXT;
2138 if (WinQueryButtonCheckstate(hwnd, CFG5_DETAIL))
2139 flWindowAttr |= CV_DETAIL;
2140 if (WinQueryButtonCheckstate(hwnd, CFG5_MINIICONS))
2141 flWindowAttr |= CV_MINI;
2142 if (WinQueryButtonCheckstate(hwnd, CFG5_SHOWTITLES))
2143 flWindowAttr |= CA_DETAILSVIEWTITLES;
2144 flWindowAttr |= CV_FLOW;
2145 PrfWriteProfileData(fmprof, appname, "CollectorflWindowAttr",
2146 &flWindowAttr, sizeof(ULONG));
2147 }
2148 {
2149 DIRCNRDATA dcd;
2150
2151 memset(&dcd, 0, sizeof(dcd));
2152 dcd.detailslongname = WinQueryButtonCheckstate(hwnd, CFG5_SHOWLNAMES);
2153 PrfWriteProfileData(fmprof, appname, "Collector.DetailsLongname",
2154 &dcd.detailslongname, sizeof(BOOL));
2155 dcd.detailssubject = WinQueryButtonCheckstate(hwnd, CFG5_SHOWSUBJECT);
2156 PrfWriteProfileData(fmprof, appname, "Collector.DetailsSubject",
2157 &dcd.detailssubject, sizeof(BOOL));
2158 dcd.detailsea = WinQueryButtonCheckstate(hwnd, CFG5_SHOWEAS);
2159 PrfWriteProfileData(fmprof, appname, "Collector.DetailsEA",
2160 &dcd.detailsea, sizeof(BOOL));
2161 dcd.detailssize = WinQueryButtonCheckstate(hwnd, CFG5_SHOWSIZE);
2162 PrfWriteProfileData(fmprof, appname, "Collector.DetailsSize",
2163 &dcd.detailssize, sizeof(BOOL));
2164 dcd.detailsicon = WinQueryButtonCheckstate(hwnd, CFG5_SHOWICON);
2165 PrfWriteProfileData(fmprof, appname, "Collector.DetailsIcon",
2166 &dcd.detailsicon, sizeof(BOOL));
2167 dcd.detailslwdate = WinQueryButtonCheckstate(hwnd, CFG5_SHOWLWDATE);
2168 PrfWriteProfileData(fmprof, appname, "Collector.DetailsLWDate",
2169 &dcd.detailslwdate, sizeof(BOOL));
2170 dcd.detailslwtime = WinQueryButtonCheckstate(hwnd, CFG5_SHOWLWTIME);
2171 PrfWriteProfileData(fmprof, appname, "Collector.DetailsLWTime",
2172 &dcd.detailslwtime, sizeof(BOOL));
2173 dcd.detailsladate = WinQueryButtonCheckstate(hwnd, CFG5_SHOWLADATE);
2174 PrfWriteProfileData(fmprof, appname, "Collector.DetailsLADate",
2175 &dcd.detailsladate, sizeof(BOOL));
2176 dcd.detailslatime = WinQueryButtonCheckstate(hwnd, CFG5_SHOWLATIME);
2177 PrfWriteProfileData(fmprof, appname, "Collector.DetailsLATime",
2178 &dcd.detailslatime, sizeof(BOOL));
2179 dcd.detailscrdate = WinQueryButtonCheckstate(hwnd, CFG5_SHOWCRDATE);
2180 PrfWriteProfileData(fmprof, appname, "Collector.DetailsCRDate",
2181 &dcd.detailscrdate, sizeof(BOOL));
2182 dcd.detailscrtime = WinQueryButtonCheckstate(hwnd, CFG5_SHOWCRTIME);
2183 PrfWriteProfileData(fmprof, appname, "Collector.DetailsCRTime",
2184 &dcd.detailscrtime, sizeof(BOOL));
2185 dcd.detailsattr = WinQueryButtonCheckstate(hwnd, CFG5_SHOWATTR);
2186 PrfWriteProfileData(fmprof, appname, "Collector.DetailsAttr",
2187 &dcd.detailsattr, sizeof(BOOL));
2188 dcd.fSubjectInLeftPane = WinQueryButtonCheckstate(hwnd, CFG5_SUBJECTINLEFTPANE);
2189 PrfWriteProfileData(fmprof, appname, "Collector.SubjectInLeftPane",
2190 &dcd.fSubjectInLeftPane, sizeof(BOOL));
2191 dcd.fSubjectLengthMax = WinQueryButtonCheckstate(hwnd, CFG5_SUBJECTLENGTHMAX);
2192 PrfWriteProfileData(fmprof, appname, "Collector.SubjectLengthMax",
2193 &dcd.fSubjectLengthMax, sizeof(BOOL));
2194 *mask.prompt = 0;
2195 PrfWriteProfileData(fmprof,
2196 appname, "CollectorFilter", &mask, sizeof(MASK));
2197 {
2198 if (!WinQueryButtonCheckstate(hwnd, CFG5_SUBJECTLENGTHMAX)) {
2199 WinSendDlgItemMsg(hwnd, CFG5_SUBJECTDISPLAYWIDTH, SPBM_QUERYVALUE,
2200 MPFROMP(&dcd.SubjectDisplayWidth), MPFROM2SHORT(0, SPBQ_DONOTUPDATE));
2201 if (dcd.SubjectDisplayWidth < 50)
2202 dcd.SubjectDisplayWidth = 0;
2203 else if (dcd.SubjectDisplayWidth > 1000)
2204 dcd.SubjectDisplayWidth = 1000;
2205 }
2206 else
2207 dcd.SubjectDisplayWidth = 0;
2208 PrfWriteProfileData(fmprof,
2209 appname, "Collector.SubjectDisplayWidth",
2210 &dcd.SubjectDisplayWidth, sizeof(ULONG));
2211 }
2212 }
2213 break;
2214 }
2215 return WinDefDlgProc(hwnd, msg, mp1, mp2);
2216}
2217
2218MRESULT EXPENTRY Cfg8DlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
2219{
2220 switch (msg) {
2221 case WM_INITDLG:
2222 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
2223 break;
2224
2225 case UM_UNDO:
2226 WinCheckButton(hwnd, CFG6_SORTFIRST, FALSE);
2227 WinCheckButton(hwnd, CFG6_SORTLAST, FALSE);
2228 WinCheckButton(hwnd, CFG6_SORTSIZE, FALSE);
2229 WinCheckButton(hwnd, CFG6_SORTEASIZE, FALSE);
2230 WinCheckButton(hwnd, CFG6_SORTLWDATE, FALSE);
2231 WinCheckButton(hwnd, CFG6_SORTLADATE, FALSE);
2232 WinCheckButton(hwnd, CFG6_SORTCRDATE, FALSE);
2233 WinCheckButton(hwnd, CFG6_SORTNAME, FALSE);
2234 WinCheckButton(hwnd, CFG6_SORTDIRSFIRST, FALSE);
2235 WinCheckButton(hwnd, CFG6_SORTDIRSLAST, FALSE);
2236 WinCheckButton(hwnd, CFG6_SORTREVERSE, FALSE);
2237 if (CollectorsortFlags & SORT_FIRSTEXTENSION)
2238 WinCheckButton(hwnd, CFG6_SORTFIRST, TRUE);
2239 else if (CollectorsortFlags & SORT_LASTEXTENSION)
2240 WinCheckButton(hwnd, CFG6_SORTLAST, TRUE);
2241 else if (CollectorsortFlags & SORT_SIZE)
2242 WinCheckButton(hwnd, CFG6_SORTSIZE, TRUE);
2243 else if (CollectorsortFlags & SORT_EASIZE)
2244 WinCheckButton(hwnd, CFG6_SORTEASIZE, TRUE);
2245 else if (CollectorsortFlags & SORT_LWDATE)
2246 WinCheckButton(hwnd, CFG6_SORTLWDATE, TRUE);
2247 else if (CollectorsortFlags & SORT_LADATE)
2248 WinCheckButton(hwnd, CFG6_SORTLADATE, TRUE);
2249 else if (CollectorsortFlags & SORT_CRDATE)
2250 WinCheckButton(hwnd, CFG6_SORTCRDATE, TRUE);
2251 else if (CollectorsortFlags & SORT_FILENAME)
2252 WinCheckButton(hwnd, CFG6_SORTFILENAME, TRUE);
2253 else
2254 WinCheckButton(hwnd, CFG6_SORTNAME, TRUE);
2255 if (CollectorsortFlags & SORT_DIRSFIRST)
2256 WinCheckButton(hwnd, CFG6_SORTDIRSFIRST, TRUE);
2257 else if (CollectorsortFlags & SORT_DIRSLAST)
2258 WinCheckButton(hwnd, CFG6_SORTDIRSLAST, TRUE);
2259 if (CollectorsortFlags & SORT_REVERSE)
2260 WinCheckButton(hwnd, CFG6_SORTREVERSE, TRUE);
2261 return 0;
2262
2263 case WM_CONTROL:
2264 switch (SHORT1FROMMP(mp1)) {
2265 case CFG6_SORTDIRSFIRST:
2266 case CFG6_SORTDIRSLAST:
2267 {
2268 BOOL temp;
2269
2270 temp = WinQueryButtonCheckstate(hwnd, SHORT1FROMMP(mp1));
2271 if (temp) {
2272 switch (SHORT1FROMMP(mp1)) {
2273 case CFG6_SORTDIRSFIRST:
2274 WinCheckButton(hwnd, CFG6_SORTDIRSLAST, FALSE);
2275 break;
2276 case CFG6_SORTDIRSLAST:
2277 WinCheckButton(hwnd, CFG6_SORTDIRSFIRST, FALSE);
2278 break;
2279 }
2280 }
2281 }
2282 break;
2283 }
2284 return 0;
2285
2286 case WM_COMMAND:
2287 switch (SHORT1FROMMP(mp1)) {
2288 case IDM_UNDO:
2289 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
2290 break;
2291
2292 case DID_CANCEL:
2293 WinSendMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
2294
2295 case DID_OK:
2296 PostMsg((HWND) WinQueryWindowULong(hwnd, QWL_USER), msg, mp1, mp2);
2297 break;
2298
2299 case IDM_HELP:
2300 if (hwndHelp)
2301 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
2302 MPFROM2SHORT(HELP_CFG8, 0), MPFROMSHORT(HM_RESOURCEID));
2303 break;
2304 }
2305 return 0;
2306
2307 case WM_CLOSE:
2308 CollectorsortFlags = 0;
2309 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTFILENAME))
2310 CollectorsortFlags |= SORT_FILENAME;
2311 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTSIZE))
2312 CollectorsortFlags |= SORT_SIZE;
2313 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTEASIZE))
2314 CollectorsortFlags |= SORT_EASIZE;
2315 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTFIRST))
2316 CollectorsortFlags |= SORT_FIRSTEXTENSION;
2317 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTLAST))
2318 CollectorsortFlags |= SORT_LASTEXTENSION;
2319 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTLWDATE))
2320 CollectorsortFlags |= SORT_LWDATE;
2321 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTLADATE))
2322 CollectorsortFlags |= SORT_LADATE;
2323 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTCRDATE))
2324 CollectorsortFlags |= SORT_CRDATE;
2325 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTDIRSFIRST))
2326 CollectorsortFlags |= SORT_DIRSFIRST;
2327 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTDIRSLAST))
2328 CollectorsortFlags |= SORT_DIRSLAST;
2329 if (WinQueryButtonCheckstate(hwnd, CFG6_SORTREVERSE))
2330 CollectorsortFlags |= SORT_REVERSE;
2331 PrfWriteProfileData(fmprof,
2332 appname,
2333 "CollectorSort", &CollectorsortFlags, sizeof(INT));
2334 break;
2335 }
2336 return WinDefDlgProc(hwnd, msg, mp1, mp2);
2337}
2338
2339MRESULT EXPENTRY Cfg9DlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
2340{
2341 switch (msg) {
2342 case WM_INITDLG:
2343 break;
2344
2345 case WM_COMMAND:
2346 switch (SHORT1FROMMP(mp1)) {
2347 case IDM_HELP:
2348 if (hwndHelp)
2349 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
2350 MPFROM2SHORT(HELP_CFG9, 0), MPFROMSHORT(HM_RESOURCEID));
2351 return 0;
2352 case CFG9_MAXIMUMUI:
2353 if (hwndMain) {
2354 if (MenuInvisible)
2355 WinSendMsg(hwndMain, WM_COMMAND,
2356 MPFROM2SHORT(IDM_HIDEMENU, 0), MPVOID);
2357 if (!fAutoView)
2358 WinSendMsg(hwndMain, WM_COMMAND,
2359 MPFROM2SHORT(IDM_AUTOVIEW, 0), MPVOID);
2360 if (!fDrivebar)
2361 WinSendMsg(hwndMain, WM_COMMAND,
2362 MPFROM2SHORT(IDM_DRIVEBAR, 0), MPVOID);
2363 if (!fToolbar)
2364 WinSendMsg(hwndMain, WM_COMMAND,
2365 MPFROM2SHORT(IDM_TOOLBAR, 0), MPVOID);
2366 if (!fMoreButtons)
2367 WinSendMsg(hwndMain, WM_COMMAND,
2368 MPFROM2SHORT(IDM_MOREBUTTONS, 0), MPVOID);
2369 if (!fUserComboBox)
2370 WinSendMsg(hwndMain, WM_COMMAND,
2371 MPFROM2SHORT(IDM_USERLIST, 0), MPVOID);
2372 }
2373 return 0;
2374 case CFG9_MINIMUMUI:
2375 if (hwndMain) {
2376 if (!MenuInvisible)
2377 WinSendMsg(hwndMain, WM_COMMAND,
2378 MPFROM2SHORT(IDM_HIDEMENU, 0), MPVOID);
2379 if (fAutoView)
2380 WinSendMsg(hwndMain, WM_COMMAND,
2381 MPFROM2SHORT(IDM_AUTOVIEW, 0), MPVOID);
2382 if (fToolbar)
2383 WinSendMsg(hwndMain, WM_COMMAND,
2384 MPFROM2SHORT(IDM_TOOLBAR, 0), MPVOID);
2385 if (fMoreButtons)
2386 WinSendMsg(hwndMain, WM_COMMAND, MPFROM2SHORT(IDM_MOREBUTTONS, 0),
2387 MPVOID);
2388 if (fUserComboBox)
2389 WinSendMsg(hwndMain, WM_COMMAND,
2390 MPFROM2SHORT(IDM_USERLIST, 0), MPVOID);
2391 saymsg(MB_ENTER | MB_ICONASTERISK,
2392 hwnd,
2393 GetPString(IDS_DONTFORGETTEXT),
2394 GetPString(IDS_UNHIDEMENUWARNTEXT));
2395 }
2396 return 0;
2397 case CFG9_MAXINFOPRETTY:
2398 fLoadSubject = TRUE;
2399 fLoadLongnames = TRUE;
2400 fNoIconsFiles = FALSE;
2401 fNoIconsDirs = FALSE;
2402 fForceUpper = FALSE;
2403 fForceLower = FALSE;
2404 fArcStuffVisible = TRUE;
2405 fSplitStatus = TRUE;
2406 fDragndropDlg = TRUE;
2407 {
2408 ULONG flWindowAttr;
2409
2410 flWindowAttr = CV_DETAIL | CV_FLOW | CA_DETAILSVIEWTITLES;
2411 PrfWriteProfileData(fmprof,
2412 appname,
2413 "DirflWindowAttr", &flWindowAttr, sizeof(ULONG));
2414 PrfWriteProfileData(fmprof,
2415 appname,
2416 "CollectorflWindowAttr",
2417 &flWindowAttr, sizeof(ULONG));
2418 PrfWriteProfileData(fmprof,
2419 appname, "Collector.Fontnamesize", NULL, 0);
2420 }
2421 detailslongname = TRUE;
2422 detailssubject = TRUE;
2423 detailsea = TRUE;
2424 detailssize = TRUE;
2425 detailsicon = TRUE;
2426 detailslwdate = TRUE;
2427 detailslwtime = TRUE;
2428 detailsladate = TRUE;
2429 detailslatime = TRUE;
2430 detailscrdate = TRUE;
2431 detailscrtime = TRUE;
2432 detailsattr = TRUE;
2433 if (hwndTree) {
2434
2435 CNRINFO cnri;
2436 ULONG flWindowAttr = CV_TREE | CV_ICON | CV_FLOW | CA_TREELINE;
2437
2438 memset(&cnri, 0, sizeof(cnri));
2439 cnri.cb = sizeof(cnri);
2440 WinSendMsg(WinWindowFromID
2441 (WinWindowFromID(hwndTree, FID_CLIENT), TREE_CNR),
2442 CM_QUERYCNRINFO, MPFROMP(&cnri), MPFROMLONG(sizeof(cnri)));
2443 cnri.flWindowAttr = flWindowAttr;
2444 WinSendMsg(WinWindowFromID
2445 (WinWindowFromID(hwndTree, FID_CLIENT), TREE_CNR),
2446 CM_SETCNRINFO, MPFROMP(&cnri),
2447 MPFROMLONG(CMA_FLWINDOWATTR));
2448 }
2449 break;
2450
2451 case CFG9_MAXINFOPLAIN:
2452 fLoadSubject = TRUE;
2453 fLoadLongnames = TRUE;
2454 fNoIconsFiles = TRUE;
2455 fNoIconsDirs = TRUE;
2456 fForceUpper = FALSE;
2457 fForceLower = FALSE;
2458 fArcStuffVisible = TRUE;
2459 fSplitStatus = TRUE;
2460 fDragndropDlg = TRUE;
2461 {
2462 ULONG flWindowAttr;
2463
2464 flWindowAttr = CV_DETAIL | CV_FLOW | CV_MINI;
2465 PrfWriteProfileData(fmprof,
2466 appname,
2467 "DirflWindowAttr", &flWindowAttr, sizeof(ULONG));
2468 PrfWriteProfileData(fmprof,
2469 appname,
2470 "CollectorflWindowAttr",
2471 &flWindowAttr, sizeof(ULONG));
2472 PrfWriteProfileData(fmprof,
2473 appname,
2474 "Collector.Fontnamesize",
2475 GetPString(IDS_8HELVTEXT),
2476 strlen(GetPString(IDS_8HELVTEXT)) + 1);
2477 }
2478 detailslongname = TRUE;
2479 detailssubject = TRUE;
2480 detailsea = TRUE;
2481 detailssize = TRUE;
2482 detailsicon = TRUE;
2483 detailslwdate = TRUE;
2484 detailslwtime = TRUE;
2485 detailsladate = TRUE;
2486 detailslatime = TRUE;
2487 detailscrdate = TRUE;
2488 detailscrtime = TRUE;
2489 detailsattr = TRUE;
2490 if (hwndTree) {
2491
2492 CNRINFO cnri;
2493 ULONG flWindowAttr = CV_TREE | CV_MINI | CV_TEXT |
2494 CV_FLOW | CA_TREELINE;
2495
2496 memset(&cnri, 0, sizeof(cnri));
2497 cnri.cb = sizeof(cnri);
2498 WinSendMsg(WinWindowFromID
2499 (WinWindowFromID(hwndTree, FID_CLIENT), TREE_CNR),
2500 CM_QUERYCNRINFO, MPFROMP(&cnri), MPFROMLONG(sizeof(cnri)));
2501 cnri.flWindowAttr = flWindowAttr;
2502 WinSendMsg(WinWindowFromID
2503 (WinWindowFromID(hwndTree, FID_CLIENT), TREE_CNR),
2504 CM_SETCNRINFO, MPFROMP(&cnri),
2505 MPFROMLONG(CMA_FLWINDOWATTR));
2506 }
2507 break;
2508 case CFG9_MAXFILENAMES:
2509 if (hwndMain && fAutoView)
2510 WinSendMsg(hwndMain, WM_COMMAND,
2511 MPFROM2SHORT(IDM_AUTOVIEW, 0), MPVOID);
2512 fForceUpper = FALSE;
2513 fForceLower = TRUE;
2514 fExternalViewer = TRUE;
2515 fExternalArcboxes = TRUE;
2516 fExternalCollector = TRUE;
2517 fExternalINIs = TRUE;
2518 fLoadSubject = FALSE;
2519 fLoadLongnames = FALSE;
2520 fNoIconsFiles = TRUE;
2521 fNoIconsDirs = TRUE;
2522 {
2523 ULONG flWindowAttr;
2524
2525 flWindowAttr = CV_TEXT | CV_FLOW;
2526 PrfWriteProfileData(fmprof, appname, "DirflWindowAttr",
2527 &flWindowAttr, sizeof(ULONG));
2528 PrfWriteProfileData(fmprof, appname, "CollectorflWindowAttr",
2529 &flWindowAttr, sizeof(ULONG));
2530 PrfWriteProfileData(fmprof, appname, "Collector.Fontnamesize",
2531 GetPString(IDS_8HELVTEXT),
2532 strlen(GetPString(IDS_8HELVTEXT)) + 1);
2533 }
2534 if (hwndTree) {
2535
2536 CNRINFO cnri;
2537 ULONG flWindowAttr = CV_TREE | CV_TEXT | CV_FLOW | CA_TREELINE;
2538
2539 memset(&cnri, 0, sizeof(cnri));
2540 cnri.cb = sizeof(cnri);
2541 WinSendMsg(WinWindowFromID
2542 (WinWindowFromID(hwndTree, FID_CLIENT), TREE_CNR),
2543 CM_QUERYCNRINFO, MPFROMP(&cnri), MPFROMLONG(sizeof(cnri)));
2544 cnri.flWindowAttr = flWindowAttr;
2545 WinSendMsg(WinWindowFromID
2546 (WinWindowFromID(hwndTree, FID_CLIENT), TREE_CNR),
2547 CM_SETCNRINFO, MPFROMP(&cnri),
2548 MPFROMLONG(CMA_FLWINDOWATTR));
2549 }
2550 break;
2551 case CFG9_MAXSPEED:
2552 fLoadSubject = FALSE;
2553 fLoadLongnames = FALSE;
2554 fVerify = FALSE;
2555 DosSetVerify(FALSE);
2556 FilesToGet = FILESTOGET_MAX;
2557 fQuickArcFind = TRUE;
2558 fMinOnOpen = TRUE;
2559 fRealIdle = FALSE;
2560 fNoIconsFiles = TRUE;
2561 fNoIconsDirs = TRUE;
2562 fSyncUpdates = FALSE;
2563 fArcStuffVisible = FALSE;
2564 fForceUpper = FALSE;
2565 fForceLower = FALSE;
2566 detailslongname = FALSE;
2567 detailssubject = FALSE;
2568 break;
2569
2570 case CFG9_HECTOR:
2571 fSwitchTree = TRUE;
2572 fSwitchTreeOnFocus = FALSE;
2573 fSwitchTreeExpand = TRUE;
2574 fCollapseFirst = TRUE;
2575 fSelectedAlways = FALSE;
2576 fTileBackwards = FALSE;
2577 fExternalViewer = FALSE;
2578 fExternalArcboxes = TRUE;
2579 fExternalCollector = FALSE;
2580 fExternalINIs = TRUE;
2581 fCopyDefault = FALSE;
2582 fFollowTree = FALSE;
2583 fLoadSubject = FALSE;
2584 fLoadLongnames = FALSE;
2585 fDontMoveMouse = FALSE;
2586 fUnHilite = TRUE;
2587 fUserListSwitches = TRUE;
2588 fDCOpens = FALSE;
2589 fLinkSetsIcon = FALSE;
2590 fConfirmDelete = TRUE;
2591 fSyncUpdates = FALSE;
2592 fRealIdle = FALSE;
2593 fNoIconsFiles = FALSE;
2594 fNoIconsDirs = TRUE;
2595 fFolderAfterExtract = FALSE;
2596 fVerify = TRUE;
2597 DosSetVerify(TRUE);
2598 fForceUpper = FALSE;
2599 fForceLower = TRUE;
2600 fArcStuffVisible = FALSE;
2601 fVTreeOpensWPS = FALSE;
2602 fRemoteBug = FALSE;
2603 fDragndropDlg = TRUE;
2604 fMinOnOpen = FALSE;
2605 fQuickArcFind = TRUE;
2606 fNoRemovableScan = TRUE;
2607 FilesToGet = FILESTOGET_MIN;
2608 fFreeTree = FALSE;
2609 fSplitStatus = TRUE;
2610 fAutoTile = TRUE;
2611 fSaveState = TRUE;
2612 fStartMinimized = FALSE;
2613 fStartMaximized = FALSE;
2614 fDataMin = FALSE;
2615 ulCnrType = CCS_EXTENDSEL | CCS_MULTIPLESEL;
2616 fNoTreeGap = TRUE;
2617 {
2618 ULONG flWindowAttr;
2619
2620 flWindowAttr = (CV_NAME | CV_MINI | CV_FLOW | CA_DETAILSVIEWTITLES);
2621 PrfWriteProfileData(fmprof, appname, "DirflWindowAttr",
2622 &flWindowAttr, sizeof(ULONG));
2623 PrfWriteProfileData(fmprof, appname, "CollectorflWindowAttr",
2624 &flWindowAttr, sizeof(ULONG));
2625 }
2626 detailslongname = FALSE;
2627 detailssubject = FALSE;
2628 detailsea = TRUE;
2629 detailssize = TRUE;
2630 detailsicon = TRUE;
2631 detailslwdate = TRUE;
2632 detailslwtime = TRUE;
2633 detailsladate = FALSE;
2634 detailslatime = FALSE;
2635 detailscrdate = FALSE;
2636 detailscrtime = FALSE;
2637 detailsattr = TRUE;
2638 sortFlags = SORT_FILENAME | SORT_DIRSFIRST;
2639 CollectorsortFlags = SORT_FILENAME | SORT_DIRSFIRST;
2640 if (hwndMain) {
2641
2642 SWP swp;
2643
2644 if (WinQueryWindowPos(hwndMain, &swp)) {
2645 WinSetWindowPos(hwndTree, HWND_TOP, 0, 0,
2646 swp.cx / 5, swp.cy, SWP_MOVE | SWP_SIZE);
2647 }
2648 if (MenuInvisible)
2649 WinSendMsg(hwndMain, WM_COMMAND,
2650 MPFROM2SHORT(IDM_HIDEMENU, 0), MPVOID);
2651 if (fAutoView)
2652 WinSendMsg(hwndMain, WM_COMMAND,
2653 MPFROM2SHORT(IDM_AUTOVIEW, 0), MPVOID);
2654 if (fToolbar)
2655 WinSendMsg(hwndMain, WM_COMMAND,
2656 MPFROM2SHORT(IDM_TOOLBAR, 0), MPVOID);
2657 if (!fDrivebar)
2658 WinSendMsg(hwndMain, WM_COMMAND,
2659 MPFROM2SHORT(IDM_DRIVEBAR, 0), MPVOID);
2660 if (!fMoreButtons)
2661 WinSendMsg(hwndMain, WM_COMMAND, MPFROM2SHORT(IDM_MOREBUTTONS, 0),
2662 MPVOID);
2663 if (!fUserComboBox)
2664 WinSendMsg(hwndMain, WM_COMMAND,
2665 MPFROM2SHORT(IDM_USERLIST, 0), MPVOID);
2666 }
2667 if (hwndTree) {
2668
2669 CNRINFO cnri;
2670 ULONG flWindowAttr = (CV_TREE | CV_TEXT | CV_MINI |
2671 CV_FLOW | CA_TREELINE);
2672
2673 memset(&cnri, 0, sizeof(cnri));
2674 cnri.cb = sizeof(cnri);
2675 WinSendMsg(WinWindowFromID
2676 (WinWindowFromID(hwndTree, FID_CLIENT), TREE_CNR),
2677 CM_QUERYCNRINFO, MPFROMP(&cnri), MPFROMLONG(sizeof(cnri)));
2678 cnri.flWindowAttr = flWindowAttr;
2679 WinSendMsg(WinWindowFromID
2680 (WinWindowFromID(hwndTree, FID_CLIENT), TREE_CNR),
2681 CM_SETCNRINFO, MPFROMP(&cnri),
2682 MPFROMLONG(CMA_FLWINDOWATTR));
2683 }
2684 break;
2685
2686 case CFG9_DEFAULT:
2687 fSwitchTree = FALSE;
2688 fSwitchTreeOnFocus = FALSE;
2689 fSwitchTreeExpand = FALSE;
2690 fCollapseFirst = FALSE;
2691 fSelectedAlways = FALSE;
2692 fTileBackwards = FALSE;
2693 fExternalViewer = FALSE;
2694 fExternalArcboxes = FALSE;
2695 fExternalCollector = FALSE;
2696 fExternalINIs = FALSE;
2697 fCopyDefault = FALSE;
2698 fFollowTree = FALSE;
2699 fLoadSubject = TRUE;
2700 fLoadLongnames = TRUE;
2701 fDontMoveMouse = FALSE;
2702 fUnHilite = TRUE;
2703 fUserListSwitches = FALSE;
2704 fDCOpens = FALSE;
2705 fLinkSetsIcon = FALSE;
2706 fConfirmDelete = TRUE;
2707 fSyncUpdates = FALSE;
2708 fRealIdle = FALSE;
2709 fNoIconsFiles = FALSE;
2710 fNoIconsDirs = FALSE;
2711 fFolderAfterExtract = FALSE;
2712 fVerify = TRUE;
2713 fNoSearch = TRUE;
2714 DosSetVerify(TRUE);
2715 fForceUpper = FALSE;
2716 fForceLower = TRUE;
2717 fArcStuffVisible = TRUE;
2718 fVTreeOpensWPS = FALSE;
2719 fRemoteBug = TRUE;
2720 fDragndropDlg = TRUE;
2721 fMinOnOpen = FALSE;
2722 fQuickArcFind = TRUE;
2723 fNoRemovableScan = FALSE;
2724 FilesToGet = FILESTOGET_MAX;
2725 fFreeTree = FALSE;
2726 fSplitStatus = TRUE;
2727 fAutoTile = TRUE;
2728 fSaveState = TRUE;
2729 fStartMinimized = FALSE;
2730 fStartMaximized = FALSE;
2731 fDataMin = TRUE;
2732 ulCnrType = CCS_EXTENDSEL;
2733 fNoTreeGap = FALSE;
2734 {
2735 ULONG flWindowAttr;
2736
2737 flWindowAttr = (CV_NAME | CV_MINI | CV_FLOW | CA_DETAILSVIEWTITLES);
2738 PrfWriteProfileData(fmprof, appname, "DirflWindowAttr",
2739 &flWindowAttr, sizeof(ULONG));
2740 PrfWriteProfileData(fmprof, appname, "CollectorflWindowAttr",
2741 &flWindowAttr, sizeof(ULONG));
2742 }
2743 detailslongname = FALSE;
2744 detailssubject = FALSE;
2745 detailsea = TRUE;
2746 detailssize = TRUE;
2747 detailsicon = TRUE;
2748 detailslwdate = TRUE;
2749 detailslwtime = TRUE;
2750 detailsladate = FALSE;
2751 detailslatime = FALSE;
2752 detailscrdate = FALSE;
2753 detailscrtime = FALSE;
2754 detailsattr = TRUE;
2755 sortFlags = SORT_FILENAME | SORT_DIRSFIRST;
2756 CollectorsortFlags = SORT_FILENAME | SORT_DIRSFIRST;
2757 if (hwndMain) {
2758
2759 SWP swp;
2760
2761 if (WinQueryWindowPos(hwndMain, &swp)) {
2762 WinSetWindowPos(hwndTree, HWND_TOP, 0, 0,
2763 swp.cx / 5,
2764 swp.cy -
2765 (WinQuerySysValue(HWND_DESKTOP, SV_CYICON) * 2),
2766 SWP_MOVE | SWP_SIZE);
2767 }
2768 }
2769 if (hwndTree) {
2770
2771 CNRINFO cnri;
2772 ULONG flWindowAttr = (CV_TREE | CV_TEXT |
2773 CV_FLOW | CA_TREELINE | CV_MINI);
2774
2775 memset(&cnri, 0, sizeof(cnri));
2776 cnri.cb = sizeof(cnri);
2777 WinSendMsg(WinWindowFromID
2778 (WinWindowFromID(hwndTree, FID_CLIENT), TREE_CNR),
2779 CM_QUERYCNRINFO, MPFROMP(&cnri), MPFROMLONG(sizeof(cnri)));
2780 cnri.flWindowAttr = flWindowAttr;
2781 WinSendMsg(WinWindowFromID
2782 (WinWindowFromID(hwndTree, FID_CLIENT), TREE_CNR),
2783 CM_SETCNRINFO, MPFROMP(&cnri),
2784 MPFROMLONG(CMA_FLWINDOWATTR));
2785 }
2786 break;
2787
2788 case CFG9_WINDOZETHINK:
2789 fTileBackwards = FALSE;
2790 ulCnrType = CCS_MULTIPLESEL;
2791 fFollowTree = TRUE;
2792 fTopDir = FALSE;
2793 fSwitchTree = TRUE;
2794 fSwitchTreeOnFocus = FALSE;
2795 fSwitchTreeExpand = TRUE;
2796 fCollapseFirst = TRUE;
2797 fDCOpens = FALSE;
2798 {
2799 ULONG flWindowAttr;
2800
2801 flWindowAttr = CV_NAME | CV_FLOW | CA_DETAILSVIEWTITLES;
2802 PrfWriteProfileData(fmprof, appname, "DirflWindowAttr",
2803 &flWindowAttr, sizeof(ULONG));
2804 PrfWriteProfileData(fmprof, appname, "CollectorflWindowAttr",
2805 &flWindowAttr, sizeof(ULONG));
2806 }
2807 fLinkSetsIcon = FALSE;
2808 fFreeTree = FALSE;
2809 fNoTreeGap = TRUE;
2810 fExternalArcboxes = TRUE;
2811 fExternalViewer = TRUE;
2812 fExternalCollector = TRUE;
2813 fExternalINIs = TRUE;
2814 fUserListSwitches = TRUE;
2815 WinSendMsg((HWND) WinQueryWindowULong(hwnd, QWL_USER), UM_UNDO, MPVOID,
2816 MPVOID);
2817 if (hwndTree) {
2818
2819 CNRINFO cnri;
2820 ULONG flWindowAttr = CV_TREE | CV_MINI | CV_ICON |
2821 CV_FLOW | CA_TREELINE;
2822
2823 memset(&cnri, 0, sizeof(cnri));
2824 cnri.cb = sizeof(cnri);
2825 WinSendMsg(WinWindowFromID
2826 (WinWindowFromID(hwndTree, FID_CLIENT), TREE_CNR),
2827 CM_QUERYCNRINFO, MPFROMP(&cnri), MPFROMLONG(sizeof(cnri)));
2828 cnri.flWindowAttr = flWindowAttr;
2829 WinSendMsg(WinWindowFromID
2830 (WinWindowFromID(hwndTree, FID_CLIENT), TREE_CNR),
2831 CM_SETCNRINFO, MPFROMP(&cnri),
2832 MPFROMLONG(CMA_FLWINDOWATTR));
2833 }
2834 if (hwndMain) {
2835 if (fAutoView)
2836 WinSendMsg(hwndMain, WM_COMMAND,
2837 MPFROM2SHORT(IDM_AUTOVIEW, 0), MPVOID);
2838 if (!fDrivebar)
2839 WinSendMsg(hwndMain, WM_COMMAND,
2840 MPFROM2SHORT(IDM_DRIVEBAR, 0), MPVOID);
2841 {
2842 SWP swp;
2843
2844 if (WinQueryWindowPos(hwndMain, &swp)) {
2845 WinSetWindowPos(hwndTree, HWND_TOP, 0, 0,
2846 swp.cx / 5, swp.cy, SWP_MOVE | SWP_SIZE);
2847 }
2848 }
2849 PostMsg(MainObjectHwnd, UM_RESTORE, MPVOID, MPFROMLONG(2L));
2850 PostMsg(MainObjectHwnd, UM_SETDIR, MPFROMLONG(1L), MPVOID);
2851 }
2852 return 0;
2853
2854 case CFG9_DOSTHINK:
2855 fTileBackwards = TRUE;
2856 ulCnrType = CCS_MULTIPLESEL;
2857 fSwitchTree = TRUE;
2858 fSwitchTreeOnFocus = FALSE;
2859 fSwitchTreeExpand = TRUE;
2860 fCollapseFirst = TRUE;
2861 fFollowTree = TRUE;
2862 fTopDir = FALSE;
2863 if (hwndMain) {
2864 if (!fTextTools)
2865 WinSendMsg(hwndMain, WM_COMMAND,
2866 MPFROM2SHORT(IDM_TEXTTOOLS, 0), MPVOID);
2867 }
2868 {
2869 ULONG flWindowAttr;
2870
2871 flWindowAttr = CV_TEXT | CV_FLOW | CA_DETAILSVIEWTITLES;
2872 PrfWriteProfileData(fmprof, appname, "DirflWindowAttr",
2873 &flWindowAttr, sizeof(ULONG));
2874 PrfWriteProfileData(fmprof, appname, "CollectorflWindowAttr",
2875 &flWindowAttr, sizeof(ULONG));
2876 }
2877 if (hwndTree) {
2878
2879 CNRINFO cnri;
2880 ULONG flWindowAttr = CV_TREE | CV_TEXT | CV_FLOW | CA_TREELINE;
2881
2882 memset(&cnri, 0, sizeof(cnri));
2883 cnri.cb = sizeof(cnri);
2884 WinSendMsg(WinWindowFromID
2885 (WinWindowFromID(hwndTree, FID_CLIENT), TREE_CNR),
2886 CM_QUERYCNRINFO, MPFROMP(&cnri), MPFROMLONG(sizeof(cnri)));
2887 cnri.flWindowAttr = flWindowAttr;
2888 WinSendMsg(WinWindowFromID
2889 (WinWindowFromID(hwndTree, FID_CLIENT), TREE_CNR),
2890 CM_SETCNRINFO, MPFROMP(&cnri),
2891 MPFROMLONG(CMA_FLWINDOWATTR));
2892 }
2893 /* intentional fallthru */
2894 case CFG9_1X:
2895 if (SHORT1FROMMP(mp1) == CFG9_1X) {
2896 fTileBackwards = FALSE;
2897 ulCnrType = CCS_MULTIPLESEL | CCS_EXTENDSEL;
2898 fSwitchTree = FALSE;
2899 fSwitchTreeOnFocus = FALSE;
2900 fSwitchTreeExpand = FALSE;
2901 fCollapseFirst = FALSE;
2902 fFollowTree = FALSE;
2903 fNoSearch = TRUE;
2904 }
2905 fAutoTile = TRUE;
2906 fSaveState = TRUE;
2907 fDCOpens = FALSE;
2908 fLinkSetsIcon = FALSE;
2909 fFreeTree = FALSE;
2910 fNoTreeGap = TRUE;
2911 fExternalArcboxes = TRUE;
2912 fExternalViewer = TRUE;
2913 fExternalCollector = TRUE;
2914 fExternalINIs = TRUE;
2915 fUserListSwitches = TRUE;
2916 WinSendMsg((HWND) WinQueryWindowULong(hwnd, QWL_USER), UM_UNDO, MPVOID,
2917 MPVOID);
2918 if (hwndTree) {
2919
2920 CNRINFO cnri;
2921 ULONG flWindowAttr = CV_TREE | CV_ICON | CV_FLOW | CA_TREELINE;
2922
2923 memset(&cnri, 0, sizeof(cnri));
2924 cnri.cb = sizeof(cnri);
2925 WinSendMsg(WinWindowFromID(WinWindowFromID(hwndTree, FID_CLIENT),
2926 TREE_CNR),
2927 CM_QUERYCNRINFO, MPFROMP(&cnri), MPFROMLONG(sizeof(cnri)));
2928 cnri.flWindowAttr = flWindowAttr;
2929 WinSendMsg(WinWindowFromID(WinWindowFromID(hwndTree, FID_CLIENT),
2930 TREE_CNR),
2931 CM_SETCNRINFO,
2932 MPFROMP(&cnri), MPFROMLONG(CMA_FLWINDOWATTR));
2933 }
2934 if (hwndMain) {
2935 if (fAutoView)
2936 WinSendMsg(hwndMain, WM_COMMAND,
2937 MPFROM2SHORT(IDM_AUTOVIEW, 0), MPVOID);
2938 if (fUserComboBox)
2939 WinSendMsg(hwndMain, WM_COMMAND,
2940 MPFROM2SHORT(IDM_USERLIST, 0), MPVOID);
2941 {
2942 SWP swp;
2943
2944 if (WinQueryWindowPos(hwndMain, &swp)) {
2945 WinSetWindowPos(hwndTree, HWND_TOP, 0, 0,
2946 swp.cx / 5, swp.cy, SWP_MOVE | SWP_SIZE);
2947 }
2948 }
2949 PostMsg(MainObjectHwnd, UM_RESTORE, MPVOID, MPFROMLONG(2L));
2950 PostMsg(MainObjectHwnd, UM_SETDIR, MPVOID, MPVOID);
2951 }
2952 return 0;
2953
2954 case DID_CANCEL:
2955 WinSendMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
2956
2957 case DID_OK:
2958 PostMsg((HWND) WinQueryWindowULong(hwnd, QWL_USER), msg, mp1, mp2);
2959 return 0;
2960
2961 default:
2962 return 0;
2963 }
2964 // Save new details settings and refresh windows
2965 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsLongname",
2966 &detailslongname, sizeof(BOOL));
2967 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsSubject",
2968 &detailssubject, sizeof(BOOL));
2969 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsEA",
2970 &detailsea, sizeof(BOOL));
2971 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsSize",
2972 &detailssize, sizeof(BOOL));
2973 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsIcon",
2974 &detailsicon, sizeof(BOOL));
2975 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsLWDate",
2976 &detailslwdate, sizeof(BOOL));
2977 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsLWTime",
2978 &detailslwtime, sizeof(BOOL));
2979 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsLADate",
2980 &detailsladate, sizeof(BOOL));
2981 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsLATime",
2982 &detailslatime, sizeof(BOOL));
2983 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsCRDate",
2984 &detailscrdate, sizeof(BOOL));
2985 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsCRTime",
2986 &detailscrtime, sizeof(BOOL));
2987 PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsAttr",
2988 &detailsattr, sizeof(BOOL));
2989 if (hwndMain) {
2990 // Save state and restore to refresh windows with new settings
2991 if (SaveDirCnrState(hwndMain, GetPString(IDS_FM2TEMPTEXT)) > 0) {
2992 // Tell window procedure to close container windows
2993 PostMsg(MainObjectHwnd, UM_RESTORE, MPVOID, MPFROMLONG(2));
2994 // Restore saved state
2995 PostMsg(MainObjectHwnd, UM_RESTORE, GetPString(IDS_FM2TEMPTEXT), MPVOID);
2996 }
2997 }
2998 WinSendMsg((HWND) WinQueryWindowULong(hwnd, QWL_USER),
2999 UM_UNDO, MPVOID, MPVOID);
3000 return 0;
3001
3002 case WM_CLOSE:
3003 break;
3004 }
3005 return WinDefDlgProc(hwnd, msg, mp1, mp2);
3006}
3007
3008struct
3009{
3010 USHORT usMenuId;
3011 USHORT usFrameId;
3012 ULONG ulTitle;
3013 PFNWP pfnPageProc;
3014 HWND hwnd;
3015 ULONG ulHelpId;
3016 ULONG ulPageId;
3017} np[] = {
3018 { IDM_DIRCNRSETTINGS, CFGD_FRAME, IDS_NOTEDIRCNRS1TEXT, CfgDDlgProc, 0, 0, 0 },
3019 { IDM_DIRVIEWSETTINGS, CFG5_FRAME, IDS_NOTEDIRVIEW1TEXT, Cfg5DlgProc, 0, 0, 0},
3020 { IDM_DIRSORTSETTINGS, CFG6_FRAME, IDS_NOTEDIRSORT1TEXT, Cfg6DlgProc, 0, 0, 0 },
3021 { IDM_COLLECTORVIEWSETTINGS, CFG5_FRAME, IDS_NOTECOLVIEW1TEXT, Cfg7DlgProc, 0, 0, 0 },
3022 { IDM_COLLECTORSORTSETTINGS, CFG6_FRAME, IDS_NOTECOLSORT1TEXT, Cfg8DlgProc, 0, 0, 0 },
3023 { IDM_ARCHIVERSETTINGS, CFGA_FRAME, IDS_NOTEARCHIVER1TEXT, CfgADlgProc, 0, 0, 0 },
3024 { IDM_TREECNRVIEWSETTINGS, CFGT_FRAME, IDS_NOTETREE1TEXT, CfgTDlgProc, 0, 0, 0 },
3025 { IDM_TREECNRSORTSETTINGS, CFGTS_FRAME, IDS_NOTETREESORT1TEXT, CfgTSDlgProc, 0, 0, 0 },
3026 { IDM_VIEWERSETTINGS, CFGV_FRAME, IDS_NOTEVIEWERS1TEXT, CfgVDlgProc, 0, 0, 0 },
3027 { IDM_VIEWERSETTINGS2, CFGH_FRAME, IDS_NOTEVIEWERS3TEXT, CfgHDlgProc, 0, 0, 0 },
3028 { IDM_COMPARESETTINGS, CFGC_FRAME, IDS_NOTECOMPARE1TEXT, CfgCDlgProc, 0, 0, 0 },
3029 { IDM_MONOLITHICSETTINGS, CFGM_FRAME, IDS_NOTEMONOLITHIC1TEXT, CfgMDlgProc, 0, 0, 0 },
3030 { IDM_GENERALSETTINGS, CFGG_FRAME, IDS_NOTEGENERAL1TEXT, CfgGDlgProc, 0, 0, 0 },
3031 { IDM_SCANSETTINGS, CFGS_FRAME, IDS_NOTESCANNING1TEXT, CfgSDlgProc, 0, 0, 0 },
3032 { IDM_BUBBLESSETTINGS, CFGB_FRAME, IDS_NOTEBUBBLE1TEXT, CfgBDlgProc, 0, 0, 0 },
3033 { IDM_QUICKSETTINGS, CFG9_FRAME, IDS_NOTEQUICK1TEXT, Cfg9DlgProc, 0, 0, 0 },
3034 { 0, 0, 0, NULL, 0, 0, 0 } // usFrameId 0 is end marker
3035};
3036
3037static PSZ pszIK_LastSettingsPage = "LastSettingsPage";
3038
3039MRESULT EXPENTRY CfgDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
3040{
3041 HWND hwndTemp;
3042 USHORT attrib = BKA_FIRST;
3043 INT x;
3044 ULONG ulPageId;
3045 UINT uPageIndex;
3046
3047 switch (msg) {
3048 case WM_INITDLG:
3049 hwndNotebook = hwnd;
3050 uPageIndex = 0;
3051
3052 // If generic call, try to find conditional cascade default
3053 // 15 Feb 08 SHL fixme to be gone when/if IDM_NOTEBOOK gone?
3054 if (mp2 == MPFROMLONG(IDM_NOTEBOOK)) {
3055 DbgMsg(pszSrcFile, __LINE__, "Trying to translate IDM_NOTEBOOK");
3056 hwndTemp = WinQueryWindow(hwnd, QW_OWNER);
3057 if (hwndTemp != HWND_DESKTOP) {
3058 HWND hwndMenu;
3059 // Owner is frame if not applet
3060 hwndMenu = WinWindowFromID(hwndTemp, FID_MENU);
3061 if (hwndMenu == NULLHANDLE)
3062 Runtime_Error(pszSrcFile, __LINE__, "FID_MENU");
3063 else {
3064 MENUITEM mi;
3065 BOOL ok;
3066 memset(&mi, 0, sizeof(mi));
3067 ok = (BOOL)WinSendMsg(hwndMenu,
3068 MM_QUERYITEM,
3069 MPFROM2SHORT(IDM_NOTEBOOKSUBMENU, TRUE),
3070 MPFROMP(&mi));
3071 if (!ok)
3072 Runtime_Error(pszSrcFile, __LINE__, "IDM_NOTEBOOKSUBMENU");
3073 else {
3074 mp2 = WinSendMsg(mi.hwndSubMenu, MM_QUERYDEFAULTITEMID, MPVOID, MPVOID);
3075 if (!mp2)
3076 Runtime_Error(pszSrcFile, __LINE__, "MM_QUERYDEFAULTITEMID");
3077 }
3078 }
3079 }
3080 }
3081
3082 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
3083 WinSendDlgItemMsg(hwnd,
3084 CFG_NOTEBOOK,
3085 BKM_SETDIMENSIONS,
3086 MPFROM2SHORT(82, 24), MPFROMLONG(BKA_MAJORTAB));
3087 WinSendDlgItemMsg(hwnd,
3088 CFG_NOTEBOOK,
3089 BKM_SETDIMENSIONS,
3090 MPFROM2SHORT(20, 20), MPFROMLONG(BKA_PAGEBUTTON));
3091 WinSendDlgItemMsg(hwnd,
3092 CFG_NOTEBOOK,
3093 BKM_SETDIMENSIONS,
3094 MPFROM2SHORT(0, 0), MPFROMLONG(BKA_MINORTAB));
3095
3096 // Build and insert notebook pages
3097 for (x = 0; np[x].usFrameId; x++) {
3098 hwndTemp = WinLoadDlg(HWND_DESKTOP,
3099 HWND_DESKTOP,
3100 np[x].pfnPageProc, FM3ModHandle, np[x].usFrameId, MPVOID);
3101 if (!hwndTemp) {
3102 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
3103 "Can not load settings page %u", x);
3104 }
3105 else {
3106 WinSetWindowULong(hwndTemp, QWL_USER, (ULONG)hwnd);
3107 np[x].hwnd = hwndTemp;
3108 np[x].ulPageId = (ULONG)WinSendDlgItemMsg(hwnd,
3109 CFG_NOTEBOOK,
3110 BKM_INSERTPAGE,
3111 MPFROMLONG(BKA_FIRST),
3112 MPFROM2SHORT(BKA_AUTOPAGESIZE |
3113 BKA_STATUSTEXTON |
3114 BKA_MAJOR, attrib));
3115 attrib = BKA_LAST;
3116 WinSendDlgItemMsg(hwnd,
3117 CFG_NOTEBOOK,
3118 BKM_SETPAGEWINDOWHWND,
3119 MPFROMLONG(np[x].ulPageId), MPFROMLONG(np[x].hwnd));
3120 WinSendDlgItemMsg(hwnd,
3121 CFG_NOTEBOOK,
3122 BKM_SETTABTEXT,
3123 MPFROMLONG(np[x].ulPageId),
3124 MPFROMP(GetPString(np[x].ulTitle)));
3125 WinSendDlgItemMsg(hwnd,
3126 CFG_NOTEBOOK,
3127 BKM_SETSTATUSLINETEXT,
3128 MPFROMLONG(np[x].ulPageId),
3129 MPFROMP(GetPString(np[x].ulTitle + 1)));
3130 if (LONGFROMMP(mp2) == np[x].usMenuId)
3131 uPageIndex = x; // Remember selected page
3132 }
3133 } // for pages
3134
3135 // If quick settings page requested, assume request is for first time init
3136 // Turn to cfg page and show help
3137 // Page will not be available if running fm/2 lite or if load error
3138 // 15 Feb 08 SHL fixme to do just once?
3139 if (mp2 == MPFROMLONG(IDM_QUICKSETTINGS) &&
3140 x-- > 0 &&
3141 np[x].hwnd &&
3142 np[x].usFrameId == CFG9_FRAME)
3143 {
3144 // 10 Jan 08 SHL fixme to document what UM_SETDIR 1 means
3145 PostMsg(MainObjectHwnd, UM_SETDIR, MPFROMLONG(1), MPVOID);
3146 PostMsg(WinWindowFromID(hwnd, CFG_NOTEBOOK),
3147 BKM_TURNTOPAGE, MPFROMLONG(np[x].ulPageId), MPVOID);
3148 PostMsg(hwnd, UM_FOCUSME, MPFROMLONG(np[x].hwnd), MPVOID);
3149 PostMsg(np[x].hwnd, WM_COMMAND, MPFROM2SHORT(IDM_HELP, 0), MPVOID);
3150 }
3151 else if (uPageIndex >= x) {
3152 Runtime_Error(pszSrcFile, __LINE__, "uPageIndex corrupted (%u)",
3153 uPageIndex);
3154 uPageIndex = 0;
3155 }
3156 PostMsg(WinWindowFromID(hwnd, CFG_NOTEBOOK),
3157 BKM_TURNTOPAGE, MPFROMLONG(np[uPageIndex].ulPageId), MPVOID);
3158 // 15 Feb 08 SHL fixme to put focus on first field of page
3159
3160 break;
3161
3162 case UM_FOCUSME:
3163 if (mp1)
3164 WinSetActiveWindow(HWND_DESKTOP, (HWND) mp1);
3165 break;
3166
3167 case UM_SETUP:
3168 WinSetActiveWindow(HWND_DESKTOP, WinQueryWindow(hwnd, QW_OWNER));
3169 WinSetActiveWindow(HWND_DESKTOP, hwnd);
3170 return 0;
3171
3172 case WM_COMMAND:
3173 switch (SHORT1FROMMP(mp1)) {
3174 case DID_OK:
3175 WinDismissDlg(hwnd, 1);
3176 break;
3177
3178 case DID_CANCEL:
3179 // Tell current page to undo itself in case changed and still alive
3180 SaveLastPageIndex(hwnd);
3181 ulPageId = (ULONG) WinSendDlgItemMsg(hwnd,
3182 CFG_NOTEBOOK,
3183 BKM_QUERYPAGEID,
3184 MPFROMLONG(0),
3185 MPFROM2SHORT(BKA_TOP, 0));
3186 hwndTemp = (HWND) WinSendDlgItemMsg(hwnd,
3187 CFG_NOTEBOOK,
3188 BKM_QUERYPAGEWINDOWHWND,
3189 MPFROMLONG(ulPageId), MPVOID);
3190 if (hwndTemp)
3191 WinSendMsg(hwndTemp, UM_UNDO, MPVOID, MPVOID);
3192
3193 WinDismissDlg(hwnd, 0);
3194 break;
3195
3196 case IDM_HELP: /* relay message to appropriate page's window */
3197 ulPageId = (ULONG) WinSendDlgItemMsg(hwnd,
3198 CFG_NOTEBOOK,
3199 BKM_QUERYPAGEID,
3200 MPFROMLONG(0),
3201 MPFROM2SHORT(BKA_TOP, 0));
3202 hwndTemp = (HWND) WinSendDlgItemMsg(hwnd,
3203 CFG_NOTEBOOK,
3204 BKM_QUERYPAGEWINDOWHWND,
3205 MPFROMLONG(ulPageId), MPVOID);
3206 if (hwndTemp)
3207 PostMsg(hwndTemp, WM_COMMAND, MPFROM2SHORT(IDM_HELP, 0), MPVOID);
3208 break;
3209 }
3210 return 0;
3211
3212 case UM_UNDO:
3213 for (x = 0; np[x].usFrameId; x++) {
3214 if (np[x].hwnd)
3215 WinSendMsg(np[x].hwnd, UM_UNDO, MPVOID, MPVOID);
3216 }
3217 break;
3218
3219 case WM_DESTROY:
3220 if (np[0].usFrameId) {
3221 for (x = 1; np[x].usFrameId; x++) {
3222 if (np[x].hwnd) {
3223 WinSendMsg(np[x].hwnd, WM_CLOSE, MPVOID, MPVOID);
3224 np[x].hwnd = (HWND) 0;
3225 np[x].ulPageId = 0;
3226 }
3227 }
3228 WinSendMsg(np[0].hwnd, WM_CLOSE, MPVOID, MPVOID);
3229 np[0].hwnd = (HWND) 0;
3230 np[0].ulPageId = 0;
3231 }
3232 hwndNotebook = (HWND) 0;
3233 break;
3234 case WM_CLOSE:
3235 SaveLastPageIndex(hwnd);
3236 break;
3237 }
3238 return WinDefDlgProc(hwnd, msg, mp1, mp2);
3239}
3240/**
3241 * Initialize config submenu
3242 * @param hwndMenu is window handle
3243 * @param fIsLite is true if called for fm/2 lite
3244 */
3245
3246VOID CfgMenuInit(HWND hwndMenu, BOOL fIsLite)
3247{
3248 UINT uPageIndex;
3249 ULONG ulSize = sizeof(uPageIndex);
3250 UINT x;
3251 PrfQueryProfileData(fmprof, appname, pszIK_LastSettingsPage, &uPageIndex, &ulSize);
3252 for (x = 0; x < uPageIndex && np[x].usFrameId; x++)
3253 ; // Search
3254 if (np[x].usMenuId)
3255 SetConditionalCascade(hwndMenu, IDM_NOTEBOOKSUBMENU, np[uPageIndex].usMenuId);
3256 // If lite, delete excess items from menus and tables
3257 if (fIsLite) {
3258 WinSendMsg(hwndMenu,
3259 MM_DELETEITEM,
3260 MPFROM2SHORT(IDM_QUICKSETTINGS, FALSE), MPVOID);
3261 // If fm/2 lite drop quick setting page
3262 for (x = 0; np[x].usFrameId && np[x].usFrameId != CFG9_FRAME; x++)
3263 ; // Scan
3264 np[x].usFrameId = 0;
3265 }
3266}
3267
3268static VOID SaveLastPageIndex(HWND hwnd)
3269{
3270 HWND hwndOwner;
3271 HWND hwndMenu;
3272 UINT x;
3273 ULONG ulPageId;
3274
3275 // Owner is frame if not applet
3276 hwndOwner = WinQueryWindow(hwnd, QW_OWNER);
3277 if (hwndOwner != HWND_DESKTOP) {
3278 ulPageId = (ULONG)WinSendDlgItemMsg(hwnd,
3279 CFG_NOTEBOOK,
3280 BKM_QUERYPAGEID,
3281 MPFROMLONG(0),
3282 MPFROM2SHORT(BKA_TOP, 0));
3283 if (!ulPageId)
3284 Runtime_Error(pszSrcFile, __LINE__, "BKM_QUERYPAGEID");
3285 else {
3286 for (x = 0; np[x].usMenuId && np[x].ulPageId != ulPageId; x++)
3287 ; // Scan
3288 if (!np[x].usMenuId)
3289 Runtime_Error(pszSrcFile, __LINE__, "bad menu id %lu", ulPageId);
3290 else {
3291 PrfWriteProfileData(fmprof, FM3Str, pszIK_LastSettingsPage,
3292 (PVOID)&x, sizeof(x));
3293 hwndMenu = WinWindowFromID(hwndOwner, FID_MENU);
3294 SetConditionalCascade(hwndMenu, IDM_NOTEBOOKSUBMENU, np[x].usMenuId);
3295 }
3296 }
3297 }
3298}
3299
3300#pragma alloc_text(NOTEBOOK,CfgTDlgProc,CfgTSDlgProc,CfgMDlgProc)
3301#pragma alloc_text(NOTEBOOK2,CfgADlgProc,CfgSDlgProc,CfgVDlgProc,CfgHDlgProc)
3302#pragma alloc_text(NOTEBOOK3,CfgDDlgProc,Cfg5DlgProc,Cfg6DlgProc)
3303#pragma alloc_text(NOTEBOOK4,Cfg7DlgProc,Cfg8DlgProc,CfgCDlgProc)
3304#pragma alloc_text(NOTEBOOK5,CfgGDlgProc,CfgDlgProc,CfgBDlgProc)
3305#pragma alloc_text(NOTEBOOK5,CfgMenuInit,SaveLastPageIndex)
Note: See TracBrowser for help on using the repository browser.