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
RevLine 
[133]1
2/***********************************************************************
3
4 $Id: mainwnd2.c 246 2005-08-13 21:00:07Z root $
5
[178]6 fm/4 main window
[133]7
8 Copyright (c) 1993-98 M. Kimes
[160]9 Copyright (c) 2005 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
[133]14
15***********************************************************************/
16
[2]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>
[133]27
[2]28#include "fm3dll.h"
29#include "fm3dlg.h"
30#include "fm3str.h"
31#include "tools.h"
[133]32#include "datamin.h"
[2]33
[133]34typedef struct
35{
36 USHORT size;
37 USHORT dummy;
38 HWND hwndDir1;
39 HWND hwndDir2;
40 HWND hwndCurr;
41 HWND hwndLastDir;
42 HWND hwndMax;
[178]43} PERSON1DATA;
[2]44
45#pragma alloc_text(PERSON11,MainFrameWndProc2,MainWndProc2)
46#pragma alloc_text(PERSON12,StartFM32,MainWMOnce2)
47#pragma alloc_text(PERSON13,MainWMCommand2)
48
[178]49static MRESULT EXPENTRY MainFrameWndProc2(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[133]50{
51 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, 0);
[2]52
[133]53 switch (msg)
54 {
55 case WM_ADJUSTWINDOWPOS:
56 {
57 SWP *pswp;
[2]58
[133]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)
[2]63 {
[133]64 if (pswp -> fl & (SWP_HIDE | SWP_MINIMIZE))
65 {
[2]66
[133]67 SWP swp;
[2]68
[133]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 }
[2]78 }
[133]79 if (!fAmClosing)
80 {
81 if (pswp -> fl & (SWP_HIDE | SWP_MINIMIZE))
82 HideNote();
83 }
84 }
85 break;
[2]86
[133]87 case UM_FOCUSME:
88 CreateDataBar(HWND_DESKTOP, (ULONG) mp1);
89 return 0;
[2]90
[133]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;
[2]98
[133]99 case WM_CHAR:
100 shiftstate = (SHORT1FROMMP(mp1) & (KC_SHIFT | KC_ALT | KC_CTRL));
101 break;
[2]102
[133]103 case WM_CONTROL:
104 return WinSendMsg(WinWindowFromID(hwnd, FID_CLIENT), UM_CONTROL, mp1, mp2);
[2]105
[133]106 case WM_COMMAND:
107 return WinSendMsg(WinWindowFromID(hwnd, FID_CLIENT), msg, mp1, mp2);
[2]108
[133]109 case WM_CALCFRAMERECT:
110 {
111 MRESULT mr;
112 PRECTL prectl;
113 LONG sheight = 20, bheight = 20;
[2]114
[133]115 mr = (oldproc) ? oldproc(hwnd, msg, mp1, mp2) :
116 PFNWPFrame(hwnd, msg, mp1, mp2);
[2]117
[133]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 */
[2]123
[133]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];
[2]132
[133]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 }
[2]167 }
[133]168 return mr;
169 }
[2]170
[133]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;
[2]178
[133]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 */
[2]188
[133]189 pswp = (PSWP) mp1;
190 {
191 SHORT x;
[2]192
[133]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 }
[2]203
[133]204 {
205 HPS hps;
206 POINTL aptl[TXTBOX_COUNT];
[2]207
[133]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 }
[2]217
[133]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++;
[2]231
[133]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++;
[2]240
[133]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);
[2]259
[133]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++;
[2]275
[133]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 }
[2]300
[133]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++;
[2]310
[133]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++;
[2]320
[133]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++;
[2]333
[133]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++;
[2]344
[133]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++;
[2]354
[133]355 return MRFROMSHORT(sCount);
356 }
[2]357
[133]358 case WM_QUERYFRAMECTLCOUNT:
359 {
360 SHORT sCount;
[2]361
[133]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 }
[2]371
[133]372 case WM_CLOSE:
373 WinSendMsg(WinWindowFromID(hwnd, FID_CLIENT), msg, mp1, mp2);
374 return 0;
[2]375 }
[133]376 return (oldproc) ? oldproc(hwnd, msg, mp1, mp2) :
377 PFNWPFrame(hwnd, msg, mp1, mp2);
[2]378}
379
[178]380static MRESULT EXPENTRY MainWMCommand2(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[133]381{
[2]382 PERSON1DATA *pd;
383
384 SetShiftState();
[133]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:
[2]405// case IDM_SYSINFO:
[133]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);
[2]421
[133]422 case IDM_REMAP:
423 WinDlgBox(HWND_DESKTOP,
424 hwnd,
425 RemapDlgProc,
426 FM3ModHandle,
427 MAP_FRAME,
428 NULL);
429 break;
[2]430
[133]431 case IDM_TWODIRS:
432 pd = WinQueryWindowPtr(hwnd, 4);
433 if (pd)
434 {
[2]435
[133]436 WALK2 wa;
[2]437
[133]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);
[2]473 }
[133]474 }
475 break;
[2]476
[133]477 case IDM_COMPARE:
478 pd = WinQueryWindowPtr(hwnd, 4);
479 if (pd)
480 {
[2]481
[133]482 WALK2 wa;
[2]483
[133]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 {
[2]511
[133]512 COMPARE *cmp;
[2]513
[133]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 {
[2]533
[133]534 CHAR *d1 = "\"", *d2 = "\"";
[2]535
[133]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 }
[2]553 }
[133]554 }
555 break;
[2]556
[133]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 {
[2]573
[133]574 ULONG size = sizeof(ULONG);
[2]575
[133]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);
[2]586
587 PrfWriteProfileData(fmprof,
[133]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;
[2]598
[133]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;
[2]615
[133]616 case IDM_NEXTWINDOW:
617 case IDM_PREVWINDOW:
618 pd = WinQueryWindowPtr(hwnd, 4);
619 if (pd)
620 {
[2]621
[133]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 }
[2]645 }
[133]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;
[2]657
[133]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;
[2]670
[133]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)
[2]679 {
[133]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);
[2]697 }
[133]698 }
699 break;
[2]700
[133]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]);
[2]712 break;
[133]713 }
714 else if (SHORT1FROMMP(mp1) >= IDM_COMMANDSTART &&
715 SHORT1FROMMP(mp1) < IDM_QUICKTOOLSTART)
716 {
[2]717
[133]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;
[2]732 }
[133]733 x = SHORT1FROMMP(mp1) - IDM_COMMANDSTART;
734 if (x >= 0)
735 {
736 x++;
737 RunCommand(hwndCnr, x);
738 if (fUnHilite)
739 {
[2]740
[133]741 PCNRITEM pci;
742 DIRCNRDATA *dcd = NULL;
[2]743
[133]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 }
[2]756 }
[133]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);
[2]780 }
[133]781 }
782 else
783 {
[2]784
[133]785 HWND hwndActive;
[2]786
[133]787 hwndActive = TopWindow(hwnd, (HWND) 0);
788 if (hwndActive)
789 PostMsg(WinWindowFromID(hwndActive, FID_CLIENT),
790 msg,
791 mp1,
792 mp2);
793 }
794 break;
[2]795 }
796 return 0;
797}
798
[178]799static MRESULT EXPENTRY MainWMOnce2(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[133]800{
[2]801 PERSON1DATA *pd;
802
[133]803 switch (msg)
804 {
805 case WM_CREATE:
806 {
807 TID tid;
[2]808
[133]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);
[2]829
[133]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;
[2]842
[133]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);
[2]855
[133]856 {
857 HWND hwndMenu;
[2]858
[133]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);
[2]870 }
[133]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;
[2]880
[133]881 case UM_SETUP:
882 pd = WinQueryWindowPtr(hwnd, 4);
883 if (pd)
884 {
[2]885
[133]886 CHAR s[CCHMAXPATH];
887 ULONG size;
888 DIRCNRDATA *dcd;
889 HWND hwndC;
890 BOOL dummy = TRUE;
[2]891
[133]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);
[2]920
[133]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);
[2]948
[133]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 {
[2]989
[133]990 CNRINFO cnri;
[2]991
[133]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 }
[2]1008
[133]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 {
[2]1049
[133]1050 CNRINFO cnri;
[2]1051
[133]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 }
[2]1067 }
[133]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)
[2]1079 {
[133]1080 PostMsg(hwnd,
1081 UM_MAXIMIZE,
1082 MPFROMLONG(((which == 1) ?
1083 pd -> hwndDir1 :
1084 pd -> hwndDir2)),
1085 MPVOID);
[2]1086 }
[133]1087 }
1088 PostMsg(hwnd,
1089 UM_SIZE,
1090 MPVOID,
1091 MPVOID);
1092 if (!hwndTree)
[2]1093 PostMsg(hwnd,
[246]1094 UM_BUILDDRIVEBAR,
[133]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;
[2]1103
[133]1104 case WM_SAVEAPPLICATION:
1105 WinStoreWindowPos(FM2Str,
1106 "MainWindowPos2",
1107 WinQueryWindow(hwnd, QW_PARENT));
1108 pd = WinQueryWindowPtr(hwnd, 4);
1109 if (pd)
1110 {
[2]1111
[133]1112 CHAR s[CCHMAXPATH];
1113 HWND hwndC;
1114 DIRCNRDATA *dcd;
1115 ULONG flWindowAttr;
[2]1116
[133]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 }
[2]1194
[133]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 }
[2]1235 }
[133]1236 }
1237 break;
[2]1238 }
[133]1239 return WinDefWindowProc(hwnd, msg, mp1, mp2);
[2]1240}
1241
[133]1242MRESULT EXPENTRY MainWndProc2(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1243{
[2]1244 PERSON1DATA *pd;
1245
[133]1246 switch (msg)
1247 {
1248 case WM_SAVEAPPLICATION:
1249 case UM_SETUP:
1250 case WM_CREATE:
1251 return MainWMOnce2(hwnd, msg, mp1, mp2);
[2]1252
[133]1253 case UM_THREADUSE:
1254 case UM_LOADFILE:
[246]1255 case UM_BUILDDRIVEBAR:
[133]1256 return CommonMainWndProc(hwnd, msg, mp1, mp2);
[2]1257
[133]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);
[2]1278 }
[133]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;
[2]1308
[133]1309 case WM_BUTTON1DOWN:
1310 shiftstate = (SHORT2FROMMP(mp2) & (KC_ALT | KC_SHIFT | KC_CTRL));
1311 if (hwndTree)
1312 {
[2]1313
[133]1314 SWP swp;
[2]1315
[133]1316 WinQueryWindowPos(hwndTree, &swp);
1317 if (SHORT1FROMMP(mp1) > (swp.x + swp.cx) - 3 &&
1318 SHORT1FROMMP(mp1) < (swp.x + swp.cx) + 3)
1319 {
[2]1320
[133]1321 SWP swpC;
1322 TRACKINFO track;
[2]1323
[133]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;
[2]1360 }
[133]1361 }
1362 break;
[2]1363
[133]1364 case WM_MOUSEMOVE:
1365 shiftstate = (SHORT2FROMMP(mp2) & (KC_ALT | KC_SHIFT | KC_CTRL));
1366 if (hwndTree)
1367 {
[2]1368
[133]1369 SWP swp;
[2]1370
[133]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);
[2]1378 }
[133]1379 else
1380 WinSetPointer(HWND_DESKTOP, hptrArrow);
1381 }
1382 return (MRESULT) TRUE;
[2]1383
[133]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;
[2]1390
[133]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;
[2]1406
[133]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);
[2]1429 }
[133]1430 }
1431 return 0;
[2]1432
[133]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);
[2]1447 break;
[133]1448 case IDM_CONFIGMENU:
1449 WinCheckMenuItem((HWND) mp2,
1450 IDM_TOOLSUBMENU,
1451 fToolbar);
1452 WinCheckMenuItem((HWND) mp2,
1453 IDM_AUTOVIEW,
1454 fAutoView);
[2]1455 break;
[133]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;
[2]1480
[133]1481 case WM_SETFOCUS:
1482 if (mp2)
1483 PostMsg(hwnd,
1484 UM_FOCUSME,
1485 MPVOID,
1486 MPVOID);
1487 break;
[2]1488
[133]1489 case UM_FOCUSME:
1490 pd = WinQueryWindowPtr(hwnd, 4);
1491 if (pd)
1492 WinSetFocus(HWND_DESKTOP,
1493 pd -> hwndCurr);
1494 return 0;
[2]1495
[133]1496 case UM_RESCAN:
1497 return 0;
1498
1499 case UM_SIZE:
1500 {
1501 SWP swp;
1502
1503 if (WinQueryWindowPos(hwnd, &swp))
[2]1504 {
[133]1505 mp1 = MPFROM2SHORT(swp.cx, swp.cy);
1506 mp2 = MPFROM2SHORT(swp.cx, swp.cy);
[2]1507 }
[133]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 {
[2]1566
[133]1567 HWND hwndOther;
[2]1568
[133]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);
[2]1578 }
[133]1579 WinSendMsg(hwnd,
1580 UM_SETUP2,
1581 MPVOID,
1582 MPVOID);
1583 }
1584 if (msg == UM_SIZE)
[2]1585 return 0;
[133]1586 break;
[2]1587
[133]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)
[2]1603 {
[133]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);
[2]1613 }
[133]1614 }
1615 break;
[2]1616
[133]1617 case UM_COMMAND:
1618 case WM_COMMAND:
1619 return MainWMCommand2(hwnd, msg, mp1, mp2);
[2]1620
[133]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;
[2]1634
[133]1635 case UM_CLOSE:
1636 WinDestroyWindow(WinQueryWindow(hwnd, QW_PARENT));
1637 return 0;
[2]1638
[133]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;
[2]1653 }
[133]1654 return WinDefWindowProc(hwnd, msg, mp1, mp2);
[2]1655}
1656
[133]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;
[2]1665
1666 {
1667 INT x;
1668
[133]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]);
[2]1677 }
1678 }
1679 }
1680 {
[133]1681 CHAR inipath[CCHMAXPATH], fullpath[CCHMAXPATH];
[2]1682 FILESTATUS3 fsa;
1683
[133]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 }
[2]1705 }
1706 }
1707 }
1708
1709 hwndFrame = WinCreateStdWindow(HWND_DESKTOP,
[133]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 {
[2]1724
[133]1725 ULONG fl = SWP_MOVE | SWP_SIZE;
[2]1726 RECTL rcl;
[133]1727 ULONG icz = WinQuerySysValue(HWND_DESKTOP, SV_CYICON) * 3L;
1728 ULONG bsz = WinQuerySysValue(HWND_DESKTOP, SV_CYSIZEBORDER);
[2]1729
[133]1730 WinQueryWindowRect(HWND_DESKTOP, &rcl);
[2]1731 rcl.yBottom += icz;
1732 rcl.yTop -= bsz;
1733 rcl.xLeft += bsz;
1734 rcl.xRight -= bsz;
1735 WinSetWindowPos(hwndFrame,
[133]1736 HWND_TOP,
1737 rcl.xLeft,
1738 rcl.yBottom,
1739 rcl.xRight - rcl.xLeft,
1740 rcl.yTop - rcl.yBottom,
1741 fl);
[2]1742 }
[133]1743 if (fLogFile)
1744 LogFileHandle = _fsopen("FM2.LOG", "a+", SH_DENYWR);
1745 if (hwndHelp)
1746 WinAssociateHelpInstance(hwndHelp, hwndFrame);
[2]1747 PostMsg(hwndClient,
[133]1748 UM_SETUP,
1749 MPFROMLONG(argc),
1750 MPFROMP(argv));
[2]1751 }
1752 return hwndFrame;
1753}
Note: See TracBrowser for help on using the repository browser.