source: trunk/dll/mainwnd2.c@ 201

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

Comments and localize code

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