source: trunk/dll/notebook.c@ 1478

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

Fix trap on rescan following change of label/drive type or environment on SMP; Ticket 408

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