source: trunk/dll/mainwnd2.c@ 2

Last change on this file since 2 was 2, checked in by root, 23 years ago

Initial revision

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