source: trunk/dll/notebook.c@ 1306

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

Added option to use subdirectory based on the archive name for extraction from the arc container; it is set in the notebook and separate from the extract dialog setting; includes help file update, comments and cleanup (Ticket 22)

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