source: trunk/dll/notebook.c@ 1429

Last change on this file since 1429 was 1429, checked in by Gregg Young, 16 years ago

Comments and documentation for previous 5 change sets

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