source: trunk/dll/notebook.c@ 1424

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

Show either file system type or drive label beside dirve letter in tree. (tickets 47 & 339)

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