source: trunk/dll/mainwnd2.c@ 304

Last change on this file since 304 was 299, checked in by root, 19 years ago

Use QWL_USER more
Map IDM_WINDOWDLG to match IBM_TWODIRS

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 38.9 KB
RevLine 
[133]1
2/***********************************************************************
3
4 $Id: mainwnd2.c 299 2006-06-27 00:18:37Z root $
5
[178]6 fm/4 main window
[133]7
8 Copyright (c) 1993-98 M. Kimes
[299]9 Copyright (c) 2005, 2006 Steven H. Levine
[133]10
11 23 May 05 SHL Use datamin.h
[178]12 26 May 05 SHL Comments and localize code
[246]13 06 Aug 05 SHL Renames
[299]14 02 Jan 06 SHL Use QWL_USER more
15 02 Jan 06 SHL Map IDM_WINDOWDLG to match IBM_TWODIRS
[133]16
17***********************************************************************/
18
[2]19#define INCL_DOS
20#define INCL_WIN
21#define INCL_GPI
22
23#include <os2.h>
24#include <stdlib.h>
25#include <stdio.h>
26#include <string.h>
27#include <ctype.h>
28#include <share.h>
[133]29
[2]30#include "fm3dll.h"
31#include "fm3dlg.h"
32#include "fm3str.h"
33#include "tools.h"
[133]34#include "datamin.h"
[2]35
[133]36typedef struct
37{
38 USHORT size;
39 USHORT dummy;
40 HWND hwndDir1;
41 HWND hwndDir2;
42 HWND hwndCurr;
43 HWND hwndLastDir;
44 HWND hwndMax;
[178]45} PERSON1DATA;
[2]46
47#pragma alloc_text(PERSON11,MainFrameWndProc2,MainWndProc2)
48#pragma alloc_text(PERSON12,StartFM32,MainWMOnce2)
49#pragma alloc_text(PERSON13,MainWMCommand2)
50
[178]51static MRESULT EXPENTRY MainFrameWndProc2(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[133]52{
[299]53 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, QWL_USER);
[2]54
[133]55 switch (msg)
56 {
57 case WM_ADJUSTWINDOWPOS:
58 {
59 SWP *pswp;
[2]60
[133]61 pswp = (SWP *) mp1;
62 if (pswp -> fl & (SWP_SHOW | SWP_RESTORE))
63 PostMsg(WinWindowFromID(hwnd, FID_CLIENT), UM_SIZE, MPVOID, MPVOID);
64 if (fDataMin && !fAmClosing)
[2]65 {
[133]66 if (pswp -> fl & (SWP_HIDE | SWP_MINIMIZE))
67 {
[2]68
[133]69 SWP swp;
[2]70
[133]71 WinQueryWindowPos(hwnd, &swp);
72 PostMsg(hwnd, UM_FOCUSME, MPFROMLONG(swp.fl), MPVOID);
73 HideNote();
74 }
75 else if (pswp -> fl & (SWP_SHOW | SWP_RESTORE))
76 {
77 if (DataHwnd)
78 PostMsg(DataHwnd, WM_CLOSE, MPVOID, MPVOID);
79 }
[2]80 }
[133]81 if (!fAmClosing)
82 {
83 if (pswp -> fl & (SWP_HIDE | SWP_MINIMIZE))
84 HideNote();
85 }
86 }
87 break;
[2]88
[133]89 case UM_FOCUSME:
90 CreateDataBar(HWND_DESKTOP, (ULONG) mp1);
91 return 0;
[2]92
[133]93 case WM_BUTTON1UP:
94 case WM_BUTTON2UP:
95 case WM_BUTTON3UP:
96 case WM_MOUSEMOVE:
97 case WM_CHORD:
98 shiftstate = (SHORT2FROMMP(mp2) & (KC_ALT | KC_SHIFT | KC_CTRL));
99 break;
[2]100
[133]101 case WM_CHAR:
102 shiftstate = (SHORT1FROMMP(mp1) & (KC_SHIFT | KC_ALT | KC_CTRL));
103 break;
[2]104
[133]105 case WM_CONTROL:
106 return WinSendMsg(WinWindowFromID(hwnd, FID_CLIENT), UM_CONTROL, mp1, mp2);
[2]107
[133]108 case WM_COMMAND:
109 return WinSendMsg(WinWindowFromID(hwnd, FID_CLIENT), msg, mp1, mp2);
[2]110
[133]111 case WM_CALCFRAMERECT:
112 {
113 MRESULT mr;
114 PRECTL prectl;
115 LONG sheight = 20, bheight = 20;
[2]116
[133]117 mr = (oldproc) ? oldproc(hwnd, msg, mp1, mp2) :
118 PFNWPFrame(hwnd, msg, mp1, mp2);
[2]119
[133]120 /*
121 * Calculate the position of the client rectangle.
122 * Otherwise, we'll see a lot of redraw when we move the
123 * client during WM_FORMATFRAME.
124 */
[2]125
[133]126 if (mr && mp2)
127 {
128 prectl = (PRECTL) mp1;
129 if (prectl -> yBottom != prectl -> yTop)
130 {
131 {
132 HPS hps;
133 POINTL aptl[TXTBOX_COUNT];
[2]134
[133]135 hps = WinGetPS(hwndStatus);
136 GpiQueryTextBox(hps, 6, "$`WjgT", TXTBOX_COUNT, aptl);
137 WinReleasePS(hps);
138 sheight = aptl[TXTBOX_TOPLEFT].y + 6;
139 hps = WinGetPS(hwndName);
140 GpiQueryTextBox(hps, 6, "$`WjgT", TXTBOX_COUNT, aptl);
141 WinReleasePS(hps);
142 bheight = aptl[TXTBOX_TOPLEFT].y + 6;
143 }
144 prectl -> yBottom += (sheight + 4);
145 prectl -> yTop -= (sheight + 4);
146 prectl -> yBottom += (bheight + 4);
147 prectl -> yTop -= (bheight + 4);
148 if (fToolbar)
149 {
150 if (!fTextTools)
151 prectl -> yTop -= ((fToolTitles) ? 50 : 40);
152 else
153 prectl -> yTop -= 32;
154 }
155 ResizeDrives(WinWindowFromID(hwnd, MAIN_DRIVES),
156 ((prectl -> xRight -
157 (WinQuerySysValue(HWND_DESKTOP,
158 SV_CYSIZEBORDER) * 2)) - 4));
159 prectl -> yTop -= (16 * (DriveLines * 18));
160 prectl -> yTop -= 2;
161 if (fAutoView)
162 {
163 AutoviewHeight = min(AutoviewHeight,
164 (prectl -> yTop - prectl -> yBottom) - 116);
165 AutoviewHeight = max(AutoviewHeight, 36);
166 prectl -> yBottom += (AutoviewHeight + 6);
167 }
168 }
[2]169 }
[133]170 return mr;
171 }
[2]172
[133]173 case WM_FORMATFRAME:
174 {
175 SHORT sCount, soldCount;
176 PSWP pswp, pswpClient, pswpNew;
177 SWP swpClient;
178 ULONG theight = 48L, dheight = 20, bheight = 20, sheight = 20;
179 LONG width, lastx;
[2]180
[133]181 sCount = (SHORT) ((oldproc) ? oldproc(hwnd, msg, mp1, mp2) :
182 PFNWPFrame(hwnd, msg, mp1, mp2));
183 soldCount = sCount;
184 /*
185 * Reformat the frame to "squeeze" the client
186 * and make room for status window sibling beneath
187 * and toolbar above (if toolbar's on) and userlists
188 * (if userlists are on).
189 */
[2]190
[133]191 pswp = (PSWP) mp1;
192 {
193 SHORT x;
[2]194
[133]195 for (x = 0; x < sCount; x++)
196 {
197 if (WinQueryWindowUShort(pswp -> hwnd, QWS_ID) == FID_CLIENT)
198 {
199 pswpClient = pswp;
200 break;
201 }
202 pswp++;
203 }
204 }
[2]205
[133]206 {
207 HPS hps;
208 POINTL aptl[TXTBOX_COUNT];
[2]209
[133]210 hps = WinGetPS(hwndStatus);
211 GpiQueryTextBox(hps, 6, "$`WjgT", TXTBOX_COUNT, aptl);
212 WinReleasePS(hps);
213 bheight = sheight = aptl[TXTBOX_TOPLEFT].y + 6;
214 hps = WinGetPS(hwndName);
215 GpiQueryTextBox(hps, 6, "$`WjgT", TXTBOX_COUNT, aptl);
216 WinReleasePS(hps);
217 bheight = aptl[TXTBOX_TOPLEFT].y + 6;
218 }
[2]219
[133]220 pswpNew = (PSWP) mp1 + soldCount;
221 *pswpNew = *pswpClient;
222 swpClient = *pswpClient;
223 pswpNew -> hwnd = hwndStatus;
224 pswpNew -> x = swpClient.x + 3;
225 pswpNew -> y = swpClient.y + 2;
226 width = (swpClient.cx / 2) - 6;
227 width = max(width, 10);
228 pswpNew -> cx = width - 6;
229 pswpNew -> cy = sheight;
230 pswpClient -> y = pswpNew -> y + pswpNew -> cy + 3;
231 pswpClient -> cy = (swpClient.cy - pswpNew -> cy) - 3;
232 sCount++;
[2]233
[133]234 pswpNew = (PSWP) mp1 + (soldCount + 1);
235 *pswpNew = *pswpClient;
236 pswpNew -> hwnd = hwndStatus2;
237 pswpNew -> x = width + 8;
238 pswpNew -> y = swpClient.y + 2;
239 pswpNew -> cx = width - 6;
240 pswpNew -> cy = sheight;
241 sCount++;
[2]242
[133]243 if (fToolbar)
244 {
245 if (fTextTools)
246 theight = 32L;
247 else if (!fToolTitles)
248 theight = 40L;
249 pswpNew = (PSWP) mp1 + (soldCount + 2);
250 *pswpNew = *pswpClient;
251 pswpNew -> hwnd = WinWindowFromID(hwnd, MAIN_TOOLS);
252 pswpNew -> x = swpClient.x + 2;
253 pswpNew -> y = (swpClient.y + swpClient.cy) - (theight - 2);
254 pswpNew -> cx = swpClient.cx - 4;
255 pswpNew -> cy = theight - 4;
256 pswpClient -> cy -= theight;
257 sCount++;
258 }
259 else
260 WinShowWindow(WinWindowFromID(hwnd, MAIN_TOOLS), FALSE);
[2]261
[133]262 ResizeDrives(WinWindowFromID(hwnd, MAIN_DRIVES),
263 pswpClient -> cx - 4);
264 pswpNew = (PSWP) mp1 + (soldCount + 2 + (fToolbar != FALSE));
265 *pswpNew = *pswpClient;
266 pswpNew -> hwnd = WinWindowFromID(hwnd, MAIN_DRIVES);
267 pswpNew -> x = swpClient.x + 2;
268 dheight += ((dheight - 2) * DriveLines);
269 pswpNew -> y = (swpClient.y + swpClient.cy) - (dheight - 2);
270 if (fToolbar)
271 pswpNew -> y -= theight;
272 pswpNew -> cx = swpClient.cx - 4;
273 pswpNew -> cy = dheight - 4;
274 pswpClient -> cy -= dheight;
275 pswpClient -> cy -= 2;
276 sCount++;
[2]277
[133]278 if (fAutoView)
279 {
280 pswpNew = (PSWP) mp1 + (soldCount + 3 + (fToolbar != FALSE));
281 *pswpNew = *pswpClient;
282 pswpNew -> hwnd = (fComments) ? hwndAutoMLE : hwndAutoview;
283 pswpNew -> x = pswpClient -> x + 3;
284 pswpNew -> y = pswpClient -> y + 3;
285 if (fMoreButtons)
286 pswpNew -> y += (bheight + 4);
287 pswpNew -> cx = pswpClient -> cx - 6;
288 AutoviewHeight = min(AutoviewHeight,
289 pswpClient -> cy - 116);
290 AutoviewHeight = max(AutoviewHeight, 36);
291 pswpNew -> cy = AutoviewHeight;
292 pswpClient -> y += (AutoviewHeight + 6);
293 pswpClient -> cy -= (AutoviewHeight + 6);
294 sCount++;
295 WinShowWindow((fComments) ? hwndAutoview : hwndAutoMLE, FALSE);
296 }
297 else
298 {
299 WinShowWindow(hwndAutoview, FALSE);
300 WinShowWindow(hwndAutoMLE, FALSE);
301 }
[2]302
[133]303 pswpNew = (PSWP) mp1 + (soldCount + 3 + (fToolbar != FALSE) +
304 (fAutoView != FALSE));
305 *pswpNew = *pswpClient;
306 pswpNew -> hwnd = WinWindowFromID(hwnd, MAIN_LED);
307 pswpNew -> x = (swpClient.x + swpClient.cx) - 12;
308 pswpNew -> y = swpClient.y;
309 pswpNew -> cx = 12;
310 pswpNew -> cy = 12;
311 sCount++;
[2]312
[133]313 pswpNew = (PSWP) mp1 + (soldCount + 4 + (fToolbar != FALSE) +
314 (fAutoView != FALSE));
315 *pswpNew = *pswpClient;
316 pswpNew -> hwnd = WinWindowFromID(hwnd, MAIN_LEDHDR);
317 pswpNew -> x = (swpClient.x + swpClient.cx) - 12;
318 pswpNew -> y = swpClient.y + 12;
319 pswpNew -> cx = 12;
320 pswpNew -> cy = sheight - 8;
321 sCount++;
[2]322
[133]323 pswpNew = (PSWP) mp1 + (soldCount + 5 + (fToolbar != FALSE) +
324 (fAutoView != FALSE));
325 *pswpNew = *pswpClient;
326 pswpNew -> hwnd = hwndName;
327 pswpNew -> x = swpClient.x + 3;
328 pswpNew -> y = swpClient.y + (sheight + 6);
329 pswpNew -> cx = ((swpClient.cx / 2) + (swpClient.cx / 5)) - 3;
330 lastx = pswpNew -> x + pswpNew -> cx;
331 pswpNew -> cy = bheight;
332 pswpClient -> y += (bheight + 4);
333 pswpClient -> cy -= (bheight + 4);
334 sCount++;
[2]335
[133]336 pswpNew = (PSWP) mp1 + (soldCount + 6 + (fToolbar != FALSE) +
337 (fAutoView != FALSE));
338 *pswpNew = *pswpClient;
339 pswpNew -> hwnd = hwndDate;
340 pswpNew -> x = lastx + 3;
341 pswpNew -> y = swpClient.y + (sheight + 6);
342 pswpNew -> cx = (swpClient.cx / 6) + (swpClient.cx / 16) - 3;
343 lastx = pswpNew -> x + pswpNew -> cx;
344 pswpNew -> cy = bheight;
345 sCount++;
[2]346
[133]347 pswpNew = (PSWP) mp1 + (soldCount + 7 + (fToolbar != FALSE) +
348 (fAutoView != FALSE));
349 *pswpNew = *pswpClient;
350 pswpNew -> hwnd = hwndAttr;
351 pswpNew -> x = lastx + 3;
352 pswpNew -> y = swpClient.y + (sheight + 6);
353 pswpNew -> cx = (swpClient.cx - pswpNew -> x) - 1;
354 pswpNew -> cy = bheight;
355 sCount++;
[2]356
[133]357 return MRFROMSHORT(sCount);
358 }
[2]359
[133]360 case WM_QUERYFRAMECTLCOUNT:
361 {
362 SHORT sCount;
[2]363
[133]364 sCount = (SHORT) ((oldproc) ? oldproc(hwnd, msg, mp1, mp2) :
365 PFNWPFrame(hwnd, msg, mp1, mp2));
366 sCount += 8;
367 if (fToolbar)
368 sCount++;
369 if (fAutoView)
370 sCount++;
371 return MRFROMSHORT(sCount);
372 }
[2]373
[133]374 case WM_CLOSE:
375 WinSendMsg(WinWindowFromID(hwnd, FID_CLIENT), msg, mp1, mp2);
376 return 0;
[2]377 }
[133]378 return (oldproc) ? oldproc(hwnd, msg, mp1, mp2) :
379 PFNWPFrame(hwnd, msg, mp1, mp2);
[2]380}
381
[178]382static MRESULT EXPENTRY MainWMCommand2(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[133]383{
[2]384 PERSON1DATA *pd;
385
386 SetShiftState();
[133]387 switch (SHORT1FROMMP(mp1))
388 {
389 case IDM_TOAUTOMLE:
390 case IDM_CLI:
391 case IDM_CREATETOOL:
392 case IDM_ABOUT:
393 case IDM_WINFULLSCREEN:
394 case IDM_DOSCOMMANDLINE:
395 case IDM_INIVIEWER:
396 case IDM_EDITASSOC:
397 case IDM_COMMANDLINE:
398 case IDM_KILLPROC:
399 case IDM_TOOLBAR:
400 case IDM_TEXTTOOLS:
401 case IDM_TOOLTITLES:
402 case IDM_TOOLLEFT:
403 case IDM_TOOLRIGHT:
404 case IDM_AUTOVIEWCOMMENTS:
405 case IDM_AUTOVIEWFILE:
406 case IDM_AUTOVIEW:
[2]407// case IDM_SYSINFO:
[133]408 case IDM_HIDENOTEWND:
409 case IDM_SHOWNOTEWND:
410 case IDM_INSTANT:
411 case IDM_HELPCONTEXT:
412 case IDM_HELPHINTS:
413 case IDM_HELPPIX:
414 case IDM_KILLME:
415 case IDM_EXIT:
416 case IDM_HELPTUTOR:
417 case IDM_HELPCONTENTS:
418 case IDM_HELPGENERAL:
419 case IDM_HELPKEYS:
420 case IDM_HELPMOUSE:
421 case IDM_HELP:
422 return MainWMCommand(hwnd, msg, mp1, mp2);
[2]423
[133]424 case IDM_REMAP:
425 WinDlgBox(HWND_DESKTOP,
426 hwnd,
427 RemapDlgProc,
428 FM3ModHandle,
429 MAP_FRAME,
430 NULL);
431 break;
[2]432
[299]433 case IDM_TWODIRS: // Menu action
434 case IDM_WINDOWDLG: // Toolbar action
435 pd = WinQueryWindowPtr(hwnd, QWL_USER + 4);
[133]436 if (pd)
437 {
[2]438
[133]439 WALK2 wa;
[2]440
[133]441 memset(&wa, 0, sizeof(wa));
442 wa.size = sizeof(wa);
443 *wa.szCurrentPath1 = 0;
444 WinSendMsg(pd -> hwndDir1,
445 UM_CONTAINERDIR,
446 MPFROMP(wa.szCurrentPath1),
447 MPVOID);
448 MakeValidDir(wa.szCurrentPath1);
449 *wa.szCurrentPath2 = 0;
450 WinSendMsg(pd -> hwndDir2,
451 UM_CONTAINERDIR,
452 MPFROMP(wa.szCurrentPath2),
453 MPVOID);
454 MakeValidDir(wa.szCurrentPath2);
455 if (WinDlgBox(HWND_DESKTOP,
456 hwnd,
457 WalkTwoSetDlgProc,
458 FM3ModHandle,
459 WALK2_FRAME,
460 MPFROMP(&wa)) &&
461 (IsRoot(wa.szCurrentPath1) ||
462 !IsFile(wa.szCurrentPath1)) &&
463 (IsRoot(wa.szCurrentPath2) ||
464 !IsFile(wa.szCurrentPath2)))
465 {
466 WinSendMsg(WinWindowFromID(WinWindowFromID(pd -> hwndDir1,
467 FID_CLIENT), DIR_CNR),
468 UM_SETDIR,
469 MPFROMP(wa.szCurrentPath1),
470 MPVOID);
471 WinSendMsg(WinWindowFromID(WinWindowFromID(pd -> hwndDir2,
472 FID_CLIENT), DIR_CNR),
473 UM_SETDIR,
474 MPFROMP(wa.szCurrentPath2),
475 MPVOID);
[2]476 }
[133]477 }
478 break;
[2]479
[133]480 case IDM_COMPARE:
[299]481 pd = WinQueryWindowPtr(hwnd, QWL_USER + 4);
[133]482 if (pd)
483 {
[2]484
[133]485 WALK2 wa;
[2]486
[133]487 memset(&wa, 0, sizeof(wa));
488 wa.size = sizeof(wa);
489 *wa.szCurrentPath1 = 0;
490 WinSendMsg(pd -> hwndDir1,
491 UM_CONTAINERDIR,
492 MPFROMP(wa.szCurrentPath1),
493 MPVOID);
494 MakeValidDir(wa.szCurrentPath1);
495 *wa.szCurrentPath2 = 0;
496 WinSendMsg(pd -> hwndDir2,
497 UM_CONTAINERDIR,
498 MPFROMP(wa.szCurrentPath2),
499 MPVOID);
500 MakeValidDir(wa.szCurrentPath2);
501 if (WinDlgBox(HWND_DESKTOP,
502 hwnd,
503 WalkTwoCmpDlgProc,
504 FM3ModHandle,
505 WALK2_FRAME,
506 MPFROMP(&wa)) &&
507 (IsRoot(wa.szCurrentPath1) ||
508 !IsFile(wa.szCurrentPath1)) &&
509 (IsRoot(wa.szCurrentPath2) ||
510 !IsFile(wa.szCurrentPath2)))
511 {
512 if (!*dircompare)
513 {
[2]514
[133]515 COMPARE *cmp;
[2]516
[133]517 cmp = malloc(sizeof(COMPARE));
518 if (cmp)
519 {
520 memset(cmp, 0, sizeof(COMPARE));
521 cmp -> size = sizeof(COMPARE);
522 strcpy(cmp -> leftdir, wa.szCurrentPath1);
523 strcpy(cmp -> rightdir, wa.szCurrentPath2);
524 cmp -> hwndParent = hwnd;
525 cmp -> dcd.hwndParent = hwnd;
526 WinDlgBox(HWND_DESKTOP,
527 HWND_DESKTOP,
528 CompareDlgProc,
529 FM3ModHandle,
530 COMP_FRAME,
531 MPFROMP(cmp));
532 }
533 }
534 else
535 {
[2]536
[133]537 CHAR *d1 = "\"", *d2 = "\"";
[2]538
[133]539 if (!needs_quoting(wa.szCurrentPath1))
540 *d1 = 0;
541 if (!needs_quoting(wa.szCurrentPath2))
542 *d2 = 0;
543 runemf2(SEPARATE,
544 HWND_DESKTOP,
545 NULL,
546 NULL,
547 "%s %s%s%s %s%s%s",
548 dircompare,
549 d1,
550 wa.szCurrentPath1,
551 d1,
552 d2,
553 wa.szCurrentPath2,
554 d2);
555 }
[2]556 }
[133]557 }
558 break;
[2]559
[133]560 case IDM_VTREE:
561 WinSendMsg(hwnd,
562 UM_SETUP2,
563 MPFROMLONG(1),
564 MPVOID);
565 if (hwndTree)
566 {
567 WinShowWindow(hwndTree, FALSE);
568 PostMsg(hwndTree,
569 WM_CLOSE,
570 MPVOID,
571 MPVOID);
572 hwndTree = (HWND) 0;
573 }
574 else
575 {
[2]576
[133]577 ULONG size = sizeof(ULONG);
[2]578
[133]579 hwndTree = StartTreeCnr(hwnd, 3);
580 PrfQueryProfileData(fmprof,
581 realappname,
582 "FM/4 TreeWidth",
583 (PVOID) & TreeWidth,
584 &size);
585 TreeWidth = max(TreeWidth, 80);
586 }
587 {
588 BOOL dummy = (hwndTree != (HWND) 0);
[2]589
590 PrfWriteProfileData(fmprof,
[133]591 realappname,
592 "FM/4 TreeUp",
593 (PVOID) & dummy,
594 sizeof(dummy));
595 }
596 PostMsg(hwnd,
597 UM_SIZE,
598 MPVOID,
599 MPVOID);
600 break;
[2]601
[133]602 case IDM_TILEBACKWARDS:
603 WinSendMsg(hwnd,
604 UM_SETUP2,
605 MPFROMLONG(1),
606 MPVOID);
607 fTileBackwards = (fTileBackwards) ? FALSE : TRUE;
608 PrfWriteProfileData(fmprof,
609 FM3Str,
610 "TileBackwards",
611 (PVOID) & fTileBackwards,
612 sizeof(BOOL));
613 PostMsg(hwnd,
614 UM_SIZE,
615 MPVOID,
616 MPVOID);
617 break;
[2]618
[133]619 case IDM_NEXTWINDOW:
620 case IDM_PREVWINDOW:
[299]621 pd = WinQueryWindowPtr(hwnd, QWL_USER + 4);
[133]622 if (pd)
623 {
[2]624
[133]625 HWND hwndFocus;
626
627 if (hwndTree)
628 {
629 if (pd -> hwndMax)
630 {
631 if (hwndTree == pd -> hwndCurr)
632 hwndFocus = pd -> hwndMax;
633 else
634 hwndFocus = hwndTree;
635 }
636 else
637 {
638 if (hwndTree == pd -> hwndCurr)
639 hwndFocus = (SHORT1FROMMP(mp1) == IDM_PREVWINDOW) ?
640 pd -> hwndDir1 : pd -> hwndDir2;
641 else if (pd -> hwndDir1 == pd -> hwndCurr)
642 hwndFocus = (SHORT1FROMMP(mp1) == IDM_PREVWINDOW) ?
643 pd -> hwndDir2 : hwndTree;
644 else
645 hwndFocus = (SHORT1FROMMP(mp1) == IDM_PREVWINDOW) ?
646 hwndTree : pd -> hwndDir1;
647 }
[2]648 }
[133]649 else
650 {
651 if (pd -> hwndMax)
652 hwndFocus = pd -> hwndMax;
653 else
654 hwndFocus = (pd -> hwndCurr == pd -> hwndDir1) ?
655 pd -> hwndDir2 : pd -> hwndDir1;
656 }
657 WinSetFocus(HWND_DESKTOP, hwndFocus);
658 }
659 break;
[2]660
[133]661 case IDM_NOTEBOOK:
662 WinDlgBox(HWND_DESKTOP,
663 hwnd,
664 CfgDlgProc,
665 FM3ModHandle,
666 CFG_FRAME,
667 MPFROMP(realappname));
668 PostMsg(hwnd,
669 UM_SIZE,
670 MPVOID,
671 MPVOID);
672 break;
[2]673
[133]674 case IDM_SEEALL:
675 case IDM_GREP:
676 case IDM_COLLECTOR:
677 {
678 HWND hwndC;
679
680 hwndC = StartCollector(HWND_DESKTOP, 4);
681 if (hwndC)
[2]682 {
[133]683 WinSetWindowPos(hwndC,
684 HWND_TOP,
685 0,
686 0,
687 0,
688 0,
689 SWP_SHOW | SWP_RESTORE | SWP_ACTIVATE);
690 if (SHORT1FROMMP(mp1) == IDM_GREP)
691 PostMsg(WinWindowFromID(hwndC, FID_CLIENT),
692 WM_COMMAND,
693 MPFROM2SHORT(IDM_GREP, 0),
694 MPVOID);
695 if (SHORT1FROMMP(mp1) == IDM_SEEALL)
696 PostMsg(WinWindowFromID(hwndC, FID_CLIENT),
697 WM_COMMAND,
698 MPFROM2SHORT(IDM_SEEALL, 0),
699 MPVOID);
[2]700 }
[133]701 }
702 break;
[2]703
[133]704 case IDM_EDITCOMMANDS:
705 EditCommands(hwnd);
706 break;
707
708 default:
709 if (SHORT1FROMMP(mp1) >= IDM_SWITCHSTART &&
710 SHORT1FROMMP(mp1) < IDM_SWITCHSTART + 499)
711 {
712 if (SHORT1FROMMP(mp1) - IDM_SWITCHSTART < numswitches)
713 WinSwitchToProgram(switches[SHORT1FROMMP(mp1) -
714 IDM_SWITCHSTART]);
[2]715 break;
[133]716 }
717 else if (SHORT1FROMMP(mp1) >= IDM_COMMANDSTART &&
718 SHORT1FROMMP(mp1) < IDM_QUICKTOOLSTART)
719 {
[2]720
[133]721 INT x;
722 HWND hwndCnr;
723
724 if (!cmdloaded)
725 load_commands();
726 hwndCnr = TopWindow(hwnd, (HWND) 0);
727 hwndCnr = (HWND) WinSendMsg(WinWindowFromID(hwndCnr, FID_CLIENT),
728 UM_CONTAINERHWND,
729 MPVOID,
730 MPVOID);
731 if (!hwndCnr)
732 {
733 DosBeep(50, 100);
734 break;
[2]735 }
[133]736 x = SHORT1FROMMP(mp1) - IDM_COMMANDSTART;
737 if (x >= 0)
738 {
739 x++;
740 RunCommand(hwndCnr, x);
741 if (fUnHilite)
742 {
[2]743
[133]744 PCNRITEM pci;
745 DIRCNRDATA *dcd = NULL;
[2]746
[133]747 if (WinQueryWindowUShort(hwndCnr, QWS_ID) != TREE_CNR)
748 dcd = INSTDATA(hwndCnr);
749 pci = (PCNRITEM) WinSendMsg(hwndCnr,
750 CM_QUERYRECORDEMPHASIS,
751 MPFROMLONG(CMA_FIRST),
752 MPFROMSHORT(CRA_CURSORED));
753 if (pci && (INT) pci != -1 &&
754 (pci -> rc.flRecordAttr & CRA_SELECTED))
755 UnHilite(hwnd,
756 TRUE,
757 ((dcd) ? &dcd -> lastselection : NULL));
758 }
[2]759 }
[133]760 }
761 else if (SHORT1FROMMP(mp1) >= IDM_QUICKTOOLSTART &&
762 SHORT1FROMMP(mp1) < IDM_QUICKTOOLSTART + 50)
763 {
764 if (!qtloaded)
765 load_quicktools();
766 if (quicktool[SHORT1FROMMP(mp1) - IDM_QUICKTOOLSTART])
767 {
768 if (fToolsChanged)
769 save_tools(NULL);
770 if (!load_tools(quicktool[SHORT1FROMMP(mp1) - IDM_QUICKTOOLSTART]))
771 load_tools(NULL);
772 else
773 {
774 strcpy(lasttoolbox, quicktool[SHORT1FROMMP(mp1) - IDM_QUICKTOOLSTART]);
775 PrfWriteProfileString(fmprof,
776 FM3Str,
777 "LastToolBox",
778 lasttoolbox);
779 }
780 BuildTools(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
781 MAIN_TOOLS),
782 TRUE);
[2]783 }
[133]784 }
785 else
786 {
[2]787
[133]788 HWND hwndActive;
[2]789
[133]790 hwndActive = TopWindow(hwnd, (HWND) 0);
791 if (hwndActive)
792 PostMsg(WinWindowFromID(hwndActive, FID_CLIENT),
793 msg,
794 mp1,
795 mp2);
796 }
797 break;
[2]798 }
799 return 0;
800}
801
[178]802static MRESULT EXPENTRY MainWMOnce2(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[133]803{
[2]804 PERSON1DATA *pd;
805
[133]806 switch (msg)
807 {
808 case WM_CREATE:
809 {
810 TID tid;
[2]811
[133]812 WinQueryWindowProcess(hwnd, &mypid, &tid);
813 }
814 hwndMain = hwnd;
815 WinSetWindowUShort(hwnd, QWL_USER + 8, 0);
816 WinSetWindowUShort(hwnd, QWL_USER + 10, 0);
817 WinSetWindowUShort(hwnd, QWL_USER + 12, 0);
818 WinSetWindowUShort(hwnd, QWL_USER + 16, 0);
819 if (_beginthread(MakeMainObjWin,
820 NULL,
821 245760,
822 MPVOID) == -1)
823 {
824 PostMsg(hwnd,
825 WM_CLOSE,
826 MPVOID,
827 MPVOID);
828 return 0;
829 }
830 else
831 DosSleep(64);
[2]832
[133]833 pd = malloc(sizeof(PERSON1DATA));
834 if (!pd)
835 WinDestroyWindow(WinQueryWindow(hwnd, QW_PARENT));
836 else
837 {
838 memset(pd, 0, sizeof(PERSON1DATA));
839 pd -> size = sizeof(PERSON1DATA);
[299]840 WinSetWindowPtr(hwnd, QWL_USER + 4, (PVOID)pd);
[133]841 }
842 {
843 SWP swp;
844 PFNWP oldproc;
[2]845
[133]846 /*
847 * create frame children (not client children, frame children)
848 */
849 DosSleep(1L);
850 WinQueryWindowPos(WinQueryWindow(hwnd, QW_PARENT), &swp);
851 oldproc = WinSubclassWindow(WinQueryWindow(hwnd, QW_PARENT),
852 (PFNWP) MainFrameWndProc2);
853 if (oldproc)
854 WinSetWindowPtr(WinQueryWindow(hwnd, QW_PARENT),
855 0,
856 (PVOID) oldproc);
857 CommonCreateMainChildren(hwnd, &swp);
[2]858
[133]859 {
860 HWND hwndMenu;
[2]861
[133]862 hwndMenu = WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
863 FID_MENU);
864 WinSetWindowULong(hwnd,
865 0,
866 hwndMenu);
867 SetConditionalCascade(hwndMenu,
868 IDM_COMMANDSMENU,
869 IDM_DOITYOURSELF);
870 SetConditionalCascade(hwndMenu,
871 IDM_TOOLSUBMENU,
872 IDM_TOOLBAR);
[2]873 }
[133]874 }
875 WinSetWindowText(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
876 FID_TITLEBAR),
877 "FM/2 Lite");
878 FixSwitchList(WinQueryWindow(hwnd, QW_PARENT),
879 NULL);
880 SetSysMenu(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
881 FID_SYSMENU));
882 break;
[2]883
[133]884 case UM_SETUP:
[299]885 pd = WinQueryWindowPtr(hwnd, QWL_USER + 4);
[133]886 if (pd)
887 {
[2]888
[133]889 CHAR s[CCHMAXPATH];
890 ULONG size;
891 DIRCNRDATA *dcd;
892 HWND hwndC;
893 BOOL dummy = TRUE;
[2]894
[133]895 size = sizeof(BOOL);
896 PrfQueryProfileData(fmprof,
897 realappname,
898 "FM/4 TreeUp",
899 (PVOID) & dummy,
900 &size);
901 if (dummy)
902 {
903 size = sizeof(ULONG);
904 hwndTree = StartTreeCnr(hwnd, 3);
905 PrfQueryProfileData(fmprof,
906 realappname,
907 "FM/4 TreeWidth",
908 (PVOID) & TreeWidth,
909 &size);
910 TreeWidth = max(TreeWidth, 80);
911 }
912 size = sizeof(BOOL);
913 if (PrfQueryProfileData(fmprof,
914 FM3Str,
915 "Toolbar",
916 &dummy,
917 &size) &&
918 size && !dummy)
919 WinSendMsg(hwnd,
920 WM_COMMAND,
921 MPFROM2SHORT(IDM_TOOLBAR, 0),
922 MPVOID);
[2]923
[133]924 size = sizeof(s);
925 *s = 0;
926 if (PrfQueryProfileData(fmprof,
927 realappname,
928 "FM/4 Dir1",
929 s,
930 &size) &&
931 *s)
932 MakeValidDir(s);
933 else
934 save_dir(s);
935 pd -> hwndLastDir = pd -> hwndCurr = pd -> hwndDir1 =
936 StartDirCnr(hwnd, s, (HWND) 0, 3);
937 size = sizeof(s);
938 *s = 0;
939 if (PrfQueryProfileData(fmprof,
940 realappname,
941 "FM/4 Dir2",
942 s,
943 &size) &&
944 *s)
945 MakeValidDir(s);
946 else
947 save_dir(s);
948 pd -> hwndDir2 = StartDirCnr(hwnd, s, (HWND) 0, 3);
949 WinSetFocus(HWND_DESKTOP,
950 pd -> hwndCurr);
[2]951
[133]952 hwndC = WinWindowFromID(pd -> hwndDir1, FID_CLIENT);
953 if (hwndC)
954 {
[299]955 dcd = WinQueryWindowPtr(WinWindowFromID(hwndC, DIR_CNR), QWL_USER);
[133]956 if (dcd)
957 {
958 size = sizeof(INT);
959 if (PrfQueryProfileData(fmprof,
960 realappname,
961 "FM/4 Dir1.Sort",
962 (PVOID) & dcd -> sortFlags,
963 &size) &&
964 size == sizeof(INT))
965 {
966 if (!dcd -> sortFlags)
967 dcd -> sortFlags = SORT_PATHNAME;
968 }
969 size = sizeof(MASK);
970 if (PrfQueryProfileData(fmprof,
971 realappname,
972 "FM/4 Dir1.Filter",
973 (PVOID) & dcd -> mask,
974 &size) &&
975 size)
976 {
977 if (*dcd -> mask.szMask)
978 WinSendMsg(WinWindowFromID(hwndC, DIR_CNR),
979 UM_FILTER,
980 MPFROMP(dcd -> mask.szMask),
981 MPVOID);
982 }
983 *(dcd -> mask.prompt) = 0;
984 size = sizeof(ULONG);
985 if (PrfQueryProfileData(fmprof,
986 realappname,
987 "FM/4 Dir1.View",
988 (PVOID) & dcd -> flWindowAttr,
989 &size) &&
990 size == sizeof(ULONG))
991 {
[2]992
[133]993 CNRINFO cnri;
[2]994
[133]995 memset(&cnri, 0, sizeof(CNRINFO));
996 cnri.cb = sizeof(CNRINFO);
997 if (WinSendMsg(WinWindowFromID(hwndC, DIR_CNR),
998 CM_QUERYCNRINFO,
999 MPFROMP(&cnri),
1000 MPFROMLONG(sizeof(CNRINFO))))
1001 {
1002 cnri.flWindowAttr = dcd -> flWindowAttr;
1003 WinSendMsg(WinWindowFromID(hwndC, DIR_CNR),
1004 CM_SETCNRINFO,
1005 MPFROMP(&cnri),
1006 MPFROMLONG(CMA_FLWINDOWATTR));
1007 }
1008 }
1009 }
1010 }
[2]1011
[133]1012 hwndC = WinWindowFromID(pd -> hwndDir2, FID_CLIENT);
1013 if (hwndC)
1014 {
[299]1015 dcd = WinQueryWindowPtr(WinWindowFromID(hwndC, DIR_CNR), QWL_USER);
[133]1016 if (dcd)
1017 {
1018 size = sizeof(INT);
1019 if (PrfQueryProfileData(fmprof,
1020 realappname,
1021 "FM/4 Dir2.Sort",
1022 (PVOID) & dcd -> sortFlags,
1023 &size) &&
1024 size == sizeof(INT))
1025 {
1026 if (!dcd -> sortFlags)
1027 dcd -> sortFlags = SORT_PATHNAME;
1028 }
1029 size = sizeof(MASK);
1030 if (PrfQueryProfileData(fmprof,
1031 realappname,
1032 "FM/4 Dir2.Filter",
1033 (PVOID) & dcd -> mask,
1034 &size) &&
1035 size)
1036 {
1037 if (*dcd -> mask.szMask)
1038 WinSendMsg(WinWindowFromID(hwndC, DIR_CNR),
1039 UM_FILTER,
1040 MPFROMP(dcd -> mask.szMask),
1041 MPVOID);
1042 }
1043 *(dcd -> mask.prompt) = 0;
1044 size = sizeof(ULONG);
1045 if (PrfQueryProfileData(fmprof,
1046 realappname,
1047 "FM/4 Dir2.View",
1048 (PVOID) & dcd -> flWindowAttr,
1049 &size) &&
1050 size == sizeof(ULONG))
1051 {
[2]1052
[133]1053 CNRINFO cnri;
[2]1054
[133]1055 memset(&cnri, 0, sizeof(CNRINFO));
1056 cnri.cb = sizeof(CNRINFO);
1057 if (WinSendMsg(WinWindowFromID(hwndC, DIR_CNR),
1058 CM_QUERYCNRINFO,
1059 MPFROMP(&cnri),
1060 MPFROMLONG(sizeof(CNRINFO))))
1061 {
1062 cnri.flWindowAttr = dcd -> flWindowAttr;
1063 WinSendMsg(WinWindowFromID(hwndC, DIR_CNR),
1064 CM_SETCNRINFO,
1065 MPFROMP(&cnri),
1066 MPFROMLONG(CMA_FLWINDOWATTR));
1067 }
1068 }
1069 }
[2]1070 }
[133]1071 }
1072 {
1073 ULONG which = 0, size = sizeof(ULONG);
1074
1075 if (PrfQueryProfileData(fmprof,
1076 realappname,
1077 "FM/4 Max",
1078 (PVOID) & which,
1079 &size) &&
1080 size == sizeof(ULONG) &&
1081 which)
[2]1082 {
[133]1083 PostMsg(hwnd,
1084 UM_MAXIMIZE,
1085 MPFROMLONG(((which == 1) ?
1086 pd -> hwndDir1 :
1087 pd -> hwndDir2)),
1088 MPVOID);
[2]1089 }
[133]1090 }
1091 PostMsg(hwnd,
1092 UM_SIZE,
1093 MPVOID,
1094 MPVOID);
1095 if (!hwndTree)
[2]1096 PostMsg(hwnd,
[246]1097 UM_BUILDDRIVEBAR,
[133]1098 MPVOID,
1099 MPVOID);
1100 load_tools(NULL);
1101 BuildTools(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
1102 MAIN_TOOLS),
1103 TRUE);
1104 fRunning = TRUE;
1105 return 0;
[2]1106
[133]1107 case WM_SAVEAPPLICATION:
1108 WinStoreWindowPos(FM2Str,
1109 "MainWindowPos2",
1110 WinQueryWindow(hwnd, QW_PARENT));
[299]1111 pd = WinQueryWindowPtr(hwnd, QWL_USER + 4);
[133]1112 if (pd)
1113 {
[2]1114
[133]1115 CHAR s[CCHMAXPATH];
1116 HWND hwndC;
1117 DIRCNRDATA *dcd;
1118 ULONG flWindowAttr;
[2]1119
[133]1120 *s = 0;
1121 WinSendMsg(pd -> hwndDir1,
1122 UM_CONTAINERDIR,
1123 MPFROMP(s),
1124 MPVOID);
1125 if (*s)
1126 {
1127 MakeValidDir(s);
1128 PrfWriteProfileString(fmprof,
1129 realappname,
1130 "FM/4 Dir1",
1131 s);
1132 }
1133 *s = 0;
1134 WinSendMsg(pd -> hwndDir2,
1135 UM_CONTAINERDIR,
1136 MPFROMP(s),
1137 MPVOID);
1138 if (*s)
1139 {
1140 MakeValidDir(s);
1141 PrfWriteProfileString(fmprof,
1142 realappname,
1143 "FM/4 Dir2",
1144 s);
1145 }
1146 flWindowAttr = (pd -> hwndMax == pd -> hwndDir1) ?
1147 1 :
1148 (pd -> hwndMax == pd -> hwndDir2) ?
1149 2 :
1150 0;
1151 PrfWriteProfileData(fmprof,
1152 realappname,
1153 "FM/4 Max",
1154 &flWindowAttr,
1155 sizeof(flWindowAttr));
1156 hwndC = WinWindowFromID(pd -> hwndDir1, FID_CLIENT);
1157 if (hwndC)
1158 {
[299]1159 dcd = WinQueryWindowPtr(WinWindowFromID(hwndC, DIR_CNR), QWL_USER);
[133]1160 if (dcd)
1161 {
1162 flWindowAttr = dcd -> flWindowAttr;
1163 if (!fLeaveTree && (flWindowAttr & CV_TREE))
1164 {
1165 flWindowAttr &= (~(CV_TREE | CV_ICON | CV_DETAIL | CV_TEXT));
1166 if (dcd -> lastattr)
1167 {
1168 if (dcd -> lastattr & CV_TEXT)
1169 flWindowAttr |= CV_TEXT;
1170 else if (dcd -> lastattr & CV_DETAIL)
1171 flWindowAttr |= CV_DETAIL;
1172 else if (dcd -> lastattr & CV_ICON)
1173 flWindowAttr |= CV_ICON;
1174 else
1175 flWindowAttr |= CV_NAME;
1176 }
1177 else
1178 flWindowAttr |= CV_NAME;
1179 }
1180 PrfWriteProfileData(fmprof,
1181 realappname,
1182 "FM/4 Dir1.Sort",
1183 (PVOID) & dcd -> sortFlags,
1184 sizeof(INT));
1185 PrfWriteProfileData(fmprof,
1186 realappname,
1187 "FM/4 Dir1.Filter",
1188 (PVOID) & dcd -> mask,
1189 sizeof(MASK));
1190 PrfWriteProfileData(fmprof,
1191 realappname,
1192 "FM/4 Dir1.View",
1193 (PVOID) & flWindowAttr,
1194 sizeof(ULONG));
1195 }
1196 }
[2]1197
[133]1198 hwndC = WinWindowFromID(pd -> hwndDir2, FID_CLIENT);
1199 if (hwndC)
1200 {
[299]1201 dcd = WinQueryWindowPtr(WinWindowFromID(hwndC, DIR_CNR), QWL_USER);
[133]1202 if (dcd)
1203 {
1204 flWindowAttr = dcd -> flWindowAttr;
1205 if (!fLeaveTree && (flWindowAttr & CV_TREE))
1206 {
1207 flWindowAttr &= (~(CV_TREE | CV_ICON | CV_DETAIL | CV_TEXT));
1208 if (dcd -> lastattr)
1209 {
1210 if (dcd -> lastattr & CV_TEXT)
1211 flWindowAttr |= CV_TEXT;
1212 else if (dcd -> lastattr & CV_DETAIL)
1213 flWindowAttr |= CV_DETAIL;
1214 else if (dcd -> lastattr & CV_ICON)
1215 flWindowAttr |= CV_ICON;
1216 else
1217 flWindowAttr |= CV_NAME;
1218 }
1219 else
1220 flWindowAttr |= CV_NAME;
1221 }
1222 PrfWriteProfileData(fmprof,
1223 realappname,
1224 "FM/4 Dir2.Sort",
1225 (PVOID) & dcd -> sortFlags,
1226 sizeof(INT));
1227 PrfWriteProfileData(fmprof,
1228 realappname,
1229 "FM/4 Dir2.Filter",
1230 (PVOID) & dcd -> mask,
1231 sizeof(MASK));
1232 PrfWriteProfileData(fmprof,
1233 realappname,
1234 "FM/4 Dir2.View",
1235 (PVOID) & flWindowAttr,
1236 sizeof(ULONG));
1237 }
[2]1238 }
[133]1239 }
1240 break;
[2]1241 }
[133]1242 return WinDefWindowProc(hwnd, msg, mp1, mp2);
[2]1243}
1244
[133]1245MRESULT EXPENTRY MainWndProc2(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1246{
[2]1247 PERSON1DATA *pd;
1248
[133]1249 switch (msg)
1250 {
1251 case WM_SAVEAPPLICATION:
1252 case UM_SETUP:
1253 case WM_CREATE:
1254 return MainWMOnce2(hwnd, msg, mp1, mp2);
[2]1255
[133]1256 case UM_THREADUSE:
1257 case UM_LOADFILE:
[246]1258 case UM_BUILDDRIVEBAR:
[133]1259 return CommonMainWndProc(hwnd, msg, mp1, mp2);
[2]1260
[133]1261 case UM_SETUP2:
[299]1262 pd = WinQueryWindowPtr(hwnd, QWL_USER + 4);
[133]1263 if (pd)
1264 {
1265 if (mp1)
1266 {
1267 if (pd -> hwndDir1 &&
1268 (!pd -> hwndMax || pd -> hwndMax == pd -> hwndDir1))
1269 BoxWindow(pd -> hwndDir1,
1270 (HPS) 0,
1271 CLR_PALEGRAY);
1272 if (pd -> hwndDir2 &&
1273 (!pd -> hwndMax || pd -> hwndMax == pd -> hwndDir2))
1274 BoxWindow(pd -> hwndDir2,
1275 (HPS) 0,
1276 CLR_PALEGRAY);
1277 if (hwndTree)
1278 BoxWindow(hwndTree,
1279 (HPS) 0,
1280 CLR_PALEGRAY);
[2]1281 }
[133]1282 else
1283 {
1284 if (hwndTree)
1285 BoxWindow(hwndTree,
1286 (HPS) 0,
1287 (pd -> hwndCurr == hwndTree) ?
1288 CLR_RED :
1289 CLR_WHITE);
1290 if (!pd -> hwndMax ||
1291 pd -> hwndMax == pd -> hwndDir1)
1292 BoxWindow(pd -> hwndDir1,
1293 (HPS) 0,
1294 (pd -> hwndDir1 == pd -> hwndCurr) ?
1295 CLR_RED :
1296 (pd -> hwndDir1 == pd -> hwndLastDir) ?
1297 CLR_DARKRED :
1298 CLR_PALEGRAY);
1299 if (!pd -> hwndMax ||
1300 pd -> hwndMax == pd -> hwndDir2)
1301 BoxWindow(pd -> hwndDir2,
1302 (HPS) 0,
1303 (pd -> hwndDir2 == pd -> hwndCurr) ?
1304 CLR_RED :
1305 (pd -> hwndDir2 == pd -> hwndLastDir) ?
1306 CLR_DARKRED :
1307 CLR_PALEGRAY);
1308 }
1309 }
1310 return 0;
[2]1311
[133]1312 case WM_BUTTON1DOWN:
1313 shiftstate = (SHORT2FROMMP(mp2) & (KC_ALT | KC_SHIFT | KC_CTRL));
1314 if (hwndTree)
1315 {
[2]1316
[133]1317 SWP swp;
[2]1318
[133]1319 WinQueryWindowPos(hwndTree, &swp);
1320 if (SHORT1FROMMP(mp1) > (swp.x + swp.cx) - 3 &&
1321 SHORT1FROMMP(mp1) < (swp.x + swp.cx) + 3)
1322 {
[2]1323
[133]1324 SWP swpC;
1325 TRACKINFO track;
[2]1326
[133]1327 WinQueryWindowPos(hwnd, &swpC);
1328 track.cxBorder = 4;
1329 track.cyBorder = 4;
1330 track.cxGrid = 1;
1331 track.cyGrid = 1;
1332 track.cxKeyboard = 8;
1333 track.cyKeyboard = 8;
1334 track.rclTrack.yBottom = 2;
1335 track.rclTrack.yTop = swpC.cy - 4;
1336 track.rclTrack.xLeft = 2;
1337 track.rclTrack.xRight = swp.x + swp.cx + 2;
1338 track.rclBoundary = track.rclTrack;
1339 track.rclBoundary.xRight = swpC.cx - 80;
1340 track.ptlMinTrackSize.x = 80;
1341 track.ptlMinTrackSize.y = swpC.cy - 4;
1342 track.ptlMaxTrackSize.x = swpC.cx - 80;
1343 track.ptlMaxTrackSize.y = swpC.cy - 4;
1344 track.fs = TF_RIGHT;
1345 if (WinTrackRect(hwnd, (HPS) 0, &track))
1346 {
1347 TreeWidth = track.rclTrack.xRight - track.rclTrack.xLeft;
1348 PrfWriteProfileData(fmprof,
1349 realappname,
1350 "FM/4 TreeWidth",
1351 &TreeWidth,
1352 sizeof(ULONG));
1353 WinSendMsg(hwnd,
1354 UM_SETUP2,
1355 MPFROMLONG(1),
1356 MPVOID);
1357 PostMsg(hwnd,
1358 UM_SIZE,
1359 MPVOID,
1360 MPVOID);
1361 }
1362 return (MRESULT) TRUE;
[2]1363 }
[133]1364 }
1365 break;
[2]1366
[133]1367 case WM_MOUSEMOVE:
1368 shiftstate = (SHORT2FROMMP(mp2) & (KC_ALT | KC_SHIFT | KC_CTRL));
1369 if (hwndTree)
1370 {
[2]1371
[133]1372 SWP swp;
[2]1373
[133]1374 if (WinQueryWindowPos(hwndTree, &swp))
1375 {
1376 if (SHORT1FROMMP(mp1) > (swp.x + swp.cx) - 3 &&
1377 SHORT1FROMMP(mp1) < (swp.x + swp.cx) + 3)
1378 WinSetPointer(HWND_DESKTOP, hptrEW);
1379 else
1380 WinSetPointer(HWND_DESKTOP, hptrArrow);
[2]1381 }
[133]1382 else
1383 WinSetPointer(HWND_DESKTOP, hptrArrow);
1384 }
1385 return (MRESULT) TRUE;
[2]1386
[133]1387 case WM_BUTTON1UP:
1388 case WM_BUTTON2UP:
1389 case WM_BUTTON3UP:
1390 case WM_CHAR:
1391 shiftstate = (SHORT1FROMMP(mp1) & (KC_SHIFT | KC_ALT | KC_CTRL));
1392 break;
[2]1393
[133]1394 case UM_ADVISEFOCUS:
[299]1395 pd = WinQueryWindowPtr(hwnd, QWL_USER + 4);
[133]1396 if (mp1 &&
1397 pd &&
1398 (HWND) mp1 != pd -> hwndCurr)
1399 {
1400 if ((HWND) mp1 != hwndTree)
1401 pd -> hwndLastDir = (HWND) mp1;
1402 pd -> hwndCurr = (HWND) mp1;
1403 WinSendMsg(hwnd,
1404 UM_SETUP2,
1405 MPVOID,
1406 MPVOID);
1407 }
1408 return 0;
[2]1409
[133]1410 case UM_MAXIMIZE:
1411 if (mp1)
1412 {
[299]1413 pd = WinQueryWindowPtr(hwnd, QWL_USER + 4);
[133]1414 if (pd)
1415 {
1416 WinSendMsg(hwnd,
1417 UM_SETUP2,
1418 MPFROMLONG(1),
1419 MPVOID);
1420 if (pd -> hwndMax != (HWND) mp1)
1421 {
1422 pd -> hwndMax = (HWND) mp1;
1423 WinSetFocus(HWND_DESKTOP,
1424 pd -> hwndMax);
1425 }
1426 else
1427 pd -> hwndMax = (HWND) 0;
1428 PostMsg(hwnd,
1429 UM_SIZE,
1430 MPVOID,
1431 MPVOID);
[2]1432 }
[133]1433 }
1434 return 0;
[2]1435
[133]1436 case WM_INITMENU:
1437 switch (SHORT1FROMMP(mp1))
1438 {
1439 case IDM_FILESMENU:
1440 case IDM_VIEWSMENU:
1441 case IDM_DETAILSSETUP:
1442 case IDM_COMMANDSMENU:
1443 case IDM_SORTSUBMENU:
[299]1444 pd = WinQueryWindowPtr(hwnd, QWL_USER + 4);
[133]1445 if (pd)
1446 WinSendMsg(pd -> hwndCurr,
1447 UM_INITMENU,
1448 mp1,
1449 mp2);
[2]1450 break;
[133]1451 case IDM_CONFIGMENU:
1452 WinCheckMenuItem((HWND) mp2,
1453 IDM_TOOLSUBMENU,
1454 fToolbar);
1455 WinCheckMenuItem((HWND) mp2,
1456 IDM_AUTOVIEW,
1457 fAutoView);
[2]1458 break;
[133]1459 case IDM_TOOLSUBMENU:
1460 WinCheckMenuItem((HWND) mp2,
1461 IDM_TOOLBAR,
1462 fToolbar);
1463 WinCheckMenuItem((HWND) mp2,
1464 IDM_TEXTTOOLS,
1465 fTextTools);
1466 WinCheckMenuItem((HWND) mp2,
1467 IDM_TOOLTITLES,
1468 fToolTitles);
1469 break;
1470 case IDM_WINDOWSMENU:
1471 WinCheckMenuItem((HWND) mp2,
1472 IDM_VTREE,
1473 (hwndTree != (HWND) 0));
1474 WinCheckMenuItem((HWND) mp2,
1475 IDM_TILEBACKWARDS,
1476 fTileBackwards);
1477 SetupWinList((HWND) mp2,
1478 hwnd,
1479 WinQueryWindow(hwnd, QW_PARENT));
1480 break;
1481 }
1482 break;
[2]1483
[133]1484 case WM_SETFOCUS:
1485 if (mp2)
1486 PostMsg(hwnd,
1487 UM_FOCUSME,
1488 MPVOID,
1489 MPVOID);
1490 break;
[2]1491
[133]1492 case UM_FOCUSME:
[299]1493 pd = WinQueryWindowPtr(hwnd, QWL_USER + 4);
[133]1494 if (pd)
1495 WinSetFocus(HWND_DESKTOP,
1496 pd -> hwndCurr);
1497 return 0;
[2]1498
[133]1499 case UM_RESCAN:
1500 return 0;
1501
1502 case UM_SIZE:
1503 {
1504 SWP swp;
1505
1506 if (WinQueryWindowPos(hwnd, &swp))
[2]1507 {
[133]1508 mp1 = MPFROM2SHORT(swp.cx, swp.cy);
1509 mp2 = MPFROM2SHORT(swp.cx, swp.cy);
[2]1510 }
[133]1511 else
1512 return 0;
1513 }
1514 /* intentional fallthru */
1515 case WM_SIZE:
[299]1516 pd = WinQueryWindowPtr(hwnd, QWL_USER + 4);
[133]1517 if (mp1 &&
1518 mp2 &&
1519 pd &&
1520 pd -> hwndDir1 &&
1521 pd -> hwndDir2)
1522 {
1523 if (hwndTree)
1524 WinSetWindowPos(hwndTree,
1525 HWND_TOP,
1526 2,
1527 2,
1528 TreeWidth - 4,
1529 SHORT2FROMMP(mp2) - 4,
1530 SWP_SHOW | SWP_MOVE | SWP_SIZE);
1531 else
1532 TreeWidth = 0;
1533 if (!pd -> hwndMax)
1534 {
1535 if (fTileBackwards)
1536 {
1537 WinSetWindowPos(pd -> hwndDir1, HWND_TOP,
1538 (((SHORT1FROMMP(mp2) - TreeWidth) / 2) +
1539 TreeWidth) + 2,
1540 2,
1541 ((SHORT1FROMMP(mp2) - TreeWidth) / 2) - 4,
1542 SHORT2FROMMP(mp2) - 4,
1543 SWP_SHOW | SWP_MOVE | SWP_SIZE);
1544 WinSetWindowPos(pd -> hwndDir2, HWND_TOP,
1545 TreeWidth + 2,
1546 2,
1547 ((SHORT1FROMMP(mp2) - TreeWidth) / 2) - 4,
1548 SHORT2FROMMP(mp2) - 4,
1549 SWP_SHOW | SWP_MOVE | SWP_SIZE);
1550 }
1551 else
1552 {
1553 WinSetWindowPos(pd -> hwndDir1, HWND_TOP,
1554 TreeWidth + 2,
1555 2,
1556 (SHORT1FROMMP(mp2) - TreeWidth) - 4,
1557 (SHORT2FROMMP(mp2) / 2) - 4,
1558 SWP_SHOW | SWP_MOVE | SWP_SIZE);
1559 WinSetWindowPos(pd -> hwndDir2, HWND_TOP,
1560 TreeWidth + 2,
1561 (SHORT2FROMMP(mp2) / 2) + 2,
1562 (SHORT1FROMMP(mp2) - TreeWidth) - 4,
1563 (SHORT2FROMMP(mp2) / 2) - 4,
1564 SWP_SHOW | SWP_MOVE | SWP_SIZE);
1565 }
1566 }
1567 else
1568 {
[2]1569
[133]1570 HWND hwndOther;
[2]1571
[133]1572 WinSetWindowPos(pd -> hwndMax, HWND_TOP,
1573 TreeWidth + 2,
1574 2,
1575 (SHORT1FROMMP(mp2) - TreeWidth) - 4,
1576 SHORT2FROMMP(mp2) - 4,
1577 SWP_SHOW | SWP_MOVE | SWP_SIZE);
1578 hwndOther = (pd -> hwndMax == pd -> hwndDir1) ?
1579 pd -> hwndDir2 : pd -> hwndDir1;
1580 WinSetWindowPos(hwndOther, HWND_BOTTOM, 0, 0, 0, 0, SWP_HIDE);
[2]1581 }
[133]1582 WinSendMsg(hwnd,
1583 UM_SETUP2,
1584 MPVOID,
1585 MPVOID);
1586 }
1587 if (msg == UM_SIZE)
[2]1588 return 0;
[133]1589 break;
[2]1590
[133]1591 case WM_ERASEBACKGROUND:
1592 WinFillRect((HPS) mp1,
1593 (PRECTL) mp2,
1594 0x00d0d0d0);
1595 return 0;
1596
1597 case WM_PAINT:
1598 {
1599 HPS hps;
1600 RECTL rcl;
1601
1602 hps = WinBeginPaint(hwnd,
1603 NULLHANDLE,
1604 NULL);
1605 if (hps)
[2]1606 {
[133]1607 WinQueryWindowRect(hwnd, &rcl);
1608 WinFillRect(hps,
1609 (PRECTL) & rcl,
1610 CLR_PALEGRAY);
1611 WinEndPaint(hps);
1612 WinSendMsg(hwnd,
1613 UM_SETUP2,
1614 MPVOID,
1615 MPVOID);
[2]1616 }
[133]1617 }
1618 break;
[2]1619
[133]1620 case UM_COMMAND:
1621 case WM_COMMAND:
1622 return MainWMCommand2(hwnd, msg, mp1, mp2);
[2]1623
[133]1624 case WM_CLOSE:
1625 fAmClosing = TRUE;
1626 WinSendMsg(hwnd,
1627 WM_SAVEAPPLICATION,
1628 MPVOID,
1629 MPVOID);
1630 CloseChildren(hwnd);
1631 PostMsg(hwnd,
1632 UM_CLOSE,
1633 MPVOID,
1634 MPVOID);
1635 DosSleep(1L);
1636 return 0;
[2]1637
[133]1638 case UM_CLOSE:
1639 WinDestroyWindow(WinQueryWindow(hwnd, QW_PARENT));
1640 return 0;
[2]1641
[133]1642 case WM_DESTROY:
1643 hwndMain = (HWND) 0;
[299]1644 pd = WinQueryWindowPtr(hwnd, QWL_USER + 4);
[133]1645 if (pd)
1646 free(pd);
1647 if (!PostMsg((HWND) 0,
1648 WM_QUIT,
1649 MPVOID,
1650 MPVOID))
1651 WinSendMsg((HWND) 0,
1652 WM_QUIT,
1653 MPVOID,
1654 MPVOID);
1655 break;
[2]1656 }
[133]1657 return WinDefWindowProc(hwnd, msg, mp1, mp2);
[2]1658}
1659
[133]1660HWND StartFM32(HAB hab, INT argc, CHAR ** argv)
1661{
1662 HWND hwndFrame, hwndClient;
1663 ULONG FrameFlags = FCF_TITLEBAR | FCF_SYSMENU |
1664 FCF_SIZEBORDER | FCF_MINMAX |
1665 FCF_ACCELTABLE | FCF_MENU |
1666 FCF_ICON | FCF_TASKLIST |
1667 FCF_NOBYTEALIGN;
[2]1668
1669 {
1670 INT x;
1671
[133]1672 for (x = 1; x < argc; x++)
1673 {
1674 if (*argv[x] == '+' && !argv[x][1])
1675 fLogFile = TRUE;
1676 if (*argv[x] == '-')
1677 {
1678 if (argv[x][1])
1679 strcpy(profile, &argv[x][1]);
[2]1680 }
1681 }
1682 }
1683 {
[133]1684 CHAR inipath[CCHMAXPATH], fullpath[CCHMAXPATH];
[2]1685 FILESTATUS3 fsa;
1686
[133]1687 if (PrfQueryProfileString(HINI_USERPROFILE,
1688 FM2Str,
1689 "Home",
1690 NULL,
1691 inipath,
1692 sizeof(inipath)))
1693 {
1694 if (!DosQueryPathInfo(inipath,
1695 FIL_STANDARD,
1696 &fsa,
1697 (ULONG) sizeof(fsa)))
1698 {
1699 if (fsa.attrFile & FILE_DIRECTORY)
1700 {
1701 if (DosQueryPathInfo(inipath,
1702 FIL_QUERYFULLNAME,
1703 fullpath,
1704 sizeof(fullpath)))
1705 strcpy(fullpath, inipath);
1706 switch_to(fullpath);
1707 }
[2]1708 }
1709 }
1710 }
1711
1712 hwndFrame = WinCreateStdWindow(HWND_DESKTOP,
[133]1713 WS_VISIBLE,
1714 &FrameFlags,
1715 GetPString(IDS_WCMAINWND2),
1716 NULL,
1717 WS_VISIBLE | WS_ANIMATE,
1718 FM3ModHandle,
1719 MAIN2_FRAME,
1720 &hwndClient);
1721 if (hwndFrame)
1722 {
1723 if (!WinRestoreWindowPos(FM2Str,
1724 "MainWindowPos2",
1725 hwndFrame))
1726 {
[2]1727
[133]1728 ULONG fl = SWP_MOVE | SWP_SIZE;
[2]1729 RECTL rcl;
[133]1730 ULONG icz = WinQuerySysValue(HWND_DESKTOP, SV_CYICON) * 3L;
1731 ULONG bsz = WinQuerySysValue(HWND_DESKTOP, SV_CYSIZEBORDER);
[2]1732
[133]1733 WinQueryWindowRect(HWND_DESKTOP, &rcl);
[2]1734 rcl.yBottom += icz;
1735 rcl.yTop -= bsz;
1736 rcl.xLeft += bsz;
1737 rcl.xRight -= bsz;
1738 WinSetWindowPos(hwndFrame,
[133]1739 HWND_TOP,
1740 rcl.xLeft,
1741 rcl.yBottom,
1742 rcl.xRight - rcl.xLeft,
1743 rcl.yTop - rcl.yBottom,
1744 fl);
[2]1745 }
[133]1746 if (fLogFile)
1747 LogFileHandle = _fsopen("FM2.LOG", "a+", SH_DENYWR);
1748 if (hwndHelp)
1749 WinAssociateHelpInstance(hwndHelp, hwndFrame);
[2]1750 PostMsg(hwndClient,
[133]1751 UM_SETUP,
1752 MPFROMLONG(argc),
1753 MPFROMP(argv));
[2]1754 }
1755 return hwndFrame;
1756}
Note: See TracBrowser for help on using the repository browser.