source: trunk/dll/mainwnd2.c@ 246

Last change on this file since 246 was 246, checked in by root, 20 years ago

Renames

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