source: trunk/dll/notebook.c@ 1375

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

Updated history; comments minor code cleanup for recent changes

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