source: trunk/dll/notebook.c@ 1394

Last change on this file since 1394 was 1394, checked in by Steven Levine, 17 years ago

Ticket 340: Convert GetPString to use STRINGTABLE.

Drop fm3dll.str and mkstr.exe from makefiles and wpi builders

Convert many functions to expect PCSZ arguments.
Correct walk, compare and dirsizes dialog setups to ignore saved dialog size
Drop copyright.c logic from makefile

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