source: trunk/dll/notebook.c@ 1365

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

Add option to rescan drive tree on media eject Ticket 48; Remove error message when priovious notebook page isn't defined (fixes issue with new installs) Ticket 329

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