source: trunk/dll/mainwnd2.c@ 551

Last change on this file since 551 was 551, checked in by Gregg Young, 19 years ago

Indentation cleanup

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