source: trunk/dll/mainwnd.c@ 280

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

Renames and comments

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 157.5 KB
RevLine 
[33]1
2/***********************************************************************
3
4 $Id: mainwnd.c 260 2005-08-16 15:39:18Z root $
5
[178]6 fm/2 main window
[33]7
8 Copyright (c) 1993-98 M. Kimes
[162]9 Copyright (c) 2001, 2005 Steven H. Levine
[33]10
[130]11 11 Jun 02 SHL Drop obsolete xor code
12 16 Oct 02 SHL Handle large partitions
13 01 Aug 04 SHL Rework lstrip/rstrip usage
14 23 May 05 SHL Use QWL_USER
[133]15 23 May 05 SHL Use datamin.h
[162]16 25 May 05 SHL Use ULONGLONG and CommaFmtULL
[178]17 26 May 05 SHL Comments and localize code
[186]18 05 Jun 05 SHL Use QWL_USER
[200]19 06 Jun 05 SHL Rework MainWMCommand for VAC3.65 compat
[260]20 13 Aug 05 SHL Renames and comments
[33]21
22***********************************************************************/
23
[2]24#define INCL_DOS
25#define INCL_WIN
26#define INCL_WINHELP
27#define INCL_GPI
[162]28#define INCL_LONGLONG
29#include <os2.h>
[2]30
31#include <stdarg.h>
32#include <stdio.h>
33#include <stdlib.h>
34#include <string.h>
35#include <ctype.h>
36#include <share.h>
[133]37
[2]38#include "fm3dll.h"
39#include "fm3dlg.h"
40#include "fm3str.h"
41#include "tools.h"
[133]42#include "datamin.h"
[2]43
44#pragma data_seg(DATA1)
45#pragma alloc_text(MISC8,SetToggleChecks,FindDirCnrByName,TopWindow)
46#pragma alloc_text(MISC8,TopWindowName,CountDirCnrs)
47#pragma alloc_text(MAINWND,AdjustSizeOfClient,FillClient,ChildButtonProc)
48#pragma alloc_text(MAINWND,ToolBackProc,StatusProc)
49#pragma alloc_text(MAINWND,MoveChildrenAwayFromTree,ArrangeIcons,NextChild)
50#pragma alloc_text(MAINWND,ChildFrameButtonProc)
51#pragma alloc_text(MAINWND2,CloseChildren,CountChildren,GetNextWindowPos)
52#pragma alloc_text(MAINWND2,CascadeChildren,TileChildren,ResizeChildren)
53#pragma alloc_text(MAINWND2,MinResChildren,MainFrameWndProc,MainWndProc)
54#pragma alloc_text(MAINWND2,DropDownListProc)
55#pragma alloc_text(MAINWND3,RestoreDirCnrState,SaveDirCnrState)
56#pragma alloc_text(MAINWND3,CloseDirCnrChildren,TransformSwp)
57#pragma alloc_text(MAINWND3,ResizeTools,BuildTools,CommandLineProc)
[260]58#pragma alloc_text(MAINWND4,DriveProc,DriveBackProc,BuildDriveBarButtons,ResizeDrives)
[2]59#pragma alloc_text(MAINWND4,LEDProc,IdealButtonProc)
60#pragma alloc_text(MAINWND5,MainWMOnce)
61#pragma alloc_text(MAINWND6,MainWMCommand)
62#pragma alloc_text(BUBBLE,MakeBubble,BubbleProc,BubbleHelp)
63#pragma alloc_text(MAINOBJ,MainObjectWndProc,MakeMainObjWin)
64
[178]65static USHORT firsttool = 0;
[2]66
[200]67static BOOL CloseDirCnrChildren(HWND hwndClient);
68static BOOL RestoreDirCnrState(HWND hwndClient, CHAR * name, BOOL noview);
[2]69
[178]70static MRESULT EXPENTRY MainObjectWndProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[133]71{
72 switch (msg)
73 {
74 case UM_SETUP:
75 case UM_SETUP2:
76 case UM_SETUP3:
77 case UM_SETUP4:
78 case UM_SETUP5:
79 /*
80 * feed setup messages to main window
81 */
82 PostMsg(hwndMain, msg, mp1, mp2);
83 return 0;
[2]84
[133]85 case UM_SETUP6:
86 /*
87 * handle bubble help requests from drive bar buttons
88 */
89 {
90 char dv[3], d;
91 HWND hwndB = (HWND) mp1;
92 USHORT id;
[2]93
[133]94 id = WinQueryWindowUShort(hwndB, QWS_ID);
95 *dv = 0;
96 WinQueryWindowText(WinWindowFromID(WinQueryWindow(hwndB, QW_PARENT),
97 id + 50),
98 sizeof(dv),
99 dv);
100 d = toupper(*dv);
101 if (isalpha(d) && d > 'B' &&
102 !(driveflags[d - 'A'] & (DRIVE_CDROM | DRIVE_INVALID |
103 DRIVE_SLOW)) &&
104 (!hwndBubble ||
105 WinQueryWindowULong(hwndBubble, QWL_USER) != hwndB) &&
106 !WinQueryCapture(HWND_DESKTOP))
[2]107 {
108
[133]109 FSALLOCATE fsa;
[162]110 CHAR s[90], szQty[38];
[133]111 ULONG ulPctFree;
[162]112 ULONGLONG ullFreeQty;
[2]113
[133]114 if (!DosQueryFSInfo((d - 'A') + 1,
115 FSIL_ALLOC,
116 &fsa,
117 sizeof(FSALLOCATE)))
118 {
[162]119 ullFreeQty = (ULONGLONG)fsa.cUnitAvail *
[133]120 (fsa.cSectorUnit * fsa.cbSector);
121 ulPctFree = (fsa.cUnit && fsa.cUnitAvail) ?
122 (fsa.cUnitAvail * 100) / fsa.cUnit : 0;
[162]123 CommaFmtULL(szQty,
124 sizeof(szQty),
[200]125 ullFreeQty, ' ');
[133]126 sprintf(s,
[162]127 "%s (%lu%%) free",
[133]128 szQty,
129 ulPctFree);
130 }
131 if ((!hwndBubble ||
132 WinQueryWindowULong(hwndBubble, QWL_USER) != hwndB) &&
133 !WinQueryCapture(HWND_DESKTOP))
134 WinSendMsg(hwndB,
135 UM_SETUP6,
136 MPFROMP(s),
137 MPVOID);
[2]138 }
[133]139 }
140 return 0;
[2]141
[133]142 case UM_SETDIR:
143 {
144 CHAR s[8] = " :\\OS2";
145 ULONG bd;
[2]146
[133]147 if (DosQuerySysInfo(QSV_BOOT_DRIVE,
148 QSV_BOOT_DRIVE,
149 (PVOID) & bd,
150 (ULONG) sizeof(ULONG)))
151 bd = 3L;
152 *s = (CHAR) bd + '@';
153 WinSendMsg(hwndMain,
154 UM_SETDIR,
155 MPFROMP(s),
156 MPFROMLONG(1L));
157 if (!mp1)
158 {
159 s[3] = 0;
160 WinSendMsg(hwndMain,
161 UM_SETDIR,
162 MPFROMP(s),
163 MPVOID);
164 }
165 PostMsg(MainObjectHwnd,
166 UM_RESTORE,
167 MPFROMLONG(1L),
168 MPFROMLONG(1L));
169 }
170 return 0;
[2]171
[133]172 case UM_RESTORE:
173 if (mp2)
174 {
175 switch ((ULONG) mp2)
176 {
177 case 1:
178 TileChildren(hwndMain, TRUE);
179 break;
180 case 2:
181 CloseDirCnrChildren(hwndMain);
182 break;
183 }
184 }
185 else
186 {
187 fNoTileUpdate = TRUE;
188 WinEnableWindow(WinQueryWindow(hwndMain, QW_PARENT), FALSE);
189 RestoreDirCnrState(hwndMain, (char *) mp1, FALSE);
190 WinEnableWindow(WinQueryWindow(hwndMain, QW_PARENT), TRUE);
191 fNoTileUpdate = FALSE;
192 if (mp1)
193 free((char *) mp1);
194 if (fAutoTile)
195 TileChildren(hwndMain, TRUE);
196 }
197 return 0;
[2]198
[133]199 case UM_NOTIFY:
200 /*
201 * bring up notify messages for various windows
202 */
203 if (mp1)
204 return MRFROMLONG(DoNotify((char *) mp1));
205 return 0;
[2]206
[133]207 case WM_DESTROY:
208 if (!PostMsg((HWND) 0, WM_QUIT, MPVOID, MPVOID))
209 WinSendMsg((HWND) 0, WM_QUIT, MPVOID, MPVOID);
210 break;
211 }
212 return WinDefWindowProc(hwnd, msg, mp1, mp2);
[2]213}
214
[133]215VOID MakeMainObjWin(VOID * args)
216{
217 HAB hab2;
218 HMQ hmq2;
219 QMSG qmsg2;
[2]220
[133]221 priority_bumped();
222 hab2 = WinInitialize(0);
223 if (hab2)
224 {
225 hmq2 = WinCreateMsgQueue(hab2, 128);
226 if (hmq2)
227 {
228 DosError(FERR_DISABLEHARDERR);
229 WinRegisterClass(hab2,
230 GetPString(IDS_WCOBJECTWINDOW),
231 MainObjectWndProc,
232 0,
233 sizeof(PVOID));
234 MainObjectHwnd = WinCreateWindow(HWND_OBJECT,
235 GetPString(IDS_WCOBJECTWINDOW),
236 (PSZ) NULL,
237 0,
238 0L,
239 0L,
240 0L,
241 0L,
242 0L,
[69]243 HWND_TOP,
244 OBJ_FRAME,
[133]245 NULL,
246 NULL);
247 if (MainObjectHwnd)
248 {
249 WinSetWindowPtr(MainObjectHwnd, QWL_USER, args);
250 while (WinGetMsg(hab2, &qmsg2, (HWND) 0, 0, 0))
251 WinDispatchMsg(hab2, &qmsg2);
252 WinDestroyWindow(MainObjectHwnd);
253 }
254 WinDestroyMsgQueue(hmq2);
255 }
256 WinTerminate(hab2);
257 }
[2]258}
259
[178]260static MRESULT EXPENTRY IdealButtonProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[133]261{
262 switch (msg)
263 {
264 case WM_MOUSEMOVE:
265 BubbleHelp(hwnd,
266 TRUE,
267 FALSE,
268 FALSE,
269 GetPString(IDS_IDEALBUTTONHELP));
270 break;
271 }
272 return PFNWPButton(hwnd, msg, mp1, mp2);
[2]273}
274
[133]275HWND TopWindow(HWND hwndParent, HWND exclude)
276{
277 HENUM henum;
278 HWND hwndC = (HWND) 0;
279 USHORT id;
[2]280
[133]281 if (hwndParent)
282 {
283 henum = WinBeginEnumWindows(hwndMain);
284 while ((hwndC = WinGetNextWindow(henum)) != NULLHANDLE)
285 {
286 if (hwndC != exclude)
287 {
288 id = WinQueryWindowUShort(hwndC, QWS_ID);
289 if (id)
290 break;
291 }
292 }
293 WinEndEnumWindows(henum);
294 }
295 return hwndC;
[2]296}
297
[133]298HWND TopWindowName(HWND hwndParent, HWND exclude, CHAR * ret)
299{
300 HENUM henum;
301 HWND hwndC = (HWND) 0, hwndDir, hwndClient;
302 USHORT id;
303 PCNRITEM pci = NULL;
[2]304
[133]305 if (ret)
306 {
307 *ret = 0;
308 if (hwndParent)
309 {
310 henum = WinBeginEnumWindows(hwndMain);
311 while ((hwndC = WinGetNextWindow(henum)) != NULLHANDLE)
312 {
[2]313// saymsg(MB_ENTER,HWND_DESKTOP,DEBUG_STRING,"Tree = %lu\rExclude = %lu\rFound = %lu",hwndTree,exclude,hwndC);
[133]314 if (hwndC != exclude &&
315 hwndC != hwndTree)
316 {
317 id = WinQueryWindowUShort(hwndC, QWS_ID);
318 if (id)
319 {
320 hwndClient = WinWindowFromID(hwndC, FID_CLIENT);
321 if (hwndClient)
322 {
323 hwndDir = WinWindowFromID(hwndClient, DIR_CNR);
324 if (hwndDir)
325 {
326 if (fLookInDir)
327 {
328 pci = (PCNRITEM) WinSendMsg(hwndDir,
329 CM_QUERYRECORDEMPHASIS,
330 MPFROMLONG(CMA_FIRST),
331 MPFROMSHORT(CRA_CURSORED));
332 if (pci &&
333 (INT) pci != -1)
334 break;
335 }
336 if (WinSendMsg(hwndClient,
337 UM_CONTAINERDIR,
338 MPFROMP(ret),
339 MPVOID))
340 {
341 MakeValidDir(ret);
[2]342// saymsg(MB_ENTER,HWND_DESKTOP,DEBUG_STRING,"Tree = %lu\rExclude = %lu\rFound = %lu\r\"%s\"",hwndTree,exclude,hwndC,ret);
[133]343 WinEndEnumWindows(henum);
344 return hwndC;
[2]345 }
[133]346 }
347 }
348 }
[2]349 }
[133]350 }
351 WinEndEnumWindows(henum);
352 if (!pci ||
353 (INT) pci == -1)
354 {
355 hwndC = hwndTree;
356 pci = (PCNRITEM) WinSendMsg(WinWindowFromID(WinWindowFromID(
357 hwndTree,
358 FID_CLIENT),
359 TREE_CNR),
360 CM_QUERYRECORDEMPHASIS,
361 MPFROMLONG(CMA_FIRST),
362 MPFROMSHORT(CRA_CURSORED));
363 }
364 if (pci &&
365 (INT) pci != -1)
366 {
367 strcpy(ret, pci -> szFileName);
368 MakeValidDir(ret);
369 }
370 else
371 save_dir2(ret);
372 }
373 }
374 return hwndC;
[2]375}
376
[133]377ULONG CountDirCnrs(HWND hwndParent)
378{
[2]379 HENUM henum;
[133]380 HWND hwndF = (HWND) 0, hwndC, hwndDir;
[2]381 ULONG ret = 0;
382
383 henum = WinBeginEnumWindows(hwndParent);
[133]384 while ((hwndF = WinGetNextWindow(henum)) != NULLHANDLE)
385 {
386 hwndC = WinWindowFromID(hwndF, FID_CLIENT);
387 if (hwndC)
388 {
389 hwndDir = WinWindowFromID(hwndC, DIR_CNR);
390 if (hwndDir)
391 ret++;
[2]392 }
393 }
394 WinEndEnumWindows(henum);
395 return ret;
396}
397
[133]398HWND FindDirCnrByName(CHAR * directory, BOOL restore)
399{
400 HENUM henum;
401 HWND hwndF = (HWND) 0, hwndC, hwndDir;
402 CHAR retstr[CCHMAXPATH];
[2]403
[133]404 if (hwndMain)
[69]405 {
406 henum = WinBeginEnumWindows(hwndMain);
[133]407 while ((hwndF = WinGetNextWindow(henum)) != NULLHANDLE)
[69]408 {
[133]409 hwndC = WinWindowFromID(hwndF, FID_CLIENT);
410 if (hwndC)
[69]411 {
[133]412 hwndDir = WinWindowFromID(hwndC, DIR_CNR);
413 if (hwndDir)
[69]414 {
415 *retstr = 0;
[133]416 WinSendMsg(hwndC,
[69]417 UM_CONTAINERDIR,
[133]418 MPFROMP(retstr),
419 MPVOID);
420 if (*retstr &&
421 !stricmp(retstr, directory))
[69]422 {
[133]423 if (restore)
424 WinSetWindowPos(hwndF,
425 HWND_TOP,
426 0,
427 0,
428 0,
429 0,
430 SWP_RESTORE | SWP_SHOW |
431 SWP_ACTIVATE | SWP_ZORDER);
[69]432 break;
[133]433 }
434 }
[69]435 }
436 }
437 WinEndEnumWindows(henum);
438 }
439 return hwndF;
[2]440}
441
[178]442static VOID SetToggleChecks(HWND hwndMenu)
[133]443{
[2]444 WinCheckMenuItem(hwndMenu,
[133]445 IDM_TEXTTOOLS,
446 fTextTools);
[2]447 WinCheckMenuItem(hwndMenu,
[133]448 IDM_TOOLTITLES,
449 fToolTitles);
[2]450 WinCheckMenuItem(hwndMenu,
[133]451 IDM_USERLIST,
452 fUserComboBox);
[2]453 WinCheckMenuItem(hwndMenu,
[133]454 IDM_TOOLSUBMENU,
455 fToolbar);
[2]456 WinCheckMenuItem(hwndMenu,
[133]457 IDM_AUTOVIEWSUBMENU,
458 fAutoView);
[2]459 WinCheckMenuItem(hwndMenu,
[133]460 IDM_AUTOVIEWFILE,
461 !fComments);
[2]462 WinCheckMenuItem(hwndMenu,
[133]463 IDM_AUTOVIEWCOMMENTS,
464 fComments);
[2]465 WinCheckMenuItem(hwndMenu,
[133]466 IDM_MOREBUTTONS,
467 fMoreButtons);
[2]468 WinCheckMenuItem(hwndMenu,
[133]469 IDM_DRIVEBAR,
470 fDrivebar);
[2]471 WinCheckMenuItem(hwndMenu,
[133]472 IDM_AUTOTILE,
473 fAutoTile);
[2]474 WinCheckMenuItem(hwndMenu,
[133]475 IDM_TILEBACKWARDS,
476 fTileBackwards);
[2]477}
478
[178]479static VOID ResizeTools(HWND hwnd)
[133]480{
481 register ULONG butx = 18L;
482 INT attrib = SWP_MOVE | SWP_SIZE | SWP_SHOW | SWP_ZORDER | SWP_NOREDRAW,
483 noattrib;
484 register TOOL *tool, *starttool;
485 SWP *swp;
486 register ULONG numtools, x;
[2]487
[133]488 if (!fToolbar)
489 return;
490 noattrib = attrib;
491 noattrib &= (~(SWP_SHOW | SWP_ZORDER));
492 noattrib |= SWP_HIDE;
493 /* count tools */
494 tool = toolhead;
495 for (numtools = 0L; tool; numtools++)
496 tool = tool -> next;
497 /* allocate swp array for WinSetMultWindowPos */
498 swp = malloc(sizeof(SWP) * (numtools + 2));
499 if (swp)
500 {
501 memset(swp, 0, sizeof(SWP) * (numtools + 2));
502 for (x = 0; x < numtools + 2L; x++)
503 {
504 swp[x].hwndInsertBehind = HWND_TOP;
505 swp[x].fl = attrib;
506 swp[x].y = (fToolTitles) ? 14L : 3L;
507 swp[x].cx = 32L;
508 swp[x].cy = 32L;
509 }
510 swp[0].x = swp[1].x = 2L;
511 swp[0].y = (fTextTools) ? 14L : 18L;
512 swp[1].y = (fTextTools) ? 1L : 2L;
513 swp[0].cx = swp[1].cx = 14L;
514 swp[0].cy = swp[1].cy = 14L;
515 swp[0].hwnd = WinWindowFromID(hwnd, IDM_TOOLLEFT);
516 swp[1].hwnd = WinWindowFromID(hwnd, IDM_TOOLRIGHT);
517 x = 2L;
518 tool = find_tool(firsttool);
519 if (!tool)
520 tool = toolhead;
521 starttool = tool;
522 while (tool)
523 {
524 if (!(tool -> flags & T_INVISIBLE))
525 {
526 swp[x].x = butx;
527 if (fTextTools || (tool -> flags & T_TEXT))
528 {
529 butx += 55L;
530 swp[x].cx = 54L;
531 swp[x].cy = 24L;
532 swp[x].y = 3L;
[2]533 }
[133]534 else
535 butx += 33L;
536 if (tool -> flags & T_SEPARATOR)
537 butx += 12;
538 }
539 else
540 swp[x].fl = noattrib;
541 swp[x].hwnd = WinWindowFromID(hwnd, tool -> id);
542 x++;
543 tool = tool -> next;
544 }
545 tool = toolhead;
546 while (tool && tool != starttool)
547 {
548 swp[x].x = butx;
549 if (!(tool -> flags & T_INVISIBLE))
550 {
551 if (fTextTools || (tool -> flags & T_TEXT))
552 {
553 butx += 55L;
554 swp[x].cx = 54L;
555 swp[x].cy = 24L;
556 swp[x].y = 3L;
557 }
558 else
559 butx += 33L;
560 if (tool -> flags & T_SEPARATOR)
561 butx += 12;
562 }
563 else
564 swp[x].fl = noattrib;
565 swp[x].hwnd = WinWindowFromID(hwnd, tool -> id);
566 x++;
567 tool = tool -> next;
568 }
569 WinSetMultWindowPos(WinQueryAnchorBlock(hwnd), swp, numtools + 2L);
570 if (!fTextTools && fToolTitles)
571 {
572 for (x = 2L; x < numtools + 2L; x++)
573 {
574 if (fTextTools || !fToolTitles)
575 swp[x].fl = noattrib;
576 else
577 {
578 tool = find_tool(WinQueryWindowUShort(swp[x].hwnd, QWS_ID));
579 if (tool && (tool -> flags & T_TEXT))
580 swp[x].fl = noattrib;
581 else
582 {
583 swp[x].hwndInsertBehind = HWND_TOP;
584 swp[x].y = 1L;
585 swp[x].cy = 10L;
586 }
587 }
588 swp[x].hwnd = WinWindowFromID(hwnd,
589 WinQueryWindowUShort(swp[x].hwnd, QWS_ID) +
590 25000);
591 }
592 WinSetMultWindowPos(WinQueryAnchorBlock(hwnd), &swp[2], numtools);
593 }
594 free(swp);
595 }
596 WinInvalidateRect(hwnd, NULL, TRUE);
[2]597}
598
[178]599static MRESULT EXPENTRY DropDownListProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[133]600{
601 PFNWP oldproc = (PFNWP) INSTDATA(hwnd);
602 static HWND hwndMenu = (HWND) 0;
603 USHORT id;
604 static BOOL emphasized = FALSE;
[2]605
[133]606 switch (msg)
607 {
608 case WM_MOUSEMOVE:
609 shiftstate = (SHORT2FROMMP(mp2) & (KC_ALT | KC_SHIFT | KC_CTRL));
610 break;
[2]611
[133]612 case WM_CHAR:
613 shiftstate = (SHORT1FROMMP(mp1) & (KC_SHIFT | KC_ALT | KC_CTRL));
614 break;
[2]615
[133]616 case WM_MENUEND:
617 if (hwndMenu == (HWND) mp2)
618 {
619 WinDestroyWindow(hwndMenu);
620 hwndMenu = (HWND) 0;
621 }
622 break;
[2]623
[133]624 case WM_CONTEXTMENU:
625 {
626 MRESULT ret = MRFROMSHORT(TRUE);
[2]627
[133]628 if (hwndMenu)
629 WinDestroyWindow(hwndMenu);
630 hwndMenu = (HWND) 0;
631 id = WinQueryWindowUShort(WinQueryWindow(hwnd, QW_PARENT), QWS_ID);
632 switch (id)
633 {
634 case MAIN_CMDLIST:
635 WinPostMsg(WinWindowFromID(WinQueryWindow(WinQueryWindow(hwnd,
636 QW_PARENT),
637 QW_PARENT),
638 FID_CLIENT),
639 WM_COMMAND,
640 MPFROM2SHORT(IDM_EDITCOMMANDS, 0),
641 MPVOID);
642 break;
643 case MAIN_USERLIST:
644 case MAIN_SETUPLIST:
645 hwndMenu = WinLoadMenu(HWND_DESKTOP, FM3ModHandle, id);
646 if (hwndMenu)
647 PopupMenu(hwnd,
648 WinWindowFromID(WinQueryWindow(WinQueryWindow(hwnd,
649 QW_PARENT),
650 QW_PARENT),
651 FID_CLIENT),
652 hwndMenu);
653 break;
654 default:
655 ret = FALSE;
656 break;
657 }
658 return ret;
659 }
[2]660
[133]661 case WM_CONTROL:
662 if (hwndStatus2)
663 {
664 switch (SHORT1FROMMP(mp1))
665 {
666 case CBID_EDIT:
667 id = WinQueryWindowUShort(hwnd, QWS_ID);
668 switch (SHORT2FROMMP(mp1))
669 {
670 case EN_SETFOCUS:
671 switch (id)
672 {
673 case MAIN_CMDLIST:
674 WinSetWindowText(hwndStatus2,
675 GetPString(IDS_CMDLISTHELP));
676 break;
677 case MAIN_SETUPLIST:
678 WinSetWindowText(hwndStatus2,
679 GetPString(IDS_SETUPLISTHELP));
680 break;
681 case MAIN_USERLIST:
682 WinSetWindowText(hwndStatus2,
683 GetPString(IDS_USERLISTHELP));
684 break;
685 case MAIN_DRIVELIST:
686 WinSetWindowText(hwndStatus2,
687 GetPString(IDS_DRIVELISTHELP));
688 break;
689 case MAIN_BUTTONLIST:
690 WinSetWindowText(hwndStatus2,
691 GetPString(IDS_BUTTONLISTHELP));
692 break;
693 default:
694 break;
695 }
696 break;
[2]697
[133]698 default:
699 break;
700 }
701 }
702 break;
[2]703
[133]704 default:
705 break;
706 }
707 break;
[2]708
[133]709 case WM_BEGINDRAG:
710 id = WinQueryWindowUShort(hwnd, QWS_ID);
[2]711// saymsg(MB_ENTER,HWND_DESKTOP,DEBUG_STRING,"%u %s %u",id,(id == CBID_EDIT) ? "TRUE" : "FALSE",WinQueryWindowUShort(WinQueryWindow(hwnd,QW_PARENT),QWS_ID) == MAIN_USERLIST);
[133]712 if (id == CBID_EDIT &&
713 WinQueryWindowUShort(WinQueryWindow(hwnd, QW_PARENT), QWS_ID) ==
714 MAIN_USERLIST)
715 {
[2]716
[133]717 CHAR path[CCHMAXPATH];
[2]718
[133]719 *path = 0;
720 WinQueryWindowText(hwnd, CCHMAXPATH, path);
721 bstrip(path);
[2]722// saymsg(MB_ENTER,HWND_DESKTOP,DEBUG_STRING,"Dragging: %s",path);
[133]723 if (*path && !IsRoot(path))
724 DragOne(hwnd, (HWND) 0, path, FALSE);
725 return 0;
726 }
727 break;
[2]728
[133]729 case DM_DRAGOVER:
730 id = WinQueryWindowUShort(WinQueryWindow(hwnd, QW_PARENT), QWS_ID);
731 if (id == MAIN_USERLIST)
732 {
733 if (!emphasized)
734 {
735 emphasized = TRUE;
736 DrawTargetEmphasis(hwnd, emphasized);
737 }
738 if (AcceptOneDrop(mp1, mp2))
739 return MRFROM2SHORT(DOR_DROP,
740 DO_MOVE);
741 return MRFROM2SHORT(DOR_NEVERDROP, 0);
742 }
743 break;
[2]744
[133]745 case DM_DRAGLEAVE:
746 id = WinQueryWindowUShort(WinQueryWindow(hwnd, QW_PARENT), QWS_ID);
747 if (id == MAIN_USERLIST)
748 {
749 if (emphasized)
750 {
751 emphasized = FALSE;
752 DrawTargetEmphasis(hwnd, emphasized);
753 }
754 }
755 break;
[2]756
[133]757 case DM_DROPHELP:
758 id = WinQueryWindowUShort(WinQueryWindow(hwnd, QW_PARENT), QWS_ID);
759 if (id == MAIN_USERLIST)
760 {
761 DropHelp(mp1, mp2, hwnd, GetPString(IDS_USERLISTDROPHELP));
762 return 0;
763 }
764 break;
[2]765
[133]766 case DM_DROP:
767 id = WinQueryWindowUShort(WinQueryWindow(hwnd, QW_PARENT), QWS_ID);
768 if (id == MAIN_USERLIST)
769 {
[2]770
[133]771 char szFrom[CCHMAXPATH + 2];
[2]772
[133]773 if (emphasized)
774 {
775 emphasized = FALSE;
776 DrawTargetEmphasis(hwnd, emphasized);
777 }
778 if (GetOneDrop(mp1,
779 mp2,
780 szFrom,
781 sizeof(szFrom)))
782 {
783 MakeValidDir(szFrom);
784 WinSetWindowText(hwnd,
785 szFrom);
786 PostMsg(WinWindowFromID(WinQueryWindow(WinQueryWindow(hwnd,
787 QW_PARENT),
788 QW_PARENT),
789 FID_CLIENT),
790 UM_COMMAND,
791 MPFROM2SHORT(IDM_ADDTOUSERLIST, 0),
792 MPVOID);
793 return 0;
794 }
795 }
796 break;
[2]797
[133]798 case WM_DESTROY:
799 if (hwndMenu)
800 WinDestroyWindow(hwndMenu);
801 hwndMenu = (HWND) 0;
802 break;
803 }
[2]804
[133]805 return oldproc(hwnd, msg, mp1, mp2);
[2]806}
807
[133]808void BubbleHelp(HWND hwnd, BOOL other, BOOL drive, BOOL above, char *help)
809{
810 if (help && *help &&
811 ((drive && fDrivebarHelp) ||
812 (other && fOtherHelp) ||
813 (!other && !drive && fToolbarHelp)))
814 {
815 if ((!hwndBubble ||
816 WinQueryWindowULong(hwndBubble, QWL_USER) != hwnd) &&
817 !WinQueryCapture(HWND_DESKTOP))
[2]818 MakeBubble(hwnd,
[133]819 above,
820 help);
821 }
[2]822}
823
[133]824VOID MakeBubble(HWND hwnd, BOOL above, CHAR * help)
825{
826 if (!hwnd || !help || !*help)
827 return;
[2]828
[133]829 if (hwndBubble)
830 WinDestroyWindow(hwndBubble);
[2]831
[133]832 {
833 HWND hwndActive;
834 char ucClassname[8];
[2]835
[133]836 hwndActive = WinQueryActiveWindow(HWND_DESKTOP);
837 if (hwndActive)
838 {
839 /* don't bring up help if window isn't active */
840 if (!WinIsChild(hwnd, hwndActive))
841 return;
842 }
843 hwndActive = WinQueryFocus(HWND_DESKTOP);
844 if (WinQueryClassName(hwndActive, sizeof(ucClassname), ucClassname))
845 {
846 /* don't bring up help if a menu is active */
847 if (!strcmp(ucClassname, "#4"))
848 return;
849 }
850 }
[2]851
852 hwndBubble = WinCreateWindow(HWND_DESKTOP,
[133]853 GetPString(IDS_WCBUBBLE),
854 help,
855 WS_CLIPSIBLINGS | SS_TEXT |
856 DT_CENTER | DT_VCENTER,
857 0,
858 0,
859 0,
860 0,
861 HWND_DESKTOP,
862 HWND_TOP,
863 MAIN_HELP,
864 NULL,
865 NULL);
866 if (hwndBubble)
867 {
[2]868
[133]869 HPS hps;
870 POINTL aptl[TXTBOX_COUNT], ptl, tptl;
871 LONG lxScreen, sx, sy, extra = 0, lyScreen;
872 char *p, *pp, *wp;
873 SWP swp;
[2]874
[133]875 WinQueryWindowPos(hwnd, &swp);
876 lyScreen = WinQuerySysValue(HWND_DESKTOP, SV_CYSCREEN);
877 lxScreen = WinQuerySysValue(HWND_DESKTOP, SV_CXSCREEN);
878 WinSetWindowULong(hwndBubble, QWL_USER, hwnd);
[2]879 SetPresParams(hwndBubble,
[133]880 NULL,
881 NULL,
882 NULL,
883 GetPString(IDS_8HELVTEXT));
884 hps = WinGetPS(hwndBubble);
885 p = help;
886 tptl.x = tptl.y = 0;
887 while (p && *p)
888 {
889 wp = NULL;
890 pp = strchr(p, '\r');
891 if (pp)
892 {
893 wp = pp;
894 *pp = 0;
895 pp++;
896 }
897 GpiQueryTextBox(hps, strlen(p), p, TXTBOX_COUNT, aptl);
898 tptl.x = max(aptl[TXTBOX_TOPRIGHT].x, tptl.x);
899 if (tptl.y)
900 tptl.y += extra;
901 else
902 extra = aptl[TXTBOX_TOPLEFT].y / 4;
903 tptl.y += aptl[TXTBOX_TOPLEFT].y;
904 if (wp)
905 *wp = '\r';
906 p = pp;
907 }
908 WinSetWindowULong(hwndBubble, QWL_USER + 4, extra);
909 WinReleasePS(hps);
910 ptl.x = ptl.y = 0;
911 WinMapWindowPoints(hwnd, HWND_DESKTOP, &ptl, 1);
912 if (above)
913 {
914 sy = ptl.y + swp.cy + 4;
915 if (sy + tptl.y + 12 > lyScreen)
916 {
917 above = FALSE;
918 sy = ptl.y - (tptl.y + 14);
919 }
920 }
921 else
922 sy = ptl.y - (tptl.y + 14);
923 if (ptl.x > (lxScreen / 2))
924 sx = (ptl.x - tptl.x) - 16;
925 else
926 sx = ptl.x + (54 * (above == FALSE)) + 2;
927 if (sx < 0)
928 sx = 0;
929 if (sx + tptl.x + 14 > lxScreen)
930 sx = lxScreen - (tptl.x + 14);
931 if (sy < 0)
932 {
933 sy = ptl.y + swp.cy + 4;
934 if (sy + tptl.y + 12 > lyScreen)
935 sy = 0;
936 }
937 WinSetWindowPos(hwndBubble, HWND_TOP, sx, sy,
938 tptl.x + 14,
939 tptl.y + 12,
940 SWP_DEACTIVATE | SWP_SHOW | SWP_ZORDER |
941 SWP_MOVE | SWP_SIZE);
942 }
[2]943}
944
[133]945MRESULT EXPENTRY BubbleProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
946{
947 switch (msg)
948 {
949 case WM_SETFOCUS:
950 if (mp2)
951 PostMsg(hwnd,
952 UM_FOCUSME,
953 mp1,
954 MPVOID);
955 break;
[2]956
[133]957 case UM_FOCUSME:
958 WinSetFocus(HWND_DESKTOP,
959 (HWND) mp1);
960 return 0;
[2]961
[133]962 case WM_MOUSEMOVE:
963 WinShowWindow(hwnd, FALSE);
964 break;
[2]965
[133]966 case UM_TIMER:
967 {
968 POINTL ptl;
[2]969
[133]970 WinQueryPointerPos(HWND_DESKTOP, &ptl);
971 if (WinWindowFromPoint(HWND_DESKTOP, &ptl, TRUE) !=
972 WinQueryWindowULong(hwnd, QWL_USER) ||
973 !WinIsWindowVisible(hwnd))
974 WinDestroyWindow(hwnd);
975 }
976 return 0;
[2]977
[133]978 case WM_PAINT:
979 {
980 HPS hps;
981 SWP swp;
982 POINTL ptl, aptl[TXTBOX_COUNT];
983 CHAR *s, *p, *pp, *wp;
984 ULONG extra, tlen, y;
[2]985
[133]986 hps = WinBeginPaint(hwnd, (HPS) 0, NULL);
987 if (hps)
988 {
989 WinQueryWindowPos(hwnd, &swp);
990 GpiCreateLogColorTable(hps, 0, LCOLF_RGB, 0, 0, 0);
991 GpiSetColor(hps, ((255 << 16) | (255 << 8) | 198));
992 GpiSetBackMix(hps, BM_LEAVEALONE);
993 GpiSetMix(hps, FM_OVERPAINT);
994 ptl.x = ptl.y = 0;
995 GpiMove(hps, &ptl);
996 ptl.x = swp.cx - 1;
997 ptl.y = swp.cy - 1;
998 GpiBox(hps, DRO_OUTLINEFILL, &ptl, 0, 0);
999 tlen = WinQueryWindowTextLength(hwnd);
1000 if (tlen)
1001 {
1002 s = malloc(tlen + 2);
1003 if (s)
1004 {
1005 WinQueryWindowText(hwnd, tlen + 1, s);
1006 if (*s)
1007 {
1008 p = s;
1009 y = swp.cy - 3;
1010 extra = WinQueryWindowULong(hwnd, QWL_USER + 4);
1011 GpiSetColor(hps, 0);
1012 GpiSetMix(hps, FM_OVERPAINT);
1013 while (p && *p)
1014 {
1015 wp = NULL;
1016 pp = strchr(p, '\r');
1017 if (pp)
1018 {
1019 wp = pp;
1020 *pp = 0;
1021 pp++;
1022 }
1023 GpiQueryTextBox(hps, strlen(p), p, TXTBOX_COUNT, aptl);
1024 ptl.x = 7;
1025 y -= aptl[TXTBOX_TOPLEFT].y;
1026 if (p != s)
1027 y -= extra;
1028 ptl.y = y;
1029 GpiCharStringAt(hps, &ptl, strlen(p), p);
1030 if (wp)
1031 *wp = '\r';
1032 p = pp;
1033 }
1034 }
1035 free(s);
1036 }
1037 }
1038 if (!(swp.fl & (SWP_HIDE | SWP_MINIMIZE)) &&
1039 swp.cx > 6 && swp.cy > 6)
1040 {
1041 GpiSetColor(hps, CLR_WHITE);
1042 ptl.x = 1;
1043 ptl.y = 1;
1044 GpiMove(hps, &ptl);
1045 ptl.y = swp.cy - 2;
1046 GpiLine(hps, &ptl);
1047 ptl.x = swp.cx - 2;
1048 GpiLine(hps, &ptl);
1049 ptl.x = 2;
1050 ptl.y = 2;
1051 GpiMove(hps, &ptl);
1052 ptl.y = swp.cy - 3;
1053 GpiLine(hps, &ptl);
1054 ptl.x = swp.cx - 3;
1055 GpiLine(hps, &ptl);
1056 GpiSetColor(hps, CLR_BROWN);
1057 ptl.x = 1;
1058 ptl.y = 1;
1059 GpiMove(hps, &ptl);
1060 ptl.x = swp.cx - 2;
1061 GpiLine(hps, &ptl);
1062 ptl.y = swp.cy - 2;
1063 GpiLine(hps, &ptl);
1064 ptl.x = 2;
1065 ptl.y = 2;
1066 GpiMove(hps, &ptl);
1067 ptl.x = swp.cx - 3;
1068 GpiLine(hps, &ptl);
1069 ptl.y = swp.cy - 3;
1070 GpiLine(hps, &ptl);
1071 }
1072 WinEndPaint(hps);
1073 }
1074 }
1075 return 0;
[2]1076
[133]1077 case WM_CLOSE:
1078 WinDestroyWindow(hwnd);
1079 return 0;
[2]1080
[133]1081 case WM_DESTROY:
1082 hwndBubble = (HWND) 0;
1083 break;
1084 }
1085 return PFNWPStatic(hwnd, msg, mp1, mp2);
[2]1086}
1087
[133]1088MRESULT EXPENTRY LEDProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1089{
1090 switch (msg)
1091 {
1092 case WM_CREATE:
1093 {
1094 MRESULT mr = PFNWPStatic(hwnd, msg, mp1, mp2);
1095 HBITMAP hbmold = (HBITMAP) 0;
1096 HPS hps = (HPS) 0;
[2]1097
[133]1098 switch (WinQueryWindowUShort(hwnd, QWS_ID))
[2]1099 {
[133]1100 case MAIN_LED:
1101 hps = WinGetPS(hwnd);
1102 hbmold = (HBITMAP) WinSendMsg(hwnd,
1103 SM_QUERYHANDLE,
1104 MPVOID,
1105 MPVOID);
1106 if (!fBlueLED)
1107 {
1108 hbmLEDon = GpiLoadBitmap(hps,
1109 0,
1110 LEDON_BMP,
1111 12,
1112 12);
1113 hbmLEDoff = GpiLoadBitmap(hps,
1114 0,
1115 LEDOFF_BMP,
1116 12,
1117 12);
1118 }
1119 else
1120 {
1121 hbmLEDon = GpiLoadBitmap(hps,
1122 0,
1123 LEDON2_BMP,
1124 12,
1125 12);
1126 hbmLEDoff = GpiLoadBitmap(hps,
1127 0,
1128 LEDOFF2_BMP,
1129 12,
1130 12);
1131 }
1132 if (hbmLEDoff &&
1133 hbmLEDon)
1134 WinSendMsg(hwnd,
1135 SM_SETHANDLE,
1136 MPFROMLONG(hbmLEDoff),
1137 MPVOID);
1138 else
1139 {
1140 if (hbmLEDoff)
1141 GpiDeleteBitmap(hbmLEDoff);
1142 if (hbmLEDon)
1143 GpiDeleteBitmap(hbmLEDon);
1144 }
1145 if (hbmold &&
1146 hbmLEDon &&
1147 hbmLEDoff &&
1148 hbmold != hbmLEDon &&
1149 hbmold != hbmLEDoff)
1150 GpiDeleteBitmap(hbmold);
1151 if (hps)
1152 WinReleasePS(hps);
1153 break;
1154 default:
1155 SetPresParams(hwnd,
1156 &RGBGREY,
1157 &RGBBLACK,
1158 &RGBGREY,
1159 GetPString(IDS_6HELVTEXT));
1160 break;
[2]1161 }
[133]1162 return mr;
1163 }
[2]1164
[133]1165 case WM_SETFOCUS:
1166 if (mp2)
1167 PostMsg(hwnd,
1168 UM_FOCUSME,
1169 mp1,
1170 MPVOID);
1171 break;
[2]1172
[133]1173 case UM_FOCUSME:
1174 WinSetFocus(HWND_DESKTOP,
1175 (HWND) mp1);
1176 return 0;
[2]1177
[133]1178 case WM_MOUSEMOVE:
1179 BubbleHelp(hwnd,
1180 TRUE,
1181 FALSE,
1182 FALSE,
1183 GetPString(IDS_LEDHELP));
1184 if (!fNoFinger)
1185 {
1186 WinSetPointer(HWND_DESKTOP, hptrFinger);
1187 return MRFROMLONG(TRUE);
1188 }
1189 break;
[2]1190
[133]1191 case WM_BUTTON1CLICK:
1192 PostMsg(WinQueryWindow(hwnd, QW_PARENT),
1193 WM_COMMAND,
1194 MPFROM2SHORT(IDM_SHOWNOTEWND, 0),
1195 MPVOID);
1196 break;
[2]1197
[133]1198 case WM_BUTTON2CLICK:
1199 PostMsg(WinQueryWindow(hwnd, QW_PARENT),
1200 WM_COMMAND,
1201 MPFROM2SHORT(IDM_HIDENOTEWND, 0),
1202 MPVOID);
1203 break;
[2]1204
[133]1205 case WM_CHORD:
1206 case WM_BUTTON3CLICK:
1207 PostMsg(WinQueryWindow(hwnd, QW_PARENT),
1208 WM_COMMAND,
1209 MPFROM2SHORT(IDM_WINDOWDLG, 0),
1210 MPVOID);
1211 break;
1212 }
1213 return PFNWPStatic(hwnd, msg, mp1, mp2);
[2]1214}
1215
[133]1216MRESULT EXPENTRY ChildButtonProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1217{
1218 USHORT id;
1219 register TOOL *tool;
1220 static HWND hwndMenu = (HWND) 0;
[2]1221
[133]1222 switch (msg)
1223 {
1224 case WM_BUTTON1DOWN:
1225 case WM_BUTTON2DOWN:
1226 case WM_BUTTON3DOWN:
1227 shiftstate = (SHORT2FROMMP(mp2) & (KC_ALT | KC_SHIFT | KC_CTRL));
1228 break;
[2]1229
[133]1230 case WM_MOUSEMOVE:
1231 if (fToolbarHelp)
1232 {
1233 if ((!hwndBubble || WinQueryWindowULong(hwndBubble, QWL_USER) != hwnd) &&
1234 !WinQueryCapture(HWND_DESKTOP))
1235 {
1236 id = WinQueryWindowUShort(hwnd, QWS_ID);
1237 tool = find_tool(id);
1238 if (tool && tool -> help && *tool -> help)
1239 {
[2]1240
[133]1241 char s[128];
[2]1242
[133]1243 strcpy(s, tool -> help);
1244 if (tool -> flags & T_DROPABLE)
1245 strcat(s, GetPString(IDS_DROPONMETEXT));
1246 MakeBubble(hwnd, FALSE, s);
1247 }
1248 }
1249 }
1250 break;
[2]1251
[133]1252 case WM_COMMAND:
1253 switch (SHORT1FROMMP(mp1))
1254 {
1255 case IDM_HELP:
1256 if (hwndHelp)
1257 WinSendMsg(hwndHelp,
1258 HM_DISPLAY_HELP,
1259 MPFROM2SHORT(HELP_TOOLBAR, 0),
1260 MPFROMSHORT(HM_RESOURCEID));
1261 break;
[2]1262
[133]1263 case IDM_HIDEANYTOOL: /* hide any tool */
1264 case IDM_HIDETOOL: /* hide tool */
1265 if (SHORT1FROMMP(mp1) == IDM_HIDETOOL)
1266 id = WinQueryWindowUShort(hwnd, QWS_ID);
1267 else
1268 id = (USHORT) WinDlgBox(HWND_DESKTOP, hwnd,
1269 PickToolProc, FM3ModHandle,
1270 PICKBTN_FRAME,
1271 GetPString(IDS_HIDETEXT));
1272 if (id)
1273 {
1274 tool = find_tool(id);
1275 if (tool)
1276 {
1277 tool -> flags |= T_INVISIBLE;
1278 fToolsChanged = TRUE;
1279 }
1280 }
1281 break;
[2]1282
[133]1283 case IDM_SHOWTOOLS: /* show all tools */
1284 tool = toolhead;
1285 while (tool)
1286 {
1287 tool -> flags &= (~T_INVISIBLE);
1288 tool = tool -> next;
1289 fToolsChanged = TRUE;
1290 }
1291 break;
[2]1292
[133]1293 case IDM_DELETEANYTOOL: /* delete any button */
1294 case IDM_DELETETOOL: /* delete button */
1295 if (SHORT1FROMMP(mp1) == IDM_DELETETOOL)
1296 id = WinQueryWindowUShort(hwnd, QWS_ID);
1297 else
1298 id = (USHORT) WinDlgBox(HWND_DESKTOP, hwnd, PickToolProc, FM3ModHandle,
1299 PICKBTN_FRAME,
1300 GetPString(IDS_DELETETEXT));
1301 if (id)
1302 PostMsg(WinQueryWindow(hwnd, QW_PARENT), UM_SETUP,
1303 MPFROM2SHORT(id, 0), MPVOID);
1304 return 0;
[2]1305
[133]1306 case IDM_EDITANYTOOL: /* edit any button */
1307 case IDM_EDITTOOL: /* edit button */
1308 if (SHORT1FROMMP(mp1) == IDM_EDITTOOL)
1309 id = WinQueryWindowUShort(hwnd, QWS_ID);
1310 else
1311 id = (USHORT) WinDlgBox(HWND_DESKTOP, hwnd, PickToolProc, FM3ModHandle,
1312 PICKBTN_FRAME,
1313 GetPString(IDS_EDITTEXT));
1314 if (id)
1315 {
1316 tool = find_tool(id);
1317 if (tool)
1318 {
1319 if (WinDlgBox(HWND_DESKTOP, hwnd, AddToolProc, FM3ModHandle,
1320 ADDBTN_FRAME, (PVOID) tool))
1321 WinSendMsg(WinWindowFromID(WinQueryWindow(WinQueryWindow(hwnd,
1322 QW_PARENT), QW_PARENT), FID_CLIENT),
1323 WM_COMMAND, MPFROM2SHORT(IDM_CREATETOOL, 0),
1324 MPFROM2SHORT(id, 0));
1325 }
1326 }
1327 break;
[2]1328
[133]1329 case IDM_ADDTOOL: /* add tool */
1330 id = (USHORT) WinDlgBox(HWND_DESKTOP, hwnd, AddToolProc, FM3ModHandle,
1331 ADDBTN_FRAME, MPVOID);
1332 if (id && id != (USHORT) - 1)
1333 WinSendMsg(WinWindowFromID(WinQueryWindow(WinQueryWindow(hwnd,
1334 QW_PARENT), QW_PARENT), FID_CLIENT),
1335 WM_COMMAND, MPFROM2SHORT(IDM_CREATETOOL, 0),
1336 MPFROM2SHORT(id, 0));
1337 break;
[2]1338
[133]1339 case IDM_REORDERTOOLS: /* reorder tools */
1340 WinDlgBox(HWND_DESKTOP,
1341 hwnd,
1342 ReOrderToolsProc,
1343 FM3ModHandle,
1344 RE_FRAME,
1345 MPVOID);
1346 break;
[2]1347
[133]1348 case IDM_SAVETOOLS:
1349 case IDM_LOADTOOLS:
1350 if (WinDlgBox(HWND_DESKTOP,
1351 hwnd,
1352 ToolIODlgProc,
1353 FM3ModHandle,
1354 SVBTN_FRAME,
1355 (PVOID) (SHORT1FROMMP(mp1) == IDM_SAVETOOLS) ?
1356 "TRUE" : NULL))
1357 BuildTools(hwndToolback, TRUE);
1358 break;
1359 }
1360 ResizeTools(WinQueryWindow(hwnd, QW_PARENT));
1361 return 0;
[2]1362
[133]1363 case WM_MENUEND:
1364 if (hwndMenu == (HWND) mp2)
1365 {
1366 WinDestroyWindow(hwndMenu);
1367 hwndMenu = (HWND) 0;
1368 }
1369 break;
[2]1370
[133]1371 case WM_CONTEXTMENU:
1372 DosEnterCritSec();
1373 if (!hwndMenu)
1374 hwndMenu = WinLoadMenu(hwnd, FM3ModHandle, ID_BUTTONMENU);
1375 DosExitCritSec();
1376 SetPresParams(hwndMenu,
1377 NULL,
1378 NULL,
1379 NULL,
1380 GetPString(IDS_10SYSPROTEXT));
1381 if (PopupMenu(hwnd, hwnd, hwndMenu))
1382 WinShowWindow(hwndMenu, TRUE);
1383 return MRFROMSHORT(TRUE);
[2]1384
[133]1385 case DM_DRAGOVER:
1386 {
1387 PDRAGINFO pDInfo; /* Pointer to DRAGINFO */
[2]1388
[133]1389 pDInfo = (PDRAGINFO) mp1; /* Get DRAGINFO pointer */
1390 DrgAccessDraginfo(pDInfo); /* Access DRAGINFO */
1391 id = WinQueryWindowUShort(hwnd, QWS_ID);
1392 tool = find_tool(id);
1393 if (!tool)
1394 {
1395 DrgFreeDraginfo(pDInfo);
[178]1396 return (MRFROM2SHORT(DOR_NEVERDROP, 0)); /* Drop not valid */
[133]1397 }
1398 if (!(tool -> flags & T_DROPABLE))
1399 {
1400 DrgFreeDraginfo(pDInfo);
[178]1401 return (MRFROM2SHORT(DOR_NEVERDROP, 0)); /* Drop not valid */
[133]1402 }
1403 {
1404 PDRAGITEM pDItem; /* Pointer to DRAGITEM */
[2]1405
[133]1406 pDItem = DrgQueryDragitemPtr(pDInfo, /* Access DRAGITEM */
1407 0); /* Index to DRAGITEM */
1408 if (DrgVerifyRMF(pDItem, /* Check valid rendering */
[178]1409 DRM_OS2FILE, /* mechanisms and data */
[133]1410 NULL))
1411 { /* formats */
1412 if (!(tool -> flags & T_EMPHASIZED))
1413 {
1414 tool -> flags |= T_EMPHASIZED;
1415 DrawTargetEmphasis(hwnd, ((tool -> flags & T_EMPHASIZED) != 0));
1416 DrgFreeDraginfo(pDInfo);
1417 }
1418 return (MRFROM2SHORT(DOR_DROP, /* Return okay to drop */
1419 DO_MOVE)); /* Move operation valid */
1420 }
1421 DrgFreeDraginfo(pDInfo);
1422 }
1423 }
[178]1424 return (MRFROM2SHORT(DOR_NEVERDROP, 0)); /* Drop not valid */
[2]1425
[133]1426 case DM_DROPHELP:
1427 id = WinQueryWindowUShort(hwnd, QWS_ID);
1428 tool = find_tool(id);
1429 PFNWPButton(hwnd, msg, mp1, mp2);
1430 DropHelp(mp1, mp2, hwnd, GetPString(IDS_TOOLDROPHELP));
1431 return 0;
[2]1432
[133]1433 case DM_DRAGLEAVE:
1434 id = WinQueryWindowUShort(hwnd, QWS_ID);
1435 tool = find_tool(id);
1436 if (tool && (tool -> flags & T_DROPABLE))
1437 {
1438 if (tool -> flags & T_EMPHASIZED)
1439 {
1440 tool -> flags &= (~T_EMPHASIZED);
1441 DrawTargetEmphasis(hwnd, ((tool -> flags & T_EMPHASIZED) != 0));
1442 }
1443 }
1444 break;
[2]1445
[133]1446 case DM_DROP:
1447 id = WinQueryWindowUShort(hwnd, QWS_ID);
1448 tool = find_tool(id);
1449 if (tool && (tool -> flags & T_DROPABLE) != 0)
1450 {
[2]1451
[133]1452 LISTINFO *li;
1453 CNRDRAGINFO cdi;
[2]1454
[133]1455 if (tool -> flags & T_EMPHASIZED)
1456 {
1457 DrawTargetEmphasis(hwnd, ((tool -> flags & T_EMPHASIZED) != 0));
1458 tool -> flags &= (~T_EMPHASIZED);
1459 }
1460 memset(&cdi, 0, sizeof(cdi));
1461 cdi.pRecord = NULL;
1462 cdi.pDragInfo = mp1;
1463 li = DoFileDrop(hwnd,
1464 NULL,
1465 FALSE,
1466 mp1,
1467 MPFROMP(&cdi));
1468 if (li)
1469 {
1470 li -> type = id;
1471 if (!li -> list || !li -> list[0])
1472 FreeListInfo(li);
1473 else
1474 {
[2]1475
[133]1476 HWND hwndActive;
[2]1477
[133]1478 hwndActive = TopWindow(hwndMain, (HWND) 0);
1479 if (hwndActive)
1480 {
1481 if (!WinSendMsg(hwndActive, UM_COMMAND, MPFROMP(li), MPVOID))
1482 FreeListInfo(li);
1483 }
1484 else
1485 FreeListInfo(li);
1486 }
1487 }
1488 }
1489 return 0;
[2]1490
[133]1491 case WM_CLOSE:
1492 WinDestroyWindow(hwnd);
1493 return 0;
1494 }
1495 return PFNWPButton(hwnd, msg, mp1, mp2);
[2]1496}
1497
[133]1498VOID BuildTools(HWND hwndT, BOOL resize)
1499{
1500 register TOOL *tool;
1501 register ULONG ctrlxpos = 18L;
1502 CHAR s[33];
1503 HENUM henum;
1504 HWND hwndTool;
[2]1505
[133]1506 henum = WinBeginEnumWindows(hwndT);
1507 while ((hwndTool = WinGetNextWindow(henum)) != NULLHANDLE)
1508 WinDestroyWindow(hwndTool);
1509 WinEndEnumWindows(henum);
1510 if (!fToolbar)
1511 {
1512 load_quicktools();
1513 load_tools(NULL);
1514 return;
1515 }
1516 if (!toolhead)
1517 load_tools(NULL);
1518 tool = toolhead;
1519 while (tool)
1520 {
1521 sprintf(s, "#%u", tool -> id);
1522 hwndTool = (HWND) 0;
1523 if (!fTextTools)
1524 {
1525 if (!(tool -> flags & T_MYICON))
1526 hwndTool = WinCreateWindow(hwndT,
1527 GetPString(IDS_WCTOOLBUTTONS),
1528 s,
[69]1529 BS_NOPOINTERFOCUS |
1530 BS_BITMAP | BS_PUSHBUTTON,
[133]1531 ctrlxpos,
1532 14,
1533 32,
1534 32,
1535 hwndT,
1536 HWND_TOP,
1537 tool -> id,
1538 NULL,
1539 NULL);
1540 if (!hwndTool)
1541 {
[2]1542
[133]1543 HBITMAP hbm;
[2]1544
[133]1545 hbm = LoadBitmapFromFileNum(tool -> id);
1546 if (hbm)
1547 {
[2]1548
[133]1549 BTNCDATA btc;
[2]1550
[133]1551 memset(&btc, 0, sizeof(btc));
1552 btc.cb = sizeof(btc);
1553 btc.hImage = hbm;
1554 hwndTool = WinCreateWindow(hwndT,
1555 GetPString(IDS_WCTOOLBUTTONS),
1556 NullStr,
[69]1557 BS_NOPOINTERFOCUS |
1558 BS_BITMAP | BS_PUSHBUTTON,
[133]1559 ctrlxpos,
1560 14,
1561 32,
1562 32,
1563 hwndT,
1564 HWND_TOP,
1565 tool -> id,
1566 &btc,
1567 NULL);
1568 if (!hwndTool)
1569 GpiDeleteBitmap(hbm);
1570 }
1571 }
1572 if (hwndTool)
1573 tool -> flags &= (~T_TEXT);
1574 }
1575 if (!hwndTool)
1576 {
[2]1577 WinCreateWindow(hwndT,
[133]1578 GetPString(IDS_WCTOOLBUTTONS),
1579 (!tool -> text && tool -> id >= IDM_COMMANDSTART &&
1580 tool -> id < IDM_QUICKTOOLSTART) ?
1581 command_title(tool -> id - IDM_COMMANDSTART) :
1582 tool -> text,
1583 BS_NOPOINTERFOCUS | BS_PUSHBUTTON,
1584 ctrlxpos,
1585 2,
1586 54,
1587 24,
1588 hwndT,
1589 HWND_TOP,
1590 tool -> id,
1591 NULL,
1592 NULL);
1593 tool -> flags |= T_TEXT;
1594 }
1595 if (fToolTitles && !fTextTools)
1596 {
[2]1597 WinCreateWindow(hwndT,
[133]1598 WC_STATIC,
1599 tool -> text,
1600 SS_TEXT | DT_LEFT | DT_VCENTER,
1601 ctrlxpos,
1602 1,
1603 32,
1604 10,
1605 hwndT,
1606 HWND_TOP,
1607 tool -> id + 25000,
1608 NULL,
1609 NULL);
1610 SetPresParams(WinWindowFromID(hwndT, tool -> id + 25000),
1611 &RGBGREY,
1612 &RGBBLACK,
1613 &RGBGREY,
1614 GetPString(IDS_2SYSTEMVIOTEXT));
1615 }
1616 ctrlxpos += ((tool -> flags & T_TEXT) ? 55L : 33L);
1617 SetPresParams(WinWindowFromID(hwndT, tool -> id),
1618 NULL,
1619 NULL,
1620 NULL,
1621 GetPString(IDS_8HELVTEXT));
1622 tool = tool -> next;
1623 }
[2]1624 WinCreateWindow(hwndT,
[133]1625 WC_BUTTON,
1626 "#6010",
1627 BS_NOPOINTERFOCUS |
1628 BS_BITMAP | BS_PUSHBUTTON,
1629 1,
1630 19,
1631 14,
1632 13,
1633 hwndT,
1634 HWND_TOP,
1635 IDM_TOOLLEFT,
1636 NULL,
1637 NULL);
[2]1638 WinCreateWindow(hwndT,
[133]1639 WC_BUTTON,
1640 "#6011",
1641 BS_NOPOINTERFOCUS |
1642 BS_BITMAP | BS_PUSHBUTTON,
1643 1,
1644 4,
1645 14,
1646 13,
1647 hwndT,
1648 HWND_TOP,
1649 IDM_TOOLRIGHT,
1650 NULL,
1651 NULL);
1652 if (resize)
1653 ResizeTools(hwndT);
[2]1654}
1655
[178]1656static MRESULT EXPENTRY CommandLineProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[133]1657{
1658 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, QWL_USER);
1659 static BOOL lbup = FALSE;
[2]1660
[133]1661 switch (msg)
1662 {
1663 case UM_FOCUSME:
1664 WinSetFocus(HWND_DESKTOP,
1665 hwnd);
1666 return 0;
[2]1667
[133]1668 case WM_SETFOCUS:
1669 if (!mp2 && !lbup)
1670 {
[2]1671
[133]1672 PID pid;
1673 TID tid;
[2]1674
[133]1675 if (WinQueryWindowUShort((HWND) mp1, QWS_ID) == COMMAND_BUTTON)
1676 break;
1677 if (!WinQueryWindowProcess((HWND) mp1, &pid, &tid) ||
1678 pid == mypid)
1679 WinDestroyWindow(hwnd);
1680 }
1681 break;
[2]1682
[133]1683 case UM_RESCAN:
1684 {
1685 CHAR cl[1024];
[2]1686
[133]1687 *cl = 0;
1688 lbup = TRUE;
1689 if (WinDlgBox(HWND_DESKTOP,
1690 hwnd,
1691 CmdLine2DlgProc,
1692 FM3ModHandle,
1693 EXEC2_FRAME,
1694 MPFROMP(cl)))
1695 {
1696 lstrip(cl);
1697 WinSetWindowText(hwnd, cl);
1698 }
1699 PostMsg(hwnd,
1700 UM_FOCUSME,
1701 MPVOID,
1702 MPVOID);
1703 PostMsg(hwnd,
1704 UM_SETUP,
1705 MPVOID,
1706 MPVOID);
1707 }
1708 return 0;
[2]1709
[133]1710 case UM_SETUP:
1711 lbup = FALSE;
1712 return 0;
[2]1713
[133]1714 case WM_BUTTON1DBLCLK:
1715 PostMsg(hwnd,
1716 UM_OPENWINDOWFORME,
1717 MPVOID,
1718 MPVOID);
1719 return 0;
[2]1720
[133]1721 case WM_COMMAND:
1722 switch (SHORT1FROMMP(mp1))
1723 {
1724 case COMMAND_BUTTON:
1725 if (!lbup)
1726 PostMsg(hwnd,
1727 UM_RESCAN,
1728 MPVOID,
1729 MPVOID);
1730 break;
1731 }
1732 return 0;
[2]1733
[133]1734 case UM_OPENWINDOWFORME:
1735 {
1736 static char directory[CCHMAXPATH], cl[1000];
1737 char **list = NULL;
1738 ULONG len;
1739 HWND hwndCnr;
[2]1740
[133]1741 *directory = *cl = 0;
1742 strcpy(cl, GetCmdSpec(FALSE));
1743 strcat(cl, " /C ");
1744 len = strlen(cl);
1745 WinQueryWindowText(hwnd, 1000 - len, cl + len);
1746 bstrip(cl + len);
1747 if (strlen(cl) > len)
1748 {
1749 WinSendMsg(WinQueryWindow(hwnd, QW_PARENT),
1750 UM_SETUP,
1751 MPFROMP(cl + len),
1752 MPVOID);
1753 WinQueryWindowText(hwndStatus,
1754 CCHMAXPATH,
1755 directory);
1756 bstrip(directory);
1757 if (*directory && (IsRoot(directory) || !IsFile(directory)))
1758 {
1759 if (!FM2Command(directory, cl + len))
1760 {
1761 hwndCnr = TopWindow(hwndMain, (HWND) 0);
1762 if (hwndCnr)
1763 {
1764 hwndCnr = WinWindowFromID(hwndCnr, FID_CLIENT);
1765 if (hwndCnr)
1766 {
1767 hwndCnr = WinWindowFromID(hwndCnr, DIR_CNR);
1768 if (hwndCnr)
1769 list = BuildList(hwndCnr);
1770 }
1771 }
1772 WinSetActiveWindow(HWND_DESKTOP, hwndCnr);
1773 if (add_cmdline(cl + len, FALSE) && fSaveMiniCmds)
1774 save_cmdlines(FALSE);
1775 ExecOnList(hwndCnr,
1776 cl,
1777 WINDOWED | ((fKeepCmdLine) ?
1778 SEPARATEKEEP : SEPARATE),
1779 directory,
1780 list,
1781 NULL);
1782 if (list)
1783 free(list);
1784 WinDestroyWindow(hwnd);
1785 break;
1786 }
1787 }
1788 }
1789 WinSendMsg(hwnd, EM_SETSEL, MPFROM2SHORT(0, 1024), MPVOID);
1790 }
1791 return 0;
[2]1792
[133]1793 case WM_CHAR:
1794 if (!lbup && !(SHORT1FROMMP(mp1) & KC_KEYUP))
1795 {
1796 if (SHORT1FROMMP(mp1) & KC_VIRTUALKEY)
1797 {
1798 if ((SHORT1FROMMP(mp2) & 255) == '\r')
1799 PostMsg(hwnd, UM_OPENWINDOWFORME, MPVOID, MPVOID);
1800 else if ((SHORT1FROMMP(mp2) & 0xff) == 0x1b)
1801 WinDestroyWindow(hwnd);
1802 else if (SHORT2FROMMP(mp2) == VK_UP ||
1803 SHORT2FROMMP(mp2) == VK_DOWN)
1804 PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
1805 }
1806 }
1807 else if ((SHORT1FROMMP(mp1) & KC_VIRTUALKEY) &&
1808 ((SHORT2FROMMP(mp2) == VK_UP ||
1809 SHORT2FROMMP(mp2) == VK_DOWN) ||
1810 (SHORT1FROMMP(mp2) == '\x1b') ||
1811 (SHORT1FROMMP(mp2) == '\r')))
1812 return 0;
1813 break;
[2]1814
[133]1815 case WM_DESTROY:
1816 PostMsg(WinQueryWindow(hwnd, QW_PARENT),
1817 UM_RESCAN,
1818 MPVOID,
1819 MPVOID);
1820 lbup = FALSE;
1821 break;
1822 }
1823 return oldproc(hwnd, msg, mp1, mp2);
[2]1824}
1825
[133]1826MRESULT EXPENTRY DriveBackProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1827{
1828 switch (msg)
1829 {
1830 case WM_CREATE:
1831 PostMsg(hwnd,
1832 UM_SETUP,
1833 MPVOID,
1834 MPVOID);
1835 break;
[2]1836
[133]1837 case UM_SETUP:
1838 {
1839 RGB2 rgb;
[2]1840
[133]1841 memset(&rgb, 0, sizeof(rgb));
1842 rgb.bRed = 128;
1843 SetPresParams(hwnd,
1844 &RGBGREY,
1845 &rgb,
1846 &RGBGREY,
1847 GetPString(IDS_8HELVTEXT));
1848 SetTargetDir(hwnd, TRUE);
1849 }
1850 return 0;
[2]1851
[133]1852 case WM_SETFOCUS:
1853 case UM_FOCUSME:
1854 case WM_BUTTON1DOWN:
1855 case WM_BUTTON1UP:
1856 case WM_BUTTON2DOWN:
1857 case WM_BUTTON2UP:
1858 case WM_BUTTON3DOWN:
1859 case WM_BUTTON3UP:
1860 return CommonTextButton(hwnd, msg, mp1, mp2);
[2]1861
[133]1862 case WM_MOUSEMOVE:
1863 shiftstate = (SHORT2FROMMP(mp2) & (KC_SHIFT | KC_ALT | KC_CTRL));
1864 break;
[2]1865
[133]1866 case UM_CLICKED:
1867 case UM_CLICKED3:
1868 PostMsg(hwndMain,
1869 WM_COMMAND,
1870 MPFROM2SHORT(IDM_SETTARGET, 0),
1871 MPVOID);
1872 return 0;
[2]1873
[133]1874 case WM_CHAR:
1875 shiftstate = (SHORT1FROMMP(mp1) & (KC_SHIFT | KC_ALT | KC_CTRL));
1876 break;
[2]1877
[133]1878 case WM_CONTROLPOINTER:
1879 if (!fNoFinger &&
1880 (SHORT1FROMMP(mp1) >= IDM_DRIVEA &&
1881 SHORT1FROMMP(mp1) < IDM_DRIVEA + 26))
1882 return MRFROMLONG(hptrFinger);
1883 break;
[2]1884
[133]1885 case WM_COMMAND:
1886 {
1887 CHAR dv[4];
[2]1888
[133]1889 *dv = 0;
1890 WinQueryWindowText(WinWindowFromID(hwnd, SHORT1FROMMP(mp1) + 50),
1891 2,
1892 dv);
1893 if (isalpha(*dv))
1894 {
[2]1895
[133]1896 HWND hwndActive;
[2]1897
[133]1898 dv[1] = ':';
1899 dv[2] = '\\';
1900 dv[3] = 0;
1901 hwndActive = TopWindow(hwnd, (HWND) 0);
1902 if (hwndActive)
1903 WinSendMsg(WinWindowFromID(hwndActive, FID_CLIENT),
1904 UM_DRIVECMD,
1905 MPFROMP(dv),
1906 MPVOID);
1907 }
1908 }
1909 return 0;
[2]1910
[133]1911 case WM_PAINT:
1912 PaintRecessedWindow(hwnd,
1913 (HPS) 0,
1914 TRUE,
1915 FALSE);
1916 break;
[2]1917
[133]1918 case WM_CLOSE:
1919 WinDestroyWindow(hwnd);
1920 return 0;
1921 }
1922 return PFNWPStatic(hwnd, msg, mp1, mp2);
[2]1923}
1924
[133]1925MRESULT EXPENTRY DriveProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1926{
1927 USHORT id;
1928 static CHAR dv[4];
1929 static BOOL emphasized = FALSE;
1930 static HWND hwndMenu = (HWND) 0;
[2]1931 static USHORT helpid = 0;
1932
[133]1933 switch (msg)
1934 {
1935 case WM_MOUSEMOVE:
1936 if (fDrivebarHelp &&
1937 (!hwndBubble ||
1938 WinQueryWindowULong(hwndBubble, QWL_USER) != hwnd) &&
1939 !WinQueryCapture(HWND_DESKTOP))
1940 {
1941 id = WinQueryWindowUShort(hwnd, QWS_ID);
1942 if (helpid != id)
1943 {
1944 helpid = id;
1945 PostMsg(MainObjectHwnd,
1946 UM_SETUP6,
1947 MPFROMLONG((ULONG) hwnd),
1948 MPVOID);
[2]1949 }
[133]1950 else
1951 helpid = 0;
1952 }
1953 break;
[2]1954
[133]1955 case UM_SETUP6:
1956 if (helpid == WinQueryWindowUShort(hwnd, QWS_ID))
1957 {
1958 if ((char *) mp1 &&
1959 (!hwndBubble ||
1960 WinQueryWindowULong(hwndBubble, QWL_USER) != hwnd) &&
1961 !WinQueryCapture(HWND_DESKTOP))
1962 {
[2]1963
[133]1964 RECTL rcl;
1965 POINTL ptl;
[2]1966
[133]1967 WinQueryPointerPos(HWND_DESKTOP,
1968 &ptl);
1969 WinMapWindowPoints(HWND_DESKTOP,
1970 hwnd,
1971 &ptl,
1972 1);
1973 WinQueryWindowRect(hwnd, &rcl);
1974 if (WinPtInRect(WinQueryAnchorBlock(hwnd),
1975 &rcl,
1976 &ptl))
1977 BubbleHelp(hwnd,
1978 FALSE,
1979 TRUE,
1980 FALSE,
1981 (char *) mp1);
[2]1982 }
[133]1983 }
1984 return 0;
[2]1985
[133]1986 case WM_MENUEND:
1987 if (hwndMenu == (HWND) mp2)
1988 {
1989 WinDestroyWindow(hwndMenu);
1990 hwndMenu = (HWND) 0;
1991 }
1992 break;
[2]1993
[133]1994 case WM_CONTEXTMENU:
1995 if (hwndMenu)
1996 WinDestroyWindow(hwndMenu);
1997 hwndMenu = (HWND) 0;
1998 id = WinQueryWindowUShort(hwnd, QWS_ID);
1999 *dv = 0;
2000 WinQueryWindowText(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
2001 id + 50),
2002 sizeof(dv),
2003 dv);
2004 if (isalpha(*dv))
2005 {
2006 hwndMenu = WinLoadMenu(HWND_DESKTOP,
2007 FM3ModHandle,
2008 MAIN_DRIVES);
2009 if (hwndMenu)
2010 {
2011 if (!(driveflags[toupper(*dv) - 'A'] & DRIVE_REMOTE))
2012 WinEnableMenuItem(hwndMenu,
2013 IDM_DETACH,
2014 FALSE);
2015 if (driveflags[toupper(*dv) - 'A'] & DRIVE_NOTWRITEABLE)
2016 {
2017 WinEnableMenuItem(hwndMenu,
2018 IDM_MKDIR,
2019 FALSE);
2020 WinEnableMenuItem(hwndMenu,
2021 IDM_FORMAT,
2022 FALSE);
2023 WinEnableMenuItem(hwndMenu,
2024 IDM_OPTIMIZE,
2025 FALSE);
2026 WinEnableMenuItem(hwndMenu,
2027 IDM_UNDELETE,
2028 FALSE);
2029 }
2030 if (!(driveflags[toupper(*dv) - 'A'] & DRIVE_REMOVABLE))
2031 {
2032 WinEnableMenuItem(hwndMenu,
2033 IDM_EJECT,
2034 FALSE);
2035 WinEnableMenuItem(hwndMenu,
2036 IDM_LOCK,
2037 FALSE);
2038 WinEnableMenuItem(hwndMenu,
2039 IDM_UNLOCK,
2040 FALSE);
2041 }
2042 /*
2043 if(!(driveflags[toupper(*dv) - 'A'] & DRIVE_CDROM)) {
2044 WinEnableMenuItem(hwndMenu,
2045 IDM_CLOSETRAY,
2046 FALSE);
2047 }
2048 */
2049 PopupMenu(hwnd,
2050 hwnd,
2051 hwndMenu);
2052 }
2053 }
2054 return MRFROMSHORT(TRUE);
[2]2055
[133]2056 case WM_BUTTON2CLICK:
2057 shiftstate = (SHORT2FROMMP(mp2) & (KC_ALT | KC_SHIFT | KC_CTRL));
2058 if (!(shiftstate & KC_CTRL))
2059 break;
[2]2060
[133]2061 case WM_CHORD:
2062 case WM_BUTTON3CLICK:
2063 id = WinQueryWindowUShort(hwnd, QWS_ID);
2064 *dv = 0;
2065 WinQueryWindowText(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
2066 id + 50),
2067 sizeof(dv),
2068 dv);
2069 if (isalpha(*dv))
2070 {
2071 strcat(dv, "\\");
2072 if (!FindDirCnrByName(dv, TRUE))
2073 OpenDirCnr((HWND) 0,
2074 hwndMain,
2075 hwndTree,
2076 FALSE,
2077 dv);
2078 }
2079 break;
[2]2080
[133]2081 case WM_COMMAND:
2082 PostMsg(hwnd, UM_COMMAND, mp1, mp2);
2083 return 0;
[2]2084
[133]2085 case UM_COMMAND:
2086 id = WinQueryWindowUShort(hwnd, QWS_ID);
2087 *dv = 0;
2088 WinQueryWindowText(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
2089 id + 50),
2090 sizeof(dv),
2091 dv);
2092 if (isalpha(*dv))
2093 {
2094 strcat(dv, "\\");
2095 CommonDriveCmd(hwnd, dv, SHORT1FROMMP(mp1));
2096 }
2097 return 0;
[2]2098
[133]2099 case DM_DRAGOVER:
2100 id = WinQueryWindowUShort(hwnd, QWS_ID);
2101 *dv = 0;
2102 WinQueryWindowText(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
2103 id + 50),
2104 sizeof(dv),
2105 dv);
2106 if (isalpha(*dv) &&
2107 !(driveflags[toupper(*dv) - 'A'] & DRIVE_NOTWRITEABLE))
2108 {
2109 if (!emphasized)
2110 {
2111 emphasized = TRUE;
2112 DrawTargetEmphasis(hwnd, emphasized);
2113 }
2114 if (AcceptOneDrop(mp1, mp2))
2115 return MRFROM2SHORT(DOR_DROP,
2116 DO_MOVE);
2117 return MRFROM2SHORT(DOR_NEVERDROP, 0);
2118 }
2119 break;
[2]2120
[133]2121 case DM_DRAGLEAVE:
2122 id = WinQueryWindowUShort(hwnd, QWS_ID);
2123 *dv = 0;
2124 WinQueryWindowText(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
2125 id + 50),
2126 sizeof(dv),
2127 dv);
2128 if (isalpha(*dv) &&
2129 !(driveflags[toupper(*dv) - 'A'] & DRIVE_NOTWRITEABLE))
2130 {
2131 if (emphasized)
2132 {
2133 emphasized = FALSE;
2134 DrawTargetEmphasis(hwnd, emphasized);
2135 }
2136 }
2137 break;
[2]2138
[133]2139 case DM_DROPHELP:
2140 id = WinQueryWindowUShort(hwnd, QWS_ID);
2141 *dv = 0;
2142 WinQueryWindowText(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
2143 id + 50), sizeof(dv), dv);
2144 if (isalpha(*dv) &&
2145 !(driveflags[toupper(*dv) - 'A'] & DRIVE_NOTWRITEABLE))
2146 {
2147 DropHelp(mp1, mp2, hwnd, GetPString(IDS_DRIVEDROPHELP));
2148 return 0;
2149 }
2150 break;
[2]2151
[133]2152 case DM_DROP:
2153 id = WinQueryWindowUShort(hwnd, QWS_ID);
2154 *dv = 0;
2155 WinQueryWindowText(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
2156 id + 50),
2157 sizeof(dv),
2158 dv);
2159 if (isalpha(*dv) &&
2160 !(driveflags[toupper(*dv) - 'A'] & DRIVE_NOTWRITEABLE))
2161 {
[2]2162
[133]2163 CNRDRAGINFO cnd;
2164 LISTINFO *li;
2165 ULONG action = UM_ACTION;
[2]2166
[133]2167 if (emphasized)
2168 {
2169 emphasized = FALSE;
2170 DrawTargetEmphasis(hwnd, emphasized);
2171 }
2172 memset(&cnd, 0, sizeof(cnd));
2173 cnd.pDragInfo = (PDRAGINFO) mp1;
2174 cnd.pRecord = NULL;
2175 li = DoFileDrop(hwnd,
2176 NULL,
2177 TRUE,
2178 MPFROM2SHORT(TREE_CNR, CN_DROP),
2179 MPFROMP(&cnd));
2180 if (li)
2181 {
2182 strcpy(li -> targetpath, dv);
2183 strcat(li -> targetpath, "\\");
2184 if (li -> list &&
2185 li -> list[0] &&
2186 IsRoot(li -> list[0]))
2187 li -> type = DO_LINK;
2188 else if (fDragndropDlg &&
2189 (!*li -> arcname || !li -> info))
2190 {
[2]2191
[133]2192 CHECKLIST cl;
[2]2193
[133]2194 memset(&cl, 0, sizeof(cl));
2195 cl.size = sizeof(cl);
2196 cl.flags = li -> type;
2197 cl.list = li -> list;
2198 cl.cmd = li -> type;
2199 cl.prompt = li -> targetpath;
2200 li -> type = WinDlgBox(HWND_DESKTOP,
2201 hwndMain,
2202 DropListProc,
2203 FM3ModHandle,
2204 DND_FRAME,
2205 MPFROMP(&cl));
2206 if (!li -> type)
2207 {
2208 FreeListInfo(li);
2209 return 0;
2210 }
2211 li -> list = cl.list;
2212 if (!li -> list || !li -> list[0])
2213 {
2214 FreeListInfo(li);
2215 return 0;
2216 }
2217 }
2218 else
2219 {
2220 if (!WinDlgBox(HWND_DESKTOP,
2221 hwndMain,
2222 WalkDlgProc,
2223 FM3ModHandle,
2224 WALK_FRAME,
2225 MPFROMP(li -> targetpath)) ||
2226 !*li -> targetpath)
2227 {
2228 FreeListInfo(li);
2229 return 0;
2230 }
2231 }
2232 switch (li -> type)
2233 {
2234 case DND_LAUNCH:
2235 strcat(li -> targetpath, " %a");
2236 ExecOnList(hwndMain,
2237 li -> targetpath,
2238 PROMPT | WINDOWED,
2239 NULL,
2240 li -> list,
2241 NULL);
2242 FreeList(li -> list);
2243 li -> list = NULL;
2244 break;
2245 case DO_LINK:
2246 if (fLinkSetsIcon)
2247 {
2248 li -> type = IDM_SETICON;
2249 action = UM_MASSACTION;
2250 }
2251 else
2252 li -> type = IDM_COMPARE;
2253 break;
2254 case DND_EXTRACT:
2255 if (*li -> targetpath &&
2256 !IsFile(li -> targetpath))
2257 li -> type = IDM_EXTRACT;
2258 break;
2259 case DND_MOVE:
2260 li -> type = IDM_MOVE;
2261 if (*li -> targetpath &&
2262 IsFile(li -> targetpath) == 1)
2263 {
2264 action = UM_MASSACTION;
2265 li -> type = IDM_ARCHIVEM;
2266 }
2267 break;
2268 case DND_WILDMOVE:
2269 li -> type = IDM_WILDMOVE;
2270 if (*li -> targetpath &&
2271 IsFile(li -> targetpath) == 1)
2272 {
2273 action = UM_MASSACTION;
2274 li -> type = IDM_ARCHIVEM;
2275 }
2276 break;
2277 case DND_OBJECT:
2278 li -> type = IDM_OBJECT;
2279 action = UM_MASSACTION;
2280 break;
2281 case DND_SHADOW:
2282 li -> type = IDM_SHADOW;
2283 action = UM_MASSACTION;
2284 break;
2285 case DND_COMPARE:
2286 li -> type = IDM_COMPARE;
2287 break;
2288 case DND_SETICON:
2289 action = UM_MASSACTION;
2290 li -> type = IDM_SETICON;
2291 break;
2292 case DND_COPY:
2293 li -> type = IDM_COPY;
2294 if (*li -> targetpath &&
2295 IsFile(li -> targetpath) == 1)
2296 {
2297 action = UM_MASSACTION;
2298 li -> type = IDM_ARCHIVE;
2299 }
2300 break;
2301 case DND_WILDCOPY:
2302 li -> type = IDM_WILDCOPY;
2303 if (*li -> targetpath &&
2304 IsFile(li -> targetpath) == 1)
2305 {
2306 action = UM_MASSACTION;
2307 li -> type = IDM_ARCHIVE;
2308 }
2309 break;
2310 default:
2311 if (*li -> arcname && li -> info)
2312 {
2313 action = UM_MASSACTION;
2314 li -> type = (li -> type == DO_MOVE) ? IDM_FAKEEXTRACTM :
2315 IDM_FAKEEXTRACT;
2316 }
2317 else if (*li -> targetpath && IsFile(li -> targetpath) == 1)
2318 {
2319 action = UM_MASSACTION;
2320 li -> type = (li -> type == DO_MOVE) ? IDM_ARCHIVEM : IDM_ARCHIVE;
2321 }
2322 else
2323 li -> type = (li -> type == DO_MOVE) ? IDM_MOVE : IDM_COPY;
2324 break;
2325 }
2326 if (!li -> list || !li -> list[0])
2327 FreeListInfo(li);
2328 else
2329 WinSendMsg(hwndTree,
2330 UM_ACTION,
2331 MPFROMP(li),
2332 MPFROMLONG(action));
2333 }
2334 return 0;
2335 }
2336 break;
[2]2337
[133]2338 case WM_DESTROY:
2339 if (hwndMenu)
2340 WinDestroyWindow(hwndMenu);
2341 hwndMenu = (HWND) 0;
2342 break;
2343 }
2344 return PFNWPButton(hwnd, msg, mp1, mp2);
[2]2345}
2346
[260]2347VOID BuildDriveBarButtons(HWND hwndT)
[133]2348{
2349 register ULONG x, y = 0;
2350 ULONG ulDriveNum, ulDriveMap, iconid;
2351 CHAR s[8];
2352 HENUM henum;
2353 HWND hwndB;
[2]2354
[133]2355 henum = WinBeginEnumWindows(hwndT);
[2]2356
[133]2357 while ((hwndB = WinGetNextWindow(henum)) != NULLHANDLE)
2358 WinDestroyWindow(hwndB);
2359
2360 WinEndEnumWindows(henum);
2361 if (fDrivebar)
2362 {
[2]2363 DosError(FERR_DISABLEHARDERR);
[133]2364 DosQCurDisk(&ulDriveNum, &ulDriveMap);
2365 for (x = 0; x < 26; x++)
2366 {
2367 if ((ulDriveMap & (1L << x)) &&
2368 !(driveflags[x] & DRIVE_IGNORE))
2369 {
2370 if (x > 1)
2371 {
2372 if (driveflags[x] & DRIVE_CDROM)
2373 iconid = CDROM_ICON;
2374 else
2375 iconid = (driveflags[x] & DRIVE_REMOVABLE) ?
2376 REMOVABLE_ICON :
2377 (driveflags[x] & DRIVE_REMOTE) ?
2378 REMOTE_ICON :
2379 (driveflags[x] & DRIVE_ZIPSTREAM) ?
2380 DRIVE_ICON :
2381 DRIVE_ICON;
[2]2382 }
[133]2383 else
2384 iconid = FLOPPY_ICON;
2385 sprintf(s, "#%lu", iconid);
2386 hwndB = WinCreateWindow(hwndT,
2387 GetPString(IDS_WCDRIVEBUTTONS),
2388 s,
2389 BS_NOPOINTERFOCUS | BS_BITMAP | BS_PUSHBUTTON,
2390 0,
2391 0,
2392 28,
2393 18,
2394 hwndT,
2395 HWND_TOP,
2396 y + IDM_DRIVEA,
2397 NULL,
2398 NULL);
2399 if (hwndB)
2400 {
2401 WinSetWindowPos(hwndB,
2402 HWND_BOTTOM,
2403 0,
2404 0,
2405 0,
2406 0,
2407 SWP_ZORDER);
2408 sprintf(s, "%c:", (CHAR) x + 'A');
2409 hwndB = WinCreateWindow(hwndT,
2410 WC_STATIC,
2411 s,
2412 SS_TEXT | DT_LEFT | DT_VCENTER,
2413 0,
2414 0,
2415 10,
2416 18,
2417 hwndT,
2418 HWND_TOP,
2419 y + IDM_DRIVEATEXT,
2420 NULL,
2421 NULL);
2422 if (hwndB)
2423 {
2424 SetPresParams(hwndB,
2425 &RGBGREY,
2426 &RGBBLACK,
2427 &RGBGREY,
2428 GetPString(IDS_6HELVTEXT));
2429 WinSetWindowPos(hwndB,
2430 HWND_BOTTOM,
2431 0,
2432 0,
2433 0,
2434 0,
2435 SWP_ZORDER);
2436 }
2437 y++;
2438 }
2439 }
2440 }
2441 }
2442 PostMsg(WinQueryWindow(hwndT, QW_PARENT),
2443 WM_UPDATEFRAME,
2444 MPFROMLONG(FCF_SIZEBORDER),
2445 MPVOID);
[2]2446}
2447
[133]2448VOID ResizeDrives(HWND hwndT, long xwidth)
2449{
2450 register ULONG ctrlxpos = 2, ctrlypos = 0, ctrlxsize;
2451 HENUM henum;
2452 HWND hwndB;
2453 RECTL rcl;
[2]2454
2455 DriveLines = 0;
[133]2456 if (!fDrivebar)
[2]2457 return;
[133]2458 if (!xwidth)
2459 {
2460 WinQueryWindowRect(hwndT, &rcl);
[2]2461 xwidth = rcl.xRight - ((WinQuerySysValue(HWND_DESKTOP,
[133]2462 SV_CYSIZEBORDER) * 2) + 2);
[2]2463 }
[133]2464 henum = WinBeginEnumWindows(hwndT);
2465 while ((hwndB = WinGetNextWindow(henum)) != NULLHANDLE)
2466 {
2467 if (WinQueryWindowUShort(hwndB, QWS_ID) > IDM_DRIVEA + 27)
[2]2468 ctrlxsize = 10;
2469 else
2470 ctrlxsize = 28;
2471 WinSetWindowPos(hwndB,
[133]2472 HWND_TOP,
2473 ctrlxpos,
2474 ctrlypos,
2475 ctrlxsize,
2476 18,
2477 SWP_MOVE | SWP_SHOW);
[2]2478 ctrlxpos += (ctrlxsize + 2);
[133]2479 if (ctrlxsize == 10)
2480 {
2481 if (ctrlxpos + (42 + ((fShowTarget && DriveLines == 0) ?
2482 256 :
2483 0)) > xwidth)
2484 {
2485 ctrlxpos = 2;
2486 ctrlypos += 18;
2487 DriveLines++;
[2]2488 }
2489 }
2490 }
[133]2491 if (ctrlxpos == 2 && DriveLines)
[2]2492 DriveLines--;
2493}
2494
[133]2495MRESULT EXPENTRY StatusProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
2496{
2497 static HWND hwndE = (HWND) 0, hwndB = (HWND) 0;
[2]2498 static CHAR lastcmd[1024] = "";
2499
[133]2500 switch (msg)
2501 {
2502 case WM_CREATE:
2503 {
2504 MRESULT mr = PFNWPStatic(hwnd, msg, mp1, mp2);
[2]2505
[133]2506 SetPresParams(hwnd,
2507 &RGBGREY,
2508 &RGBBLACK,
2509 &RGBGREY,
2510 GetPString(IDS_8HELVBOLDTEXT));
2511 return mr;
2512 }
[2]2513
[133]2514 case WM_PRESPARAMCHANGED:
2515 if (fRunning)
2516 {
[2]2517
[133]2518 ULONG AttrFound, AttrValue[64], cbRetLen;
[2]2519
[133]2520 cbRetLen = WinQueryPresParam(hwnd,
2521 (ULONG) mp1,
2522 0,
2523 &AttrFound,
2524 (ULONG) sizeof(AttrValue),
2525 &AttrValue, 0);
2526 if (cbRetLen)
2527 {
2528 switch (AttrFound)
2529 {
2530 case PP_FONTNAMESIZE:
2531 PostMsg(WinQueryWindow(hwnd, QW_PARENT),
2532 WM_UPDATEFRAME,
2533 MPFROMLONG(FCF_SIZEBORDER),
2534 MPVOID);
2535 break;
2536 }
2537 }
2538 }
2539 break;
[2]2540
[133]2541 case WM_CONTEXTMENU:
2542 PostMsg(hwndMain,
2543 UM_CONTEXTMENU,
2544 MPVOID,
2545 MPVOID);
2546 return MRFROMSHORT(TRUE);
[2]2547
[133]2548 case WM_BEGINDRAG:
2549 if (hwndTree)
2550 {
[2]2551
[133]2552 SWP swp;
2553 ULONG fl = SWP_ACTIVATE | SWP_SHOW | SWP_ZORDER;
[2]2554
[133]2555 WinQueryWindowPos(hwndTree, &swp);
2556 if (!(swp.fl & SWP_MAXIMIZE))
2557 fl |= SWP_RESTORE;
2558 WinSetWindowPos(hwndTree, HWND_TOP, 0, 0, 0, 0, fl);
2559 }
2560 break;
[2]2561
[133]2562 case UM_SETUP:
2563 if (mp1)
2564 strcpy(lastcmd, (CHAR *) mp1);
2565 return 0;
[2]2566
[133]2567 case UM_RESCAN:
2568 if (hwndE &&
2569 WinIsWindow(WinQueryAnchorBlock(hwnd), hwndE))
2570 WinDestroyWindow(hwndE);
2571 if (hwndB &&
2572 WinIsWindow(WinQueryAnchorBlock(hwnd), hwndB))
2573 WinDestroyWindow(hwndB);
2574 hwndE = hwndB = (HWND) 0;
2575 return 0;
[2]2576
[133]2577 case WM_COMMAND:
2578 switch (SHORT1FROMMP(mp1))
2579 {
2580 case COMMAND_BUTTON:
2581 PostMsg(hwndE, msg, mp1, mp2);
2582 break;
2583 }
2584 return 0;
[2]2585
[133]2586 case WM_MOUSEMOVE:
2587 shiftstate = (SHORT2FROMMP(mp2) & (KC_ALT | KC_SHIFT | KC_CTRL));
2588 {
2589 USHORT id = WinQueryWindowUShort(hwnd, QWS_ID);
2590 char *s = NULL;
[2]2591
[133]2592 if (fOtherHelp)
2593 {
2594 if ((!hwndBubble || WinQueryWindowULong(hwndBubble, QWL_USER) != hwnd) &&
2595 !WinQueryCapture(HWND_DESKTOP))
2596 {
2597 switch (id)
2598 {
2599 case IDM_ATTRS:
2600 if (WinQueryWindowTextLength(hwnd))
2601 s = GetPString(IDS_ATTRSBUTTONHELP);
2602 break;
2603 case IDM_INFO:
2604 if (WinQueryWindowTextLength(hwnd))
2605 s = GetPString(IDS_INFOBUTTONHELP);
2606 break;
2607 case IDM_RENAME:
2608 if (WinQueryWindowTextLength(hwnd))
2609 s = GetPString(IDS_NAMEBUTTONHELP);
2610 break;
2611 case MAIN_STATUS2:
2612 if (!hwndE)
2613 s = GetPString(IDS_STATUS2HELP);
2614 break;
2615 default:
2616 break;
2617 }
2618 if (s)
2619 MakeBubble(hwnd, FALSE, s);
2620 else if (hwndBubble)
2621 WinDestroyWindow(hwndBubble);
2622 }
2623 }
2624 switch (id)
2625 {
2626 case IDM_ATTRS:
2627 case IDM_INFO:
2628 case IDM_RENAME:
2629 case MAIN_STATUS2:
2630 return CommonTextProc(hwnd, msg, mp1, mp2);
2631 default:
2632 break;
2633 }
2634 }
2635 break;
[2]2636
[133]2637 case WM_BUTTON2DOWN:
2638 case WM_BUTTON2UP:
2639 case UM_FOCUSME:
2640 return CommonTextButton(hwnd, msg, mp1, mp2);
[2]2641
[133]2642 case WM_BUTTON1DOWN:
2643 case WM_BUTTON1UP:
2644 case WM_BUTTON3DOWN:
2645 case WM_BUTTON3UP:
2646 {
2647 USHORT id;
2648
2649 id = WinQueryWindowUShort(hwnd, QWS_ID);
2650 switch (id)
[2]2651 {
[133]2652 case IDM_ATTRS:
2653 case IDM_INFO:
2654 case IDM_RENAME:
2655 case MAIN_STATUS2:
2656 return CommonTextButton(hwnd, msg, mp1, mp2);
2657 default:
2658 PostMsg(hwnd,
2659 UM_FOCUSME,
2660 MPVOID,
2661 MPVOID);
2662 break;
2663 }
2664 }
2665 break;
[2]2666
[133]2667 case WM_SETFOCUS:
2668 if (mp2)
2669 {
[2]2670
[133]2671 USHORT id;
[2]2672
[133]2673 id = WinQueryWindowUShort(hwnd, QWS_ID);
2674 if (id == MAIN_STATUS2 &&
2675 hwndE)
2676 WinSendMsg(hwnd,
2677 UM_RESCAN,
2678 MPVOID,
2679 MPVOID);
2680 else
2681 return CommonTextButton(hwnd, msg, mp1, mp2);
2682 }
2683 break;
[2]2684
[133]2685 case WM_BUTTON1CLICK:
2686 {
2687 USHORT id;
[2]2688
[133]2689 id = WinQueryWindowUShort(hwnd, QWS_ID);
2690 if (id == MAIN_STATUS)
[2]2691 {
[133]2692 if (SHORT2FROMMP(mp2) & KC_CTRL)
2693 PostMsg(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
2694 FID_CLIENT),
2695 WM_COMMAND,
2696 MPFROM2SHORT(IDM_WINDOWDLG, 0),
2697 MPVOID);
2698 else if (hwndTree)
2699 PostMsg(hwndTree,
2700 UM_TIMER,
2701 MPVOID,
2702 MPVOID);
[2]2703 }
[133]2704 }
2705 break;
[2]2706
[133]2707 case UM_CLICKED:
2708 case UM_CLICKED3:
2709 {
2710 USHORT id;
2711
2712 id = WinQueryWindowUShort(hwnd, QWS_ID);
2713 if (id == MAIN_STATUS2 &&
2714 !hwndE)
[2]2715 {
2716
[133]2717 SWP swp;
2718 CHAR directory[CCHMAXPATH];
2719 PFNWP oldproce;
[2]2720
[133]2721 *directory = 0;
2722 TopWindowName(hwndMain, (HWND) 0, directory);
2723 WinQueryWindowPos(hwnd, &swp);
2724 hwndB = WinCreateWindow(hwnd,
2725 WC_BUTTON,
2726 "+",
2727 WS_VISIBLE | BS_PUSHBUTTON |
2728 BS_NOPOINTERFOCUS,
2729 swp.cx - swp.cy,
2730 0,
2731 swp.cy,
2732 swp.cy,
2733 hwnd,
2734 HWND_TOP,
2735 COMMAND_BUTTON,
2736 NULL,
2737 NULL);
2738 hwndE = WinCreateWindow(hwnd,
2739 WC_ENTRYFIELD,
2740 NULL,
2741 WS_VISIBLE | ES_AUTOSCROLL,
2742 0,
2743 0,
2744 swp.cx - swp.cy,
2745 swp.cy,
2746 hwnd,
2747 HWND_TOP,
2748 COMMAND_LINE,
2749 NULL,
2750 NULL);
2751 if (!hwndE || !hwndB)
2752 {
2753 PostMsg(hwnd,
2754 UM_RESCAN,
2755 MPVOID,
2756 MPVOID);
2757 return 0;
2758 }
2759 WinSendMsg(hwndE,
2760 EM_SETTEXTLIMIT,
2761 MPFROM2SHORT(1024, 0),
2762 MPVOID);
2763 WinSetWindowText(hwndStatus,
2764 directory);
2765 if (*lastcmd)
2766 WinSetWindowText(hwndE,
2767 lastcmd);
2768 else
2769 WinSetWindowText(hwndE,
2770 GetPString(IDS_HELPCMDTEXT));
2771 oldproce = WinSubclassWindow(hwndE,
2772 (PFNWP) CommandLineProc);
2773 if (oldproce)
2774 WinSetWindowPtr(hwndE,
[186]2775 QWL_USER,
[133]2776 (PVOID) oldproce);
2777 PostMsg(hwndE,
2778 UM_FOCUSME,
2779 MPVOID,
2780 MPVOID);
2781 PostMsg(hwndE,
2782 EM_SETSEL,
2783 MPFROM2SHORT(0, 1024),
2784 MPVOID);
2785 return 0;
2786 }
2787 if (msg == UM_CLICKED3 ||
2788 (SHORT2FROMMP(mp2) & KC_CTRL))
2789 {
2790 switch (id)
2791 {
2792 case IDM_ATTRS:
2793 id = IDM_SORTSIZE;
2794 break;
2795 case IDM_INFO:
2796 id = IDM_SORTLWDATE;
2797 break;
2798 case IDM_RENAME:
2799 id = IDM_SORTFILENAME;
2800 break;
2801 }
2802 }
2803 PostMsg(WinQueryWindow(hwnd, QW_PARENT),
2804 WM_COMMAND,
2805 MPFROM2SHORT(id, 0),
2806 MPVOID);
2807 }
2808 return 0;
[2]2809
[133]2810 case WM_PAINT:
2811 {
2812 USHORT id;
[2]2813
[133]2814 id = WinQueryWindowUShort(hwnd, QWS_ID);
2815 switch (id)
2816 {
2817 case IDM_ATTRS:
2818 case IDM_INFO:
2819 case IDM_RENAME:
2820 case MAIN_STATUS2:
2821 PaintRecessedWindow(hwnd, (HPS) 0, TRUE, FALSE);
2822 break;
2823 default:
2824 PaintRecessedWindow(hwnd, (HPS) 0, FALSE, TRUE);
2825 break;
2826 }
2827 if (id == IDM_RENAME)
2828 {
[2]2829
[133]2830 HPS hps;
[2]2831
[133]2832 hps = WinBeginPaint(hwnd, (HPS) 0, NULL);
2833 if (hps)
2834 {
2835 PaintSTextWindow(hwnd, hps);
2836 WinEndPaint(hps);
2837 }
2838 return 0;
[2]2839 }
[133]2840 }
2841 break;
[2]2842
[133]2843 }
2844 return PFNWPStatic(hwnd, msg, mp1, mp2);
[2]2845}
2846
[133]2847MRESULT EXPENTRY ToolBackProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
2848{
2849 switch (msg)
2850 {
2851 case WM_CREATE:
2852 hwndToolback = hwnd;
2853 SetPresParams(hwnd,
2854 &RGBGREY,
2855 &RGBBLACK,
2856 &RGBGREY,
2857 GetPString(IDS_8HELVTEXT));
2858 break;
[2]2859
[133]2860 case WM_MOUSEMOVE:
2861 shiftstate = (SHORT2FROMMP(mp2) & (KC_ALT | KC_SHIFT | KC_CTRL));
2862 break;
[2]2863
[133]2864 case WM_CONTROLPOINTER:
2865 if (!fNoFinger &&
2866 SHORT1FROMMP(mp1) < 25000)
2867 return MRFROMLONG(hptrFinger);
2868 break;
[2]2869
[133]2870 case WM_CHAR:
2871 shiftstate = (SHORT1FROMMP(mp1) & (KC_SHIFT | KC_ALT | KC_CTRL));
2872 break;
[2]2873
[133]2874 case WM_COMMAND:
2875 case UM_COMMAND:
2876 return WinSendMsg(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
2877 FID_CLIENT),
2878 msg,
2879 mp1,
2880 mp2);
[2]2881
[133]2882 case WM_PAINT:
2883 {
2884 HPS hps;
2885 RECTL rcl;
[2]2886
[133]2887 hps = WinBeginPaint(hwnd, (HPS) 0, NULL);
2888 if (hps)
2889 {
2890 WinQueryWindowRect(hwnd, &rcl);
2891 WinFillRect(hps, &rcl, CLR_PALEGRAY);
2892 WinEndPaint(hps);
2893 }
2894 PaintRecessedWindow(hwnd,
2895 (HPS) 0,
2896 TRUE,
2897 FALSE);
2898 }
2899 break;
[2]2900
[133]2901 case UM_SETUP:
2902 {
2903 USHORT id;
2904 TOOL *tool;
[2]2905
[133]2906 id = SHORT1FROMMP(mp1);
2907 tool = find_tool(id);
2908 if (tool)
2909 {
2910 del_tool(tool);
2911 WinShowWindow(WinWindowFromID(hwnd, id), FALSE);
2912 if (fToolTitles)
2913 WinShowWindow(WinWindowFromID(hwnd, id + 25000), FALSE);
2914 ResizeTools(hwnd);
2915 }
2916 }
2917 return 0;
[2]2918
[133]2919 case WM_CHORD:
2920 {
2921 USHORT id;
[2]2922
[133]2923 id = (USHORT) WinDlgBox(HWND_DESKTOP,
2924 hwnd,
2925 AddToolProc,
2926 FM3ModHandle,
2927 ADDBTN_FRAME,
2928 MPVOID);
2929 if (id && id != (USHORT) - 1)
2930 WinSendMsg(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
2931 FID_CLIENT),
2932 WM_COMMAND,
2933 MPFROM2SHORT(IDM_CREATETOOL, 0),
2934 MPFROM2SHORT(id, 0));
2935 }
2936 break;
[2]2937
[133]2938 case WM_CONTEXTMENU:
2939 if (WinDlgBox(HWND_DESKTOP,
2940 hwnd,
2941 ToolIODlgProc,
2942 FM3ModHandle,
2943 SVBTN_FRAME,
2944 MPVOID))
2945 BuildTools(hwnd, TRUE);
2946 return MRFROMSHORT(TRUE);
[2]2947
[133]2948 case WM_CLOSE:
2949 WinDestroyWindow(hwnd);
2950 return 0;
[2]2951
[133]2952 case WM_DESTROY:
2953 break;
2954 }
2955 return WinDefWindowProc(hwnd, msg, mp1, mp2);
[2]2956}
2957
[178]2958static VOID AdjustSizeOfClient(PSWP pswp, PRECTL prectl)
[133]2959{
2960 SWP swp;
2961 RECTL rectl;
[2]2962
[133]2963 if (fFreeTree)
2964 return;
2965 if (pswp)
2966 {
2967 if (WinQueryWindowPos(hwndTree, &swp) &&
2968 !(swp.fl & (SWP_MINIMIZE | SWP_HIDE | SWP_MAXIMIZE)))
2969 {
2970 pswp -> x = swp.cx;
2971 pswp -> cx -= swp.cx;
2972 }
2973 }
2974 if (prectl)
2975 {
2976 if (WinQueryWindowPos(hwndTree, &swp) &&
2977 !(swp.fl & (SWP_MINIMIZE | SWP_HIDE | SWP_MAXIMIZE)) &&
2978 WinQueryWindowRect(hwndTree, &rectl))
2979 {
2980 prectl -> xLeft = rectl.xRight;
2981 prectl -> xRight -= rectl.xRight;
2982 }
2983 }
[2]2984}
2985
[133]2986VOID FillClient(HWND hwndClient, PSWP pswp, PRECTL prectl, BOOL avoidtree)
2987{
2988 ULONG adjust;
[2]2989
[133]2990 adjust = WinQuerySysValue(HWND_DESKTOP, SV_CYICON);
2991 if (pswp)
2992 WinQueryWindowPos(hwndClient, pswp);
2993 if (prectl)
2994 WinQueryWindowRect(hwndClient, prectl);
2995 if (avoidtree && !fFreeTree)
2996 AdjustSizeOfClient(pswp, prectl);
2997 if (prectl)
2998 prectl -> yBottom += adjust;
2999 if (pswp)
3000 {
3001 if (!avoidtree || fFreeTree)
3002 pswp -> x = 0;
3003 pswp -> y = adjust;
3004 if (pswp -> cy >= adjust)
3005 pswp -> cy -= adjust;
3006 else
3007 pswp -> cy = 0;
3008 }
[2]3009}
3010
[178]3011static VOID MoveChildrenAwayFromTree(HWND hwndClient)
[133]3012{
3013 SWP swpC, swpT, swp;
3014 USHORT id;
3015 HWND hwndChild;
3016 HENUM henum;
[2]3017
[133]3018 if (fFreeTree)
3019 return;
3020 WinQueryWindowPos(hwndClient, &swpC);
3021 if (swpC.fl & (SWP_MINIMIZE | SWP_HIDE))
3022 return;
3023 WinQueryWindowPos(hwndTree, &swpT);
3024 henum = WinBeginEnumWindows(hwndClient);
3025 while ((hwndChild = WinGetNextWindow(henum)) != NULLHANDLE)
3026 {
3027 id = WinQueryWindowUShort(hwndChild, QWS_ID);
3028 if (!id || id == TREE_FRAME)
3029 continue;
3030 WinQueryWindowPos(hwndChild, &swp);
3031 if (!(swp.fl & (SWP_MAXIMIZE | SWP_HIDE | SWP_MINIMIZE)))
3032 {
3033 if (swp.x < swpT.cx)
3034 {
3035 swp.x = swpT.cx;
3036 if (swp.x + swp.cx > swpC.cx)
3037 swp.cx = swpC.cx - swp.x;
3038 if (swp.cx > 24)
3039 WinSetWindowPos(hwndChild, HWND_TOP, swp.x, swp.y, swp.cx, swp.cy,
3040 SWP_SIZE | SWP_MOVE | SWP_SHOW);
3041 }
3042 }
3043 }
3044 WinEndEnumWindows(henum);
[2]3045}
3046
[178]3047static VOID ArrangeIcons(HWND hwndClient)
[133]3048{
3049 HENUM henum;
3050 HWND hwndChild;
3051 SWP swp;
[2]3052
[133]3053 henum = WinBeginEnumWindows(hwndClient);
3054 while ((hwndChild = WinGetNextWindow(henum)) != NULLHANDLE)
3055 {
3056 WinQueryWindowPos(hwndChild, &swp);
3057 if (swp.fl & (SWP_MINIMIZE | SWP_HIDE))
3058 {
3059 WinSetWindowUShort(hwndChild, QWS_XMINIMIZE, (USHORT) - 1);
3060 WinSetWindowUShort(hwndChild, QWS_YMINIMIZE, (USHORT) - 1);
3061 WinSetWindowPos(hwndChild, HWND_TOP, 0, 0, 0, 0,
3062 SWP_MOVE | SWP_SHOW | SWP_FOCUSDEACTIVATE);
3063 }
3064 }
3065 WinEndEnumWindows(henum);
[2]3066}
3067
[178]3068static VOID NextChild(HWND hwndClient, BOOL previous)
[133]3069{
3070 HENUM henum;
3071 HWND hwndActive, hwndNext, hwndPrev = (HWND) 0;
3072 BOOL next = FALSE, once = FALSE;
[2]3073
[133]3074 previous = !previous;
[2]3075
[133]3076 hwndActive = WinQueryActiveWindow(hwndClient);
3077 if (!hwndActive)
3078 next = TRUE;
3079 henum = WinBeginEnumWindows(hwndClient);
3080 for (;;)
3081 {
3082 hwndNext = WinGetNextWindow(henum);
3083 if (hwndNext)
3084 {
3085 if (!WinQueryWindowUShort(hwndNext, QWS_ID))
3086 continue;
3087 if (next)
3088 break;
3089 if (hwndNext == hwndActive)
3090 {
3091 if (!previous && hwndPrev)
3092 {
3093 hwndNext = hwndPrev;
3094 break;
[2]3095 }
[133]3096 else if (previous)
3097 next = TRUE;
3098 }
3099 hwndPrev = hwndNext;
3100 }
3101 else
3102 {
3103 if ((!next && previous) || once)
3104 break;
3105 else if (!previous)
3106 {
3107 hwndNext = hwndPrev;
3108 break;
3109 }
3110 else
3111 once = next = TRUE;
3112 }
3113 }
3114 WinEndEnumWindows(henum);
[2]3115
[133]3116 if (hwndNext && hwndNext != hwndActive)
3117 {
3118 WinSetWindowPos(hwndNext, HWND_TOP, 0, 0, 0, 0, SWP_ZORDER | SWP_ACTIVATE);
3119 WinSetWindowPos(hwndActive, ((previous) ? HWND_BOTTOM : hwndNext),
3120 0, 0, 0, 0, SWP_ZORDER);
3121 }
[2]3122}
3123
[133]3124BOOL CloseChildren(HWND hwndClient)
3125{
3126 HENUM henum;
3127 HWND hwndChild;
3128 BOOL ret = FALSE;
[2]3129
[133]3130 fNoTileUpdate = TRUE;
3131 henum = WinBeginEnumWindows(hwndClient);
3132 while ((hwndChild = WinGetNextWindow(henum)) != NULLHANDLE)
3133 {
3134 if (hwndChild != hwndTree)
3135 {
3136 WinSendMsg(WinWindowFromID(hwndChild, FID_CLIENT),
3137 WM_SAVEAPPLICATION,
3138 MPVOID,
3139 MPVOID);
3140 if (WinSendMsg(WinWindowFromID(hwndChild, FID_CLIENT),
3141 WM_CLOSE,
3142 MPVOID,
3143 MPVOID))
3144 {
3145 ret = TRUE;
3146 break;
3147 }
3148 }
3149 }
3150 WinEndEnumWindows(henum);
3151 fNoTileUpdate = FALSE;
3152 return ret;
[2]3153}
3154
[133]3155BOOL CloseDirCnrChildren(HWND hwndClient)
3156{
3157 /* returns TRUE if a directory container window was told to close */
[2]3158
[133]3159 HENUM henum;
3160 HWND hwndChild, hwndDir, hwndTemp;
3161 BOOL ret = FALSE;
[2]3162
[133]3163 fNoTileUpdate = TRUE;
3164 henum = WinBeginEnumWindows(hwndClient);
3165 while ((hwndChild = WinGetNextWindow(henum)) != NULLHANDLE)
3166 {
3167 if (hwndChild != hwndTree)
3168 {
3169 hwndTemp = WinWindowFromID(hwndChild, FID_CLIENT);
3170 if (hwndTemp)
3171 {
3172 hwndDir = WinWindowFromID(hwndTemp, DIR_CNR);
3173 if (hwndDir)
3174 {
3175 WinSendMsg(WinWindowFromID(hwndChild, FID_CLIENT),
3176 WM_CLOSE,
3177 MPVOID,
3178 MPVOID);
3179 ret = TRUE;
[2]3180 }
[133]3181 }
3182 }
3183 }
3184 WinEndEnumWindows(henum);
3185 fNoTileUpdate = FALSE;
3186 return ret;
[2]3187}
3188
[133]3189BOOL SaveDirCnrState(HWND hwndClient, CHAR * name)
3190{
3191 /* returns TRUE if any directory container windows existed */
[2]3192
[133]3193 HENUM henum;
3194 HWND hwndChild, hwndDir, hwndC;
3195 ULONG numsaves = 0, flWindowAttr;
3196 CHAR s[120], directory[CCHMAXPATH];
3197 SWP swp;
3198 BOOL ret = FALSE;
3199 DIRCNRDATA *dcd;
[2]3200
[133]3201 henum = WinBeginEnumWindows(hwndClient);
3202 while ((hwndChild = WinGetNextWindow(henum)) != NULLHANDLE)
3203 {
3204 if (hwndChild != hwndTree)
3205 {
3206 hwndC = WinWindowFromID(hwndChild, FID_CLIENT);
3207 if (hwndC)
3208 {
3209 hwndDir = WinWindowFromID(hwndC, DIR_CNR);
3210 if (hwndDir)
3211 {
3212 WinQueryWindowPos(hwndChild, &swp);
3213 *directory = 0;
3214 WinSendMsg(hwndC, UM_CONTAINERDIR, MPFROMP(directory), MPVOID);
3215 if (*directory)
3216 {
3217 sprintf(s, "%s%sDirCnrPos.%lu", (name) ? name : NullStr, (name) ? "." : NullStr,
3218 numsaves);
3219 PrfWriteProfileData(fmprof,
3220 FM3Str,
3221 s,
3222 (PVOID) & swp,
3223 sizeof(SWP));
3224 dcd = WinQueryWindowPtr(WinWindowFromID(hwndC, DIR_CNR), QWL_USER);
3225 if (dcd)
3226 {
3227 sprintf(s, "%s%sDirCnrSort.%lu", (name) ? name : NullStr, (name) ? "." : NullStr,
3228 numsaves);
3229 PrfWriteProfileData(fmprof, FM3Str, s, (PVOID) & dcd -> sortFlags,
3230 sizeof(INT));
3231 sprintf(s, "%s%sDirCnrFilter.%lu", (name) ? name : NullStr, (name) ? "." : NullStr,
3232 numsaves);
3233 PrfWriteProfileData(fmprof, FM3Str, s, (PVOID) & dcd -> mask,
3234 sizeof(MASK));
3235 sprintf(s, "%s%sDirCnrView.%lu", (name) ? name : NullStr, (name) ? "." : NullStr,
3236 numsaves);
3237 flWindowAttr = dcd -> flWindowAttr;
3238 if (!fLeaveTree && (flWindowAttr & CV_TREE))
3239 {
3240 flWindowAttr &= (~(CV_TREE | CV_ICON | CV_DETAIL | CV_TEXT));
3241 if (dcd -> lastattr)
3242 {
3243 if (dcd -> lastattr & CV_TEXT)
3244 flWindowAttr |= CV_TEXT;
3245 else if (dcd -> lastattr & CV_DETAIL)
3246 flWindowAttr |= CV_DETAIL;
3247 else if (dcd -> lastattr & CV_ICON)
3248 flWindowAttr |= CV_ICON;
3249 else
3250 flWindowAttr |= CV_NAME;
[2]3251 }
[133]3252 else
3253 flWindowAttr |= CV_NAME;
3254 }
3255 PrfWriteProfileData(fmprof, FM3Str, s, (PVOID) & flWindowAttr,
3256 sizeof(ULONG));
3257 }
3258 sprintf(s, "%s%sDirCnrDir.%lu", (name) ? name : NullStr, (name) ? "." : NullStr,
3259 numsaves++);
3260 PrfWriteProfileString(fmprof, FM3Str, s, directory);
3261 ret = TRUE;
3262 }
[2]3263 }
[133]3264 }
3265 }
3266 }
3267 WinEndEnumWindows(henum);
3268 if (ret)
3269 {
3270 if (WinQueryWindowPos(hwndTree, &swp))
3271 {
3272 sprintf(s, "%s%sLastTreePos", (name) ? name : NullStr, (name) ? "." : NullStr);
3273 PrfWriteProfileData(fmprof, FM3Str, s, (PVOID) & swp, sizeof(SWP));
3274 }
3275 sprintf(s, "%s%sNumDirsLastTime", (name) ? name : NullStr, (name) ? "." : NullStr);
3276 PrfWriteProfileData(fmprof, FM3Str, s, (PVOID) & numsaves, sizeof(ULONG));
3277 WinQueryWindowPos(WinQueryWindow(hwndClient, QW_PARENT), &swp);
3278 sprintf(s, "%s%sMySizeLastTime", (name) ? name : NullStr, (name) ? "." : NullStr);
3279 PrfWriteProfileData(fmprof, FM3Str, s, (PVOID) & swp, sizeof(SWP));
3280 }
3281 return ret;
[2]3282}
3283
[178]3284static VOID TransformSwp(PSWP pswp, double xtrans, double ytrans)
[133]3285{
3286 SWP swp;
3287 HWND hwnd;
[2]3288
[133]3289 if ((LONG) pswp -> x < 0L)
3290 {
3291 pswp -> cx -= abs(pswp -> x);
3292 pswp -> x = 0;
3293 }
3294 if ((LONG) pswp -> y < 0L)
3295 {
3296 pswp -> cy -= abs(pswp -> y);
3297 pswp -> y = 0;
3298 }
3299 pswp -> x = (LONG) (((double) pswp -> x * 100.0) / xtrans);
3300 pswp -> cx = (LONG) (((double) pswp -> cx * 100.0) / xtrans);
3301 pswp -> y = (LONG) (((double) pswp -> y * 100.0) / ytrans);
3302 pswp -> cy = (LONG) (((double) pswp -> cy * 100.0) / ytrans);
3303 if (pswp -> hwnd)
3304 {
3305 hwnd = WinQueryWindow(pswp -> hwnd, QW_PARENT);
3306 if (hwnd)
3307 {
3308 if (WinQueryWindowPos(hwnd, &swp))
3309 {
3310 if (pswp -> x > swp.cx)
3311 pswp -> x = (swp.cx > 24) ? swp.cx - 24 : swp.cx;
3312 if (pswp -> y > swp.cy)
3313 pswp -> y = (swp.cy > 24) ? swp.cy - 24 : swp.cy;
3314 if (pswp -> x + pswp -> cx > swp.cx)
3315 pswp -> cx = swp.cx - pswp -> x;
3316 if (pswp -> y + pswp -> cy > swp.cy)
3317 pswp -> cy = swp.cy - pswp -> y;
3318 }
3319 }
3320 }
[2]3321}
3322
[178]3323static BOOL RestoreDirCnrState(HWND hwndClient, CHAR * name, BOOL noview)
[133]3324{
3325 /* returns TRUE if a directory container was opened */
[2]3326
[133]3327 CHAR s[120], tdir[CCHMAXPATH];
3328 HWND hwndDir, hwndC;
3329 SWP swp, swpO, swpN;
3330 ULONG size, numsaves = 0L, x;
3331 double xtrans, ytrans;
3332 BOOL ret = FALSE;
3333 DIRCNRDATA *dcd;
[2]3334
[133]3335 size = sizeof(SWP);
[2]3336 sprintf(s,
[133]3337 "%s%sMySizeLastTime",
3338 (name) ? name : NullStr,
3339 (name) ? "." : NullStr);
3340 if (!PrfQueryProfileData(fmprof,
3341 FM3Str,
3342 s,
3343 (PVOID) & swpO,
3344 &size) ||
3345 size != sizeof(SWP) || !swp.cx || !swp.cy)
3346 WinQueryWindowPos(WinQueryWindow(hwndClient, QW_PARENT), &swpO);
3347 if (!name ||
3348 !strcmp(name, GetPString(IDS_FM2TEMPTEXT)))
[2]3349 PrfWriteProfileData(fmprof,
[133]3350 FM3Str,
3351 s,
3352 NULL,
3353 0L);
3354 WinQueryWindowPos(WinQueryWindow(hwndClient, QW_PARENT), &swpN);
3355 if (swpN.fl & (SWP_MINIMIZE | SWP_HIDE))
3356 swpN = swpO;
3357 xtrans = ((double) swpO.cx * 100.0) / (double) swpN.cx;
3358 ytrans = ((double) swpO.cy * 100.0) / (double) swpN.cy;
3359 size = sizeof(SWP);
[2]3360 sprintf(s,
[133]3361 "%s%sLastTreePos",
3362 (name) ? (name) : NullStr,
3363 (name) ? "." : NullStr);
3364 if (PrfQueryProfileData(fmprof,
3365 FM3Str,
3366 s,
3367 (PVOID) & swp,
3368 &size))
3369 {
3370 if (!name ||
3371 !strcmp(name, GetPString(IDS_FM2TEMPTEXT)))
[2]3372 PrfWriteProfileData(fmprof,
[133]3373 FM3Str,
3374 s,
3375 NULL,
3376 0L);
3377 swp.hwnd = hwndTree;
[2]3378 TransformSwp(&swp,
[133]3379 xtrans,
3380 ytrans);
3381 if (!fFreeTree)
3382 {
3383 WinQueryWindowPos(hwndClient, &swpN);
3384 swp.x = 0;
3385 swp.y = (swpN.cy - swp.cy);
3386 }
3387 if (!(swp.fl & (SWP_MINIMIZE | SWP_HIDE)))
3388 {
3389 swp.fl &= (~SWP_ACTIVATE);
[2]3390 WinSetWindowPos(hwndTree,
[133]3391 HWND_TOP,
3392 swp.x,
3393 swp.y,
3394 swp.cx,
3395 swp.cy,
3396 swp.fl | SWP_MOVE |
3397 SWP_SIZE | SWP_SHOW | SWP_ZORDER);
3398 }
3399 else
3400 {
[2]3401 WinSetWindowPos(hwndTree,
[133]3402 HWND_TOP,
3403 0,
3404 0,
3405 0,
3406 0,
3407 SWP_MINIMIZE | SWP_SHOW);
[2]3408 WinSetWindowUShort(hwndTree,
[133]3409 QWS_XRESTORE,
3410 (USHORT) swp.x);
[2]3411 WinSetWindowUShort(hwndTree,
[133]3412 QWS_CXRESTORE,
3413 (USHORT) swp.cx);
[2]3414 WinSetWindowUShort(hwndTree,
[133]3415 QWS_YRESTORE,
3416 (USHORT) swp.y);
[2]3417 WinSetWindowUShort(hwndTree,
[133]3418 QWS_CYRESTORE,
3419 (USHORT) swp.cy);
3420 }
3421 }
3422 size = sizeof(ULONG);
[2]3423 sprintf(s,
[133]3424 "%s%sNumDirsLastTime",
3425 (name) ? name : NullStr,
3426 (name) ? "." : NullStr);
3427 if (PrfQueryProfileData(fmprof,
3428 FM3Str,
3429 s,
3430 (PVOID) & numsaves,
3431 &size) &&
3432 numsaves)
3433 {
3434 if (!name ||
3435 !strcmp(name, GetPString(IDS_FM2TEMPTEXT)))
[2]3436 PrfWriteProfileData(fmprof,
[133]3437 FM3Str,
3438 s,
3439 NULL,
3440 0L);
3441 for (x = 0; x < numsaves; x++)
3442 {
[2]3443 sprintf(s,
[133]3444 "%s%sDirCnrPos.%lu",
3445 (name) ? name : NullStr,
3446 (name) ? "." : NullStr,
3447 x);
3448 size = sizeof(SWP);
3449 if (PrfQueryProfileData(fmprof,
3450 FM3Str,
3451 s,
3452 (PVOID) & swp,
3453 &size))
3454 {
3455 if (!name ||
3456 !strcmp(name, GetPString(IDS_FM2TEMPTEXT)))
3457 PrfWriteProfileData(fmprof,
3458 FM3Str,
3459 s,
3460 NULL,
3461 0L);
3462 sprintf(s,
3463 "%s%sDirCnrDir.%lu",
3464 (name) ? name : NullStr,
3465 (name) ? "." : NullStr,
3466 x);
3467 size = sizeof(tdir);
3468 if (PrfQueryProfileData(fmprof,
3469 FM3Str,
3470 s,
3471 (PVOID) tdir,
3472 &size))
3473 {
3474 if (!name ||
3475 !strcmp(name, GetPString(IDS_FM2TEMPTEXT)))
3476 PrfWriteProfileData(fmprof,
3477 FM3Str,
3478 s,
3479 NULL,
3480 0L);
3481 hwndDir = (HWND) WinSendMsg(hwndClient,
3482 UM_SETDIR,
3483 MPFROMP(tdir),
3484 MPFROMLONG(1L));
3485 if (hwndDir)
3486 {
3487 hwndC = WinWindowFromID(hwndDir,
3488 FID_CLIENT);
3489 if (hwndC)
3490 {
3491 dcd = WinQueryWindowPtr(WinWindowFromID(hwndC, DIR_CNR),
[186]3492 QWL_USER);
[133]3493 if (dcd)
3494 {
3495 size = sizeof(INT);
3496 sprintf(s,
3497 "%s%sDirCnrSort.%lu",
3498 (name) ? name : NullStr,
3499 (name) ? "." : NullStr,
3500 x);
3501 if (PrfQueryProfileData(fmprof,
3502 FM3Str,
3503 s,
3504 (PVOID) & dcd -> sortFlags,
3505 &size) &&
3506 size == sizeof(INT))
3507 {
3508 if (!dcd -> sortFlags)
3509 dcd -> sortFlags = SORT_PATHNAME;
3510 }
3511 if (!name ||
3512 !strcmp(name, GetPString(IDS_FM2TEMPTEXT)))
3513 PrfWriteProfileData(fmprof,
3514 FM3Str,
3515 s,
3516 NULL,
3517 0L);
3518 size = sizeof(MASK);
3519 sprintf(s,
3520 "%s%sDirCnrFilter.%lu",
3521 (name) ? name : NullStr,
3522 (name) ? "." : NullStr,
3523 x);
3524 if (PrfQueryProfileData(fmprof,
3525 FM3Str,
3526 s,
3527 (PVOID) & dcd -> mask,
3528 &size) &&
3529 size)
3530 {
3531 if (*dcd -> mask.szMask)
3532 WinSendMsg(WinWindowFromID(hwndC, DIR_CNR),
3533 UM_FILTER,
3534 MPFROMP(dcd -> mask.szMask),
3535 MPVOID);
3536 }
3537 *(dcd -> mask.prompt) = 0;
3538 if (!name ||
3539 !strcmp(name, GetPString(IDS_FM2TEMPTEXT)))
3540 PrfWriteProfileData(fmprof,
3541 FM3Str,
3542 s,
3543 NULL,
3544 0L);
3545 size = sizeof(ULONG);
3546 sprintf(s,
3547 "%s%sDirCnrView.%lu",
3548 (name) ? name : NullStr,
3549 (name) ? "." : NullStr,
3550 x);
3551 if (!noview)
3552 {
3553 if (PrfQueryProfileData(fmprof,
3554 FM3Str,
3555 s,
3556 (PVOID) & dcd -> flWindowAttr,
3557 &size) &&
3558 size == sizeof(ULONG))
3559 {
[2]3560
[133]3561 CNRINFO cnri;
[2]3562
[133]3563 memset(&cnri, 0, sizeof(CNRINFO));
3564 cnri.cb = sizeof(CNRINFO);
3565 if (WinSendMsg(WinWindowFromID(hwndC, DIR_CNR),
3566 CM_QUERYCNRINFO,
3567 MPFROMP(&cnri),
3568 MPFROMLONG(sizeof(CNRINFO))))
3569 {
3570 cnri.flWindowAttr = dcd -> flWindowAttr;
3571 WinSendMsg(WinWindowFromID(hwndC, DIR_CNR),
3572 CM_SETCNRINFO,
3573 MPFROMP(&cnri),
3574 MPFROMLONG(CMA_FLWINDOWATTR));
3575 }
3576 }
[2]3577 }
[133]3578 if (!name ||
3579 !strcmp(name, GetPString(IDS_FM2TEMPTEXT)))
3580 PrfWriteProfileData(fmprof,
3581 FM3Str,
3582 s,
3583 NULL,
3584 0L);
3585 }
3586 }
3587 ret = TRUE;
3588 swp.hwnd = hwndDir;
3589 TransformSwp(&swp,
3590 xtrans,
3591 ytrans);
3592 if (!fAutoTile &&
3593 !(swp.fl & (SWP_HIDE | SWP_MINIMIZE)))
3594 WinSetWindowPos(hwndDir,
3595 HWND_TOP,
3596 swp.x,
3597 swp.y,
3598 swp.cx,
3599 swp.cy,
3600 swp.fl | SWP_MOVE |
3601 SWP_SIZE | SWP_SHOW | SWP_ZORDER | SWP_ACTIVATE);
3602 else if (swp.fl & (SWP_HIDE | SWP_MINIMIZE))
3603 {
3604 WinSetWindowPos(hwndDir,
3605 HWND_TOP,
3606 0,
3607 0,
3608 0,
3609 0,
3610 SWP_MINIMIZE | SWP_SHOW);
3611 WinSetWindowUShort(hwndDir,
3612 QWS_XRESTORE,
3613 (USHORT) swp.x);
3614 WinSetWindowUShort(hwndDir,
3615 QWS_CXRESTORE,
3616 (USHORT) swp.cx);
3617 WinSetWindowUShort(hwndDir,
3618 QWS_YRESTORE,
3619 (USHORT) swp.y);
3620 WinSetWindowUShort(hwndDir,
3621 QWS_CYRESTORE,
3622 (USHORT) swp.cy);
3623 }
3624 else
3625 WinSetWindowPos(hwndDir,
3626 HWND_TOP,
3627 0,
3628 0,
3629 0,
3630 0,
3631 SWP_ZORDER | SWP_ACTIVATE);
3632 }
[2]3633 }
[133]3634 }
3635 }
3636 }
3637 return ret;
[2]3638}
3639
[178]3640static ULONG CountChildren(HWND hwndClient, ULONG * ulNumMinChildren)
[133]3641{
3642 HENUM henum;
3643 HWND hwndChild;
3644 SWP swp;
3645 register ULONG ulCnt = 0L;
3646 USHORT id;
[2]3647
[133]3648 if (ulNumMinChildren)
3649 *ulNumMinChildren = 0L;
3650 henum = WinBeginEnumWindows(hwndClient);
3651 while ((hwndChild = WinGetNextWindow(henum)) != NULLHANDLE)
3652 {
3653 id = WinQueryWindowUShort(hwndChild, QWS_ID);
3654 if (!id || (!fFreeTree && id == TREE_FRAME))
3655 continue;
3656 ulCnt++;
3657 if (ulNumMinChildren)
3658 {
3659 if (WinQueryWindowPos(hwndChild, &swp) &&
3660 (swp.fl & SWP_MINIMIZE))
3661 (*ulNumMinChildren)++;
3662 }
3663 }
3664 WinEndEnumWindows(henum);
3665 return ulCnt;
[2]3666}
3667
[133]3668VOID GetNextWindowPos(HWND hwndClient, PSWP pswp, ULONG * ulCntR,
3669 ULONG * ulNumMinChildrenR)
3670{
3671 register ULONG ulCnt;
3672 ULONG ulNumMinChildren;
3673 RECTL Rectl;
3674 register ULONG ulXDiff, ulYDiff, ulWindowsPerStack;
[2]3675
[133]3676 if (!ulCntR || !ulNumMinChildrenR)
3677 ulCnt = CountChildren(hwndClient, &ulNumMinChildren);
3678 else
3679 {
3680 ulCnt = *ulCntR;
3681 ulNumMinChildren = *ulNumMinChildrenR;
3682 if (ulCnt == (ULONG) - 1L)
3683 {
3684 ulCnt = CountChildren(hwndClient, &ulNumMinChildren);
3685 /* return these values to the caller for later use */
3686 *ulCntR = ulCnt;
3687 *ulNumMinChildrenR = ulNumMinChildren;
3688 }
3689 }
3690 WinQueryWindowRect(hwndClient, &Rectl);
3691 AdjustSizeOfClient(NULL, &Rectl);
3692 if (!fFreeTree)
3693 {
[2]3694
[133]3695 SWP swp;
[2]3696
[133]3697 WinQueryWindowPos(hwndTree, &swp);
3698 if (ulNumMinChildren || (swp.fl & (SWP_HIDE | SWP_MINIMIZE)))
3699 Rectl.yBottom += WinQuerySysValue(HWND_DESKTOP, SV_CYICON) * 2;
3700 }
3701 else if (ulNumMinChildren)
3702 Rectl.yBottom += WinQuerySysValue(HWND_DESKTOP, SV_CYICON) * 2;
[2]3703
[133]3704 ulXDiff = WinQuerySysValue(HWND_DESKTOP, SV_CXSIZEBORDER) +
3705 WinQuerySysValue(HWND_DESKTOP, SV_CXMINMAXBUTTON) / 2;
3706 ulYDiff = WinQuerySysValue(HWND_DESKTOP, SV_CYSIZEBORDER) +
3707 WinQuerySysValue(HWND_DESKTOP, SV_CYMINMAXBUTTON);
3708 ulWindowsPerStack = (Rectl.yTop - Rectl.yBottom) / (3 * ulYDiff);
3709 pswp -> cx = Rectl.xRight - (ulWindowsPerStack * ulXDiff);
3710 pswp -> cy = (Rectl.yTop - Rectl.yBottom) - (ulWindowsPerStack * ulYDiff);
3711 ulWindowsPerStack++;
3712 pswp -> x = Rectl.xLeft + ((ulCnt % ulWindowsPerStack) * ulXDiff);
3713 pswp -> y = (Rectl.yTop - pswp -> cy - ((ulCnt % ulWindowsPerStack) * ulYDiff));
[2]3714}
3715
[178]3716static VOID CascadeChildren(HWND hwndClient)
[133]3717{
3718 ULONG ulCnt = 0L, ulNumMinChildren;
3719 HWND hwndChild;
3720 HENUM henum;
3721 SWP swp;
3722 USHORT id;
3723 RECTL Rectl;
[2]3724
[133]3725 WinQueryWindowPos(hwndClient, &swp);
3726 if (swp.fl & (SWP_HIDE | SWP_MINIMIZE))
3727 return;
[2]3728
[133]3729 CountChildren(hwndClient, &ulNumMinChildren);
3730 if (!fFreeTree)
3731 {
3732 WinQueryWindowRect(hwndClient, &Rectl);
3733 AdjustSizeOfClient(NULL, &Rectl);
3734 WinQueryWindowPos(hwndTree, &swp);
3735 if (!(swp.fl & (SWP_MAXIMIZE | SWP_HIDE | SWP_MINIMIZE)))
3736 {
3737 if (swp.y + swp.cy < Rectl.yTop - Rectl.yBottom)
3738 swp.cy = (Rectl.yTop - Rectl.yBottom) - swp.y;
3739 if (swp.x != 0)
3740 swp.x = 0;
3741 if (swp.y < 0)
3742 swp.y = 0;
3743 if (swp.x + swp.cx > Rectl.xRight - Rectl.xLeft)
3744 swp.cx = Rectl.xRight - Rectl.xLeft;
3745 WinSetWindowPos(hwndTree, HWND_TOP, swp.x, swp.y, swp.cx, swp.cy,
3746 SWP_MOVE | SWP_SIZE | SWP_SHOW | SWP_RESTORE);
3747 }
3748 }
3749 henum = WinBeginEnumWindows(hwndClient);
3750 while ((hwndChild = WinGetNextWindow(henum)) != NULLHANDLE)
3751 {
3752 id = WinQueryWindowUShort(hwndChild, QWS_ID);
3753 if (!id || (!fFreeTree && id == TREE_FRAME))
3754 continue;
3755 WinQueryWindowPos(hwndChild, &swp);
3756 if (!(swp.fl & (SWP_MINIMIZE | SWP_HIDE)))
3757 {
3758 GetNextWindowPos(hwndClient, &swp, &ulCnt, &ulNumMinChildren);
3759 WinSetWindowPos(hwndChild, HWND_TOP, swp.x, swp.y, swp.cx, swp.cy,
3760 SWP_SIZE | SWP_MOVE | SWP_SHOW | SWP_RESTORE |
3761 SWP_ZORDER | SWP_ACTIVATE);
3762 ulCnt++;
3763 }
3764 }
3765 WinEndEnumWindows(henum);
[2]3766}
3767
[133]3768VOID TileChildren(HWND hwndClient, BOOL absolute)
3769{
3770 register ULONG ulChildCnt, ulSquare, ulNumRows, ulNumCols, ulExtraCols,
3771 ulWidth, ulHeight;
3772 ULONG ulNumMinChildren;
3773 RECTL Rectl;
3774 HWND hwndChild;
[2]3775
[133]3776 if (fNoTileUpdate || hwndClient == HWND_DESKTOP)
3777 return;
3778 {
3779 SWP swp;
[2]3780
[133]3781 WinQueryWindowPos(hwndClient, &swp);
3782 if (swp.fl & (SWP_HIDE | SWP_MINIMIZE))
3783 return;
3784 }
[2]3785 ulChildCnt = CountChildren(hwndClient,
[133]3786 &ulNumMinChildren);
3787 ulChildCnt -= ulNumMinChildren;
3788 if (!ulChildCnt)
3789 return;
[2]3790
[133]3791 fNoTileUpdate = TRUE;
[2]3792
[133]3793 for (ulSquare = 2;
3794 ulSquare * ulSquare <= ulChildCnt;
3795 ulSquare++)
[200]3796 {
[133]3797 ;
[200]3798 }
[133]3799 if (!fTileBackwards)
3800 {
3801 ulNumCols = ulSquare - 1L;
3802 ulNumRows = ulChildCnt / ulNumCols;
3803 }
3804 else
3805 {
3806 ulNumRows = ulSquare - 1L;
3807 ulNumCols = ulChildCnt / ulNumRows;
3808 }
3809 ulExtraCols = ulChildCnt % ulNumCols;
[2]3810
3811 WinQueryWindowRect(hwndClient,
[133]3812 &Rectl);
[2]3813
[133]3814 if (!fFreeTree)
3815 {
[2]3816
[133]3817 SWP swp;
[2]3818
[133]3819 WinQueryWindowPos(hwndTree, &swp);
3820 if (!(swp.fl & (SWP_MAXIMIZE | SWP_HIDE | SWP_MINIMIZE)))
3821 {
3822 if (swp.y < 0)
3823 swp.y = 0;
3824 if (swp.y + swp.cy < Rectl.yTop - Rectl.yBottom)
3825 swp.cy = (Rectl.yTop - Rectl.yBottom) - swp.y;
3826 if (swp.x != 0)
3827 swp.x = 0;
3828 if (swp.x + swp.cx > Rectl.xRight - Rectl.xLeft)
3829 swp.cx = Rectl.xRight - Rectl.xLeft;
[2]3830 WinSetWindowPos(hwndTree,
[133]3831 HWND_TOP,
3832 swp.x,
3833 swp.y,
3834 swp.cx,
3835 swp.cy,
3836 SWP_MOVE | SWP_SIZE | SWP_SHOW | SWP_RESTORE);
3837 WinQueryWindowPos(hwndTree, &swp);
3838 }
3839 if (ulNumMinChildren ||
3840 (swp.fl & (SWP_HIDE | SWP_MINIMIZE)))
3841 Rectl.yBottom += WinQuerySysValue(HWND_DESKTOP, SV_CYICON) * 2;
3842 }
3843 else if (ulNumMinChildren)
3844 Rectl.yBottom += WinQuerySysValue(HWND_DESKTOP, SV_CYICON) * 2;
[2]3845
3846 AdjustSizeOfClient(NULL,
[133]3847 &Rectl);
[2]3848
[133]3849 if (Rectl.xRight > 0L &&
3850 (Rectl.yBottom < Rectl.yTop))
3851 {
[2]3852
[133]3853 HENUM henum;
[2]3854
[133]3855 henum = WinBeginEnumWindows(hwndClient);
3856 if ((hwndChild = WinGetNextWindow(henum)) != (HWND) 0)
3857 {
[2]3858
[133]3859 ULONG ulCurRow, ulCurCol;
3860 SWP swp;
3861 USHORT id;
[2]3862
[133]3863 ulHeight = (Rectl.yTop - Rectl.yBottom) / ulNumRows;
[2]3864
[133]3865 for (ulCurRow = 0;
3866 ulCurRow < ulNumRows;
3867 ulCurRow++)
3868 {
3869 if ((ulNumRows - ulCurRow) <= ulExtraCols)
3870 ulNumCols++;
3871 for (ulCurCol = 0;
3872 ulCurCol < ulNumCols;
3873 ulCurCol++)
3874 {
3875 ulWidth = Rectl.xRight / ulNumCols;
[2]3876
[133]3877 while (hwndChild)
3878 {
3879 id = WinQueryWindowUShort(hwndChild, QWS_ID);
3880 if (id &&
3881 (id != TREE_FRAME || fFreeTree))
3882 {
3883 WinQueryWindowPos(hwndChild, &swp);
3884 if (!(swp.fl & (SWP_HIDE | SWP_MINIMIZE)))
3885 break;
3886 }
3887 hwndChild = WinGetNextWindow(henum);
3888 }
[2]3889
[133]3890 if (hwndChild)
3891 {
3892 if (!absolute &&
3893 (swp.fl & SWP_MAXIMIZE))
3894 {
3895 WinGetMaxPosition(hwndChild, &swp);
3896 WinSetWindowPos(hwndChild,
3897 HWND_TOP,
3898 swp.x,
3899 swp.y,
3900 swp.cx,
3901 swp.cy,
3902 SWP_MOVE | SWP_SIZE | SWP_SHOW);
3903 WinSetWindowUShort(hwndChild,
3904 QWS_XRESTORE,
3905 (USHORT) (ulWidth * ulCurCol) + Rectl.xLeft);
3906 WinSetWindowUShort(hwndChild,
3907 QWS_YRESTORE,
3908 (USHORT) (Rectl.yTop -
3909 (ulHeight * (ulCurRow + 1L))));
3910 WinSetWindowUShort(hwndChild,
3911 QWS_CXRESTORE,
3912 (USHORT) ulWidth);
3913 WinSetWindowUShort(hwndChild,
3914 QWS_CYRESTORE,
3915 (USHORT) ulHeight);
3916 }
3917 else
3918 WinSetWindowPos(hwndChild,
3919 HWND_TOP,
3920 (ulWidth * ulCurCol) + Rectl.xLeft,
3921 Rectl.yTop - (ulHeight * (ulCurRow + 1L)),
3922 ulWidth,
3923 ulHeight,
3924 SWP_MOVE | SWP_SIZE | SWP_SHOW | SWP_RESTORE);
3925 hwndChild = WinGetNextWindow(henum);
3926 }
[2]3927 }
[133]3928 if ((ulNumRows - ulCurRow) <= ulExtraCols)
3929 {
3930 ulNumCols--;
3931 ulExtraCols--;
3932 }
3933 }
3934 }
3935 WinEndEnumWindows(henum);
3936 }
[2]3937
[133]3938 fNoTileUpdate = FALSE;
[2]3939}
3940
[178]3941static VOID ResizeChildren(HWND hwndClient, SHORT oldcx, SHORT oldcy, SHORT newcx,
[200]3942 SHORT newcy)
[133]3943{
3944 /*
3945 * resize all children of the client to maintain their proportional
3946 * sizes and positions
3947 */
[2]3948
[133]3949 if (!newcx ||
3950 !newcy ||
3951 !oldcx ||
3952 !oldcy)
3953 return;
3954 {
3955 HENUM henum;
3956 HWND hwndChild;
3957 register LONG x, y, cx, cy, ucx, ucy, ux, uy;
3958 SWP swp;
[2]3959
[133]3960 henum = WinBeginEnumWindows(hwndClient);
3961 while ((hwndChild = WinGetNextWindow(henum)) != NULLHANDLE)
3962 {
3963 if (!WinQueryWindowUShort(hwndChild, QWS_ID))
3964 continue;
3965 if (WinQueryWindowPos(hwndChild, &swp))
3966 {
3967 if (swp.fl & (SWP_MINIMIZE | SWP_HIDE))
[2]3968 {
[133]3969 swp.x = WinQueryWindowUShort(hwndChild, QWS_XRESTORE);
3970 swp.y = WinQueryWindowUShort(hwndChild, QWS_YRESTORE);
3971 swp.cx = WinQueryWindowUShort(hwndChild, QWS_CXRESTORE);
3972 swp.cy = WinQueryWindowUShort(hwndChild, QWS_CYRESTORE);
3973 }
3974 else if (swp.fl & SWP_MAXIMIZE)
3975 {
3976 swp.x = WinQueryWindowUShort(hwndChild, QWS_XRESTORE);
3977 swp.y = WinQueryWindowUShort(hwndChild, QWS_YRESTORE);
3978 swp.cx = WinQueryWindowUShort(hwndChild, QWS_CXRESTORE);
3979 swp.cy = WinQueryWindowUShort(hwndChild, QWS_CYRESTORE);
3980 }
3981 cx = (swp.cx) ? (LONG) (((double) oldcx * 100.0) / (double) swp.cx) : 0;
3982 cy = (swp.cy) ? (LONG) (((double) oldcy * 100.0) / (double) swp.cy) : 0;
3983 x = (swp.x) ? (LONG) (((double) oldcx * 100.0) / (double) swp.x) : 0;
3984 y = (swp.y) ? (LONG) (((double) oldcy * 100.0) / (double) swp.y) : 0;
3985 if (x < 0)
3986 x = 0;
3987 if (y < 0)
3988 y = 0;
3989 ux = (x) ? (LONG) (((double) newcx * 100.0) / (double) x) : 0;
3990 uy = (y) ? (LONG) (((double) newcy * 100.0) / (double) y) : 0;
3991 ucx = (cx) ? (LONG) (((double) newcx * 100.0) / (double) cx) : 0;
3992 ucy = (cy) ? (LONG) (((double) newcy * 100.0) / (double) cy) : 0;
3993 if (ux + ucx > newcx)
3994 ucx = newcx - ux;
3995 if (uy + ucy > newcy)
3996 ucy = newcy - uy;
[2]3997
[133]3998 if (!(swp.fl & (SWP_MINIMIZE | SWP_HIDE | SWP_MAXIMIZE)))
3999 WinSetWindowPos(hwndChild, HWND_TOP, ux, uy, ucx, ucy,
4000 SWP_MOVE | SWP_SIZE | SWP_SHOW);
4001 else if (swp.fl & (SWP_HIDE | SWP_MINIMIZE))
4002 {
4003 WinSetWindowUShort(hwndChild, QWS_XMINIMIZE, (USHORT) - 1);
4004 WinSetWindowUShort(hwndChild, QWS_YMINIMIZE, (USHORT) - 1);
4005 WinSetWindowPos(hwndChild, HWND_TOP, 0, 0, 0, 0,
4006 SWP_SIZE | SWP_MOVE | SWP_FOCUSDEACTIVATE);
4007 WinSetWindowUShort(hwndChild, QWS_XRESTORE, ux);
4008 WinSetWindowUShort(hwndChild, QWS_YRESTORE, uy);
4009 WinSetWindowUShort(hwndChild, QWS_CXRESTORE, ucx);
4010 WinSetWindowUShort(hwndChild, QWS_CYRESTORE, ucy);
[2]4011 }
[133]4012 else
4013 {
4014 WinGetMaxPosition(hwndChild, &swp);
4015 WinSetWindowPos(hwndChild, HWND_TOP, swp.x, swp.y, swp.cx, swp.cy,
4016 SWP_MOVE | SWP_SIZE | SWP_SHOW);
4017 WinSetWindowUShort(hwndChild, QWS_XRESTORE, ux);
4018 WinSetWindowUShort(hwndChild, QWS_YRESTORE, uy);
4019 WinSetWindowUShort(hwndChild, QWS_CXRESTORE, ucx);
4020 WinSetWindowUShort(hwndChild, QWS_CYRESTORE, ucy);
4021 }
4022 }
4023 }
4024 WinEndEnumWindows(henum);
4025 }
4026 if (!fFreeTree)
4027 {
[2]4028
[133]4029 RECTL Rectl;
4030 SWP swp;
[2]4031
[133]4032 WinQueryWindowRect(hwndClient, &Rectl);
4033 AdjustSizeOfClient(NULL, &Rectl);
4034 WinQueryWindowPos(hwndTree, &swp);
4035 if (!(swp.fl & (SWP_MAXIMIZE | SWP_HIDE | SWP_MINIMIZE)))
4036 {
4037 if (swp.y + swp.cy < Rectl.yTop - Rectl.yBottom)
4038 swp.cy = (Rectl.yTop - Rectl.yBottom) - swp.y;
4039 if (swp.x != 0)
4040 swp.x = 0;
4041 if (swp.y < 0)
4042 swp.y = 0;
4043 if (swp.x + swp.cx > Rectl.xRight - Rectl.xLeft)
4044 swp.cx = Rectl.xRight - Rectl.xLeft;
4045 WinSetWindowPos(hwndTree, HWND_TOP, swp.x, swp.y, swp.cx, swp.cy,
4046 SWP_MOVE | SWP_SIZE | SWP_SHOW | SWP_RESTORE);
4047 }
4048 }
[2]4049}
4050
[178]4051static VOID MinResChildren(HWND hwndClient, ULONG cmd)
[133]4052{
4053 HENUM henum;
4054 HWND hwndChild;
[2]4055
[133]4056 {
4057 SWP swp;
[2]4058
[133]4059 WinQueryWindowPos(hwndClient, &swp);
4060 if (swp.fl & (SWP_HIDE | SWP_MINIMIZE))
4061 return;
4062 }
4063 henum = WinBeginEnumWindows(hwndClient);
4064 while ((hwndChild = WinGetNextWindow(henum)) != NULLHANDLE)
4065 {
4066 if (!WinQueryWindowUShort(hwndChild, QWS_ID))
4067 continue;
4068 WinSetWindowPos(hwndChild, HWND_TOP, 0, 0, 0, 0, cmd);
4069 }
[2]4070}
4071
[178]4072//=== ChildFrameButtonProc: subclass handler for WALKBUTTON and QUICKBUTTON windows ===
4073
4074static MRESULT EXPENTRY ChildFrameButtonProc(HWND hwnd,
4075 ULONG msg,
4076 MPARAM mp1,
4077 MPARAM mp2)
[133]4078{
4079 USHORT id;
4080 static BOOL emphasized = FALSE;
[2]4081
[133]4082 switch (msg)
4083 {
4084 case WM_BUTTON1CLICK:
4085 case WM_CHORD:
4086 shiftstate = (SHORT2FROMMP(mp2) & (KC_ALT | KC_SHIFT | KC_CTRL));
4087 break;
[2]4088
[133]4089 case WM_MOUSEMOVE:
4090 if (fOtherHelp)
4091 {
4092 if ((!hwndBubble || WinQueryWindowULong(hwndBubble, QWL_USER) != hwnd) &&
4093 !WinQueryCapture(HWND_DESKTOP))
4094 {
4095 id = WinQueryWindowUShort(hwnd, QWS_ID);
4096 switch (id)
4097 {
4098 case IDM_OPENWALK:
4099 MakeBubble(hwnd,
4100 FALSE,
4101 GetPString(IDS_WALKBUTTONHELP));
4102 break;
4103 case IDM_USERLIST:
4104 MakeBubble(hwnd,
4105 FALSE,
4106 GetPString(IDS_QUICKBUTTONHELP));
4107 break;
4108 }
4109 }
4110 }
4111 break;
[2]4112
[133]4113 case WM_BUTTON3CLICK:
4114 case WM_BUTTON2CLICK:
4115 {
4116 USHORT cmd = 0;
[2]4117
[133]4118 shiftstate = (SHORT2FROMMP(mp2) & (KC_ALT | KC_SHIFT | KC_CTRL));
4119 id = WinQueryWindowUShort(hwnd, QWS_ID);
4120 switch (id)
[2]4121 {
[133]4122 case IDM_OPENWALK:
4123 switch (msg)
4124 {
4125 case WM_BUTTON2CLICK:
4126 if ((shiftstate & (KC_ALT | KC_SHIFT | KC_CTRL)) ==
4127 (KC_ALT | KC_SHIFT | KC_CTRL))
4128 cmd = IDM_GREP;
4129 else if ((shiftstate & (KC_ALT | KC_CTRL)) ==
4130 (KC_ALT | KC_CTRL))
4131 CascadeChildren(hwndMain);
[2]4132
4133#ifdef NEVER
[133]4134 else if ((shiftstate & (KC_ALT | KC_SHIFT)) ==
4135 (KC_ALT | KC_SHIFT))
4136 cmd = IDM_SYSINFO;
[2]4137#endif
[133]4138
4139 else if (shiftstate & KC_SHIFT)
4140 cmd = IDM_WINDOWDLG;
4141 else if (shiftstate & KC_CTRL)
4142 cmd = IDM_SEEALL;
4143 else if (shiftstate & KC_ALT)
4144 TileChildren(hwndMain, TRUE);
4145 else
4146 cmd = IDM_WALKDIR;
4147 break;
4148 case WM_BUTTON3CLICK:
4149 TileChildren(hwndMain, TRUE);
4150 break;
4151 }
4152 break;
4153 case IDM_USERLIST:
4154 switch (msg)
4155 {
4156 case WM_BUTTON2CLICK:
4157 if ((shiftstate & (KC_ALT | KC_SHIFT | KC_CTRL)) ==
4158 (KC_ALT | KC_SHIFT | KC_CTRL))
4159 cmd = IDM_COLORPALETTE;
4160 else if ((shiftstate & (KC_ALT | KC_CTRL)) ==
4161 (KC_ALT | KC_CTRL))
4162 cmd = IDM_HIDEMENU;
4163 else if ((shiftstate & (KC_ALT | KC_SHIFT)) ==
4164 (KC_ALT | KC_SHIFT))
4165 cmd = IDM_NOTEBOOK;
4166 else if (shiftstate & KC_SHIFT)
4167 cmd = IDM_TOOLTITLES;
4168 else if (shiftstate & KC_CTRL)
4169 cmd = IDM_TEXTTOOLS;
4170 else if (shiftstate & KC_ALT)
4171 cmd = IDM_FONTPALETTE;
4172 else
4173 cmd = IDM_TOOLBAR;
4174 break;
4175 case WM_BUTTON3CLICK:
4176 cmd = IDM_DRIVEBAR;
4177 break;
4178 }
4179 break;
[200]4180 } // switch id
4181
[133]4182 if (cmd)
[200]4183 {
[133]4184 PostMsg(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT), FID_CLIENT),
4185 WM_COMMAND,
4186 MPFROM2SHORT(cmd, 0),
4187 MPVOID);
[200]4188 }
[133]4189 }
4190 break;
[2]4191
[133]4192 case DM_DRAGOVER:
4193 id = WinQueryWindowUShort(hwnd, QWS_ID);
4194 if (id == IDM_OPENWALK)
4195 {
4196 if (!emphasized)
4197 {
4198 emphasized = TRUE;
4199 DrawTargetEmphasis(hwnd, emphasized);
4200 }
4201 if (AcceptOneDrop(mp1, mp2))
4202 return MRFROM2SHORT(DOR_DROP,
4203 DO_MOVE);
4204 }
4205 return MRFROM2SHORT(DOR_NEVERDROP, 0);
[2]4206
[133]4207 case DM_DRAGLEAVE:
4208 if (emphasized)
4209 {
4210 emphasized = FALSE;
4211 DrawTargetEmphasis(hwnd, emphasized);
4212 }
4213 break;
[2]4214
[133]4215 case DM_DROPHELP:
4216 DropHelp(mp1, mp2, hwnd, GetPString(IDS_OPENDROPHELP));
4217 return 0;
[2]4218
[133]4219 case DM_DROP:
4220 {
4221 char szFrom[CCHMAXPATH + 2];
[2]4222
[133]4223 if (emphasized)
4224 {
4225 emphasized = FALSE;
4226 DrawTargetEmphasis(hwnd,
4227 emphasized);
4228 }
4229 if (GetOneDrop(mp1,
4230 mp2,
4231 szFrom,
4232 sizeof(szFrom)))
4233 {
4234 if (MakeValidDir(szFrom) &&
4235 !FindDirCnrByName(szFrom, TRUE))
4236 {
4237 OpenDirCnr((HWND) 0,
4238 hwndMain,
4239 hwndTree,
4240 FALSE,
4241 szFrom);
4242 }
4243 }
4244 }
4245 return 0;
[2]4246
[133]4247 case WM_CLOSE:
4248 WinDestroyWindow(hwnd);
4249 return 0;
4250 }
4251 return PFNWPButton(hwnd, msg, mp1, mp2);
[2]4252}
4253
[178]4254static MRESULT EXPENTRY MainFrameWndProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[133]4255{
4256 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, QWL_USER);
4257 static ULONG aheight = 0L;
[2]4258
[133]4259 switch (msg)
4260 {
4261 case WM_ADJUSTWINDOWPOS:
4262 {
4263 SWP *pswp;
[2]4264
[133]4265 pswp = (SWP *) mp1;
4266 if (fDataMin && !fAmClosing)
4267 {
4268 if (pswp -> fl & (SWP_HIDE | SWP_MINIMIZE))
4269 {
[2]4270
[133]4271 SWP swp;
[2]4272
[133]4273 WinQueryWindowPos(hwnd, &swp);
4274 PostMsg(hwnd,
4275 UM_FOCUSME,
4276 MPFROMLONG(swp.fl),
4277 MPVOID);
4278 HideNote();
4279 }
4280 else if (pswp -> fl & (SWP_SHOW | SWP_RESTORE))
4281 {
4282 if (DataHwnd)
4283 PostMsg(DataHwnd,
4284 WM_CLOSE,
4285 MPVOID,
4286 MPVOID);
4287 }
4288 }
4289 if (!fAmClosing)
4290 {
4291 if (pswp -> fl & (SWP_HIDE | SWP_MINIMIZE))
4292 HideNote();
4293 }
4294 }
4295 break;
[2]4296
[133]4297 case UM_FOCUSME:
4298 CreateDataBar(HWND_DESKTOP, (ULONG) mp1);
4299 return 0;
[2]4300
[133]4301 case WM_BUTTON1UP:
4302 case WM_BUTTON2UP:
4303 case WM_BUTTON3UP:
4304 case WM_MOUSEMOVE:
4305 case WM_CHORD:
4306 shiftstate = (SHORT2FROMMP(mp2) & (KC_ALT | KC_SHIFT | KC_CTRL));
4307 break;
[2]4308
[133]4309 case WM_CHAR:
4310 shiftstate = (SHORT1FROMMP(mp1) & (KC_SHIFT | KC_ALT | KC_CTRL));
4311 break;
[2]4312
[133]4313 case WM_CONTROL:
4314 return WinSendMsg(WinWindowFromID(hwnd, FID_CLIENT), UM_CONTROL, mp1, mp2);
[2]4315
[133]4316 case WM_COMMAND:
4317 return WinSendMsg(WinWindowFromID(hwnd, FID_CLIENT), msg, mp1, mp2);
[2]4318
[133]4319 case WM_CALCFRAMERECT:
4320 {
4321 MRESULT mr;
4322 PRECTL prectl;
4323 LONG sheight = 20, bheight = 20;
[2]4324
[133]4325 mr = oldproc(hwnd, msg, mp1, mp2);
[2]4326
[133]4327 /*
4328 * Calculate the position of the client rectangle.
[178]4329 * Otherwise, we'll see a lot of redraw when we move the
[133]4330 * client during WM_FORMATFRAME.
4331 */
[2]4332
[133]4333 if (mr && mp2)
4334 {
4335 prectl = (PRECTL) mp1;
4336 if (prectl -> yBottom != prectl -> yTop)
4337 {
4338 {
4339 HPS hps;
4340 POINTL aptl[TXTBOX_COUNT];
[2]4341
[133]4342 hps = WinGetPS(hwndStatus);
4343 if (hps)
4344 {
4345 GpiQueryTextBox(hps, 6, "$`WjgT", TXTBOX_COUNT, aptl);
4346 bheight = sheight = aptl[TXTBOX_TOPLEFT].y + 6;
4347 WinReleasePS(hps);
4348 }
4349 }
4350 prectl -> yBottom += (sheight + 4);
4351 prectl -> yTop -= (sheight + 4);
4352 if (fMoreButtons)
4353 {
[2]4354
[133]4355 HPS hps;
4356 POINTL aptl[TXTBOX_COUNT];
[2]4357
[133]4358 hps = WinGetPS(hwndName);
4359 if (hps)
4360 {
4361 GpiQueryTextBox(hps,
4362 6,
4363 "$`WjgT",
4364 TXTBOX_COUNT,
4365 aptl);
4366 bheight = aptl[TXTBOX_TOPLEFT].y + 6;
4367 WinReleasePS(hps);
4368 }
4369 prectl -> yBottom += (bheight + 4);
4370 prectl -> yTop -= (bheight + 4);
4371 }
4372 if (fToolbar)
4373 {
4374 if (!fTextTools)
4375 prectl -> yTop -= ((fToolTitles) ? 50 : 40);
4376 else
4377 prectl -> yTop -= 32;
4378 }
4379 if (fDrivebar)
4380 {
4381 ResizeDrives(WinWindowFromID(hwnd, MAIN_DRIVES),
4382 ((prectl -> xRight -
4383 (WinQuerySysValue(HWND_DESKTOP,
4384 SV_CYSIZEBORDER) * 2)) - 4));
4385 prectl -> yTop -= (16 * (DriveLines * 18));
4386 }
4387 if (fUserComboBox)
4388 {
4389 if (!aheight)
4390 {
[2]4391
[133]4392 SWP swpTemp;
[2]4393
[133]4394 WinQueryWindowPos(WinWindowFromID(hwndDrivelist, CBID_EDIT),
4395 &swpTemp);
4396 aheight = swpTemp.cy;
4397 }
4398 prectl -> yTop -= (aheight + 6L);
4399 }
4400 if (fAutoView)
4401 {
4402 AutoviewHeight = min(AutoviewHeight,
4403 (prectl -> yTop - prectl -> yBottom) - 116);
4404 AutoviewHeight = max(AutoviewHeight, 36);
4405 prectl -> yBottom += (AutoviewHeight + 6);
4406 }
4407 }
4408 }
4409 return mr;
4410 }
[2]4411
[133]4412 case WM_FORMATFRAME:
4413 {
4414 SHORT sCount, soldCount;
4415 PSWP pswp, pswpClient, pswpNew;
4416 SWP swpClient;
4417 LONG theight = 48L, dheight = 20L, width, sheight = 20, bheight = 20;
[2]4418
[133]4419 sCount = (SHORT) oldproc(hwnd, msg, mp1, mp2);
4420 soldCount = sCount;
[2]4421
[133]4422 /*
4423 * Reformat the frame to "squeeze" the client
4424 * and make room for status window sibling beneath
4425 * and toolbar above (if toolbar's on) and userlists
4426 * (if userlists are on).
4427 */
[2]4428
[133]4429 pswp = (PSWP) mp1;
4430 {
4431 SHORT x;
[2]4432
[133]4433 for (x = 0; x < soldCount; x++)
4434 {
4435 if (WinQueryWindowUShort(pswp -> hwnd, QWS_ID) == FID_CLIENT)
4436 {
4437 pswpClient = pswp;
4438 break;
4439 }
4440 pswp++;
4441 }
4442 }
[2]4443
[133]4444 {
4445 HPS hps;
4446 POINTL aptl[TXTBOX_COUNT];
[2]4447
[133]4448 hps = WinGetPS(hwndStatus);
4449 if (hps)
4450 {
4451 GpiQueryTextBox(hps,
4452 6,
4453 "$`WjgT",
4454 TXTBOX_COUNT,
4455 aptl);
4456 bheight = sheight = aptl[TXTBOX_TOPLEFT].y + 6;
4457 WinReleasePS(hps);
4458 }
4459 if (fMoreButtons)
4460 {
4461 hps = WinGetPS(hwndName);
4462 if (hps)
4463 {
4464 GpiQueryTextBox(hps,
4465 6,
4466 "$`WjgT",
4467 TXTBOX_COUNT,
4468 aptl);
4469 bheight = aptl[TXTBOX_TOPLEFT].y + 6;
4470 WinReleasePS(hps);
4471 }
4472 }
4473 }
4474 pswpNew = (PSWP) mp1 + soldCount;
4475 *pswpNew = *pswpClient;
4476 swpClient = *pswpClient;
4477 pswpNew -> hwnd = hwndStatus;
4478 pswpNew -> hwndInsertBehind = HWND_BOTTOM;
4479 pswpNew -> x = swpClient.x + 3;
4480 pswpNew -> y = swpClient.y + 2;
4481 if (!fSplitStatus)
4482 width = swpClient.cx - (16 + (sheight * 2) + 4);
4483 else
4484 width = (swpClient.cx - (16 + (sheight * 2) + 4)) / 2;
4485 width = max(width, 10);
4486 if (fSplitStatus)
4487 pswpNew -> cx = width - 6;
4488 else
4489 pswpNew -> cx = width - 8;
4490 pswpNew -> cy = sheight;
4491 pswpClient -> y = pswpNew -> y + pswpNew -> cy + 3;
4492 pswpClient -> cy = (swpClient.cy - pswpNew -> cy) - 3;
4493 sCount++;
[2]4494
[133]4495 if (fSplitStatus)
4496 {
4497 pswpNew = (PSWP) mp1 + (soldCount + 1);
4498 *pswpNew = *pswpClient;
4499 pswpNew -> hwnd = hwndStatus2;
4500 pswpNew -> hwndInsertBehind = HWND_BOTTOM;
4501 pswpNew -> x = width + 8;
4502 pswpNew -> y = swpClient.y + 2;
4503 pswpNew -> cx = width - 6;
4504 pswpNew -> cy = sheight;
4505 sCount++;
4506 }
4507 else
4508 {
4509 WinShowWindow(hwndStatus2, FALSE);
4510 WinSetWindowText(hwndStatus2,
4511 NullStr);
4512 }
[2]4513
[133]4514 if (fToolbar)
4515 {
4516 if (fTextTools)
4517 theight = 32L;
4518 else if (!fToolTitles)
4519 theight = 40L;
4520 pswpNew = (PSWP) mp1 + (soldCount + 1 +
4521 (fSplitStatus != FALSE));
4522 *pswpNew = *pswpClient;
4523 pswpNew -> hwnd = WinWindowFromID(hwnd, MAIN_TOOLS);
4524 pswpNew -> hwndInsertBehind = HWND_BOTTOM;
4525 pswpNew -> x = swpClient.x + 2;
4526 pswpNew -> y = (swpClient.y + swpClient.cy) - (theight - 2);
4527 pswpNew -> cx = swpClient.cx - 4;
4528 pswpNew -> cy = theight - 4;
4529 pswpClient -> cy -= theight;
4530 sCount++;
4531 }
4532 else
4533 WinShowWindow(WinWindowFromID(hwnd, MAIN_TOOLS), FALSE);
[2]4534
[133]4535 if (fDrivebar)
4536 {
4537 ResizeDrives(WinWindowFromID(hwnd, MAIN_DRIVES),
4538 pswpClient -> cx - 4);
4539 pswpNew = (PSWP) mp1 + (soldCount + 1 +
4540 (fSplitStatus != FALSE) +
4541 (fToolbar != FALSE));
4542 *pswpNew = *pswpClient;
4543 pswpNew -> hwnd = WinWindowFromID(hwnd, MAIN_DRIVES);
4544 pswpNew -> hwndInsertBehind = HWND_BOTTOM;
4545 pswpNew -> x = swpClient.x + 2;
4546 dheight += ((dheight - 2) * DriveLines);
4547 pswpNew -> y = (swpClient.y + swpClient.cy) - (dheight - 2);
4548 if (fToolbar)
4549 pswpNew -> y -= theight;
4550 pswpNew -> cx = swpClient.cx - 4;
4551 pswpNew -> cy = dheight - 4;
4552 pswpClient -> cy -= dheight;
4553 sCount++;
4554 }
4555 else
4556 WinShowWindow(WinWindowFromID(hwnd, MAIN_DRIVES), FALSE);
[2]4557
[133]4558 if (fAutoView)
4559 {
4560 pswpNew = (PSWP) mp1 + (soldCount + 1 +
4561 (fToolbar != FALSE) +
4562 (fDrivebar != FALSE) +
4563 (fSplitStatus != FALSE));
4564 *pswpNew = *pswpClient;
4565 pswpNew -> hwnd = (fComments) ? hwndAutoMLE : hwndAutoview;
4566 pswpNew -> x = pswpClient -> x + 3;
4567 pswpNew -> y = pswpClient -> y + 3;
4568 if (fMoreButtons)
4569 pswpNew -> y += (bheight + 4);
4570 pswpNew -> cx = pswpClient -> cx - 6;
4571 AutoviewHeight = min(AutoviewHeight,
4572 pswpClient -> cy - 116);
4573 AutoviewHeight = max(AutoviewHeight, 36);
4574 pswpNew -> cy = AutoviewHeight;
4575 pswpClient -> y += (AutoviewHeight + 6);
4576 pswpClient -> cy -= (AutoviewHeight + 6);
4577 sCount++;
4578 WinShowWindow((fComments) ? hwndAutoview : hwndAutoMLE, FALSE);
4579 }
4580 else
4581 {
4582 WinShowWindow(hwndAutoview, FALSE);
4583 WinShowWindow(hwndAutoMLE, FALSE);
4584 }
[2]4585
[133]4586 pswpNew = (PSWP) mp1 + (soldCount + 1 +
4587 (fToolbar != FALSE) +
4588 (fDrivebar != FALSE) +
4589 (fSplitStatus != FALSE) +
4590 (fAutoView != FALSE));
4591 *pswpNew = *pswpClient;
4592 pswpNew -> hwnd = WinWindowFromID(hwnd, IDM_OPENWALK);
4593 pswpNew -> x = swpClient.cx - ((sheight * 2) + 4);
4594 pswpNew -> y = swpClient.y;
4595 pswpNew -> cx = sheight + 4;
4596 pswpNew -> cy = sheight + 4;
4597 sCount++;
4598 pswpNew = (PSWP) mp1 + (soldCount + 2 +
4599 (fToolbar != FALSE) +
4600 (fDrivebar != FALSE) +
4601 (fSplitStatus != FALSE) +
4602 (fAutoView != FALSE));
4603 *pswpNew = *pswpClient;
4604 pswpNew -> hwnd = WinWindowFromID(hwnd, IDM_USERLIST);
4605 pswpNew -> x = swpClient.cx - (sheight + 2);
4606 pswpNew -> y = swpClient.y;
4607 pswpNew -> cx = sheight + 4;
4608 pswpNew -> cy = sheight + 4;
4609 sCount++;
4610 pswpNew = (PSWP) mp1 + (soldCount + 3 +
4611 (fToolbar != FALSE) +
4612 (fDrivebar != FALSE) +
4613 (fSplitStatus != FALSE) +
4614 (fAutoView != FALSE));
4615 *pswpNew = *pswpClient;
4616 pswpNew -> hwnd = WinWindowFromID(hwnd, MAIN_LED);
4617 pswpNew -> x = swpClient.cx - ((sheight * 2) + 16);
4618 pswpNew -> y = swpClient.y;
4619 pswpNew -> cx = 12;
4620 pswpNew -> cy = 12;
4621 sCount++;
4622 pswpNew = (PSWP) mp1 + (soldCount + 4 +
4623 (fToolbar != FALSE) +
4624 (fDrivebar != FALSE) +
4625 (fSplitStatus != FALSE) +
4626 (fAutoView != FALSE));
4627 *pswpNew = *pswpClient;
4628 pswpNew -> hwnd = WinWindowFromID(hwnd, MAIN_LEDHDR);
4629 pswpNew -> x = swpClient.cx - ((sheight * 2) + 16);
4630 pswpNew -> y = swpClient.y + 12;
4631 pswpNew -> cx = 12;
4632 pswpNew -> cy = sheight - 8;
4633 sCount++;
4634 if (fUserComboBox)
4635 {
4636 if (!aheight)
4637 {
[2]4638
[133]4639 SWP swpTemp;
[2]4640
[133]4641 WinQueryWindowPos(WinWindowFromID(hwndDrivelist, CBID_EDIT),
4642 &swpTemp);
4643 aheight = swpTemp.cy;
4644 }
4645 pswpNew = (PSWP) mp1 + (soldCount + 5 +
4646 (fToolbar != FALSE) +
4647 (fSplitStatus != FALSE) +
4648 (fDrivebar != FALSE) +
4649 (fAutoView != FALSE));
4650 *pswpNew = *pswpClient;
4651 pswpNew -> hwnd = hwndDrivelist;
4652 pswpNew -> x = swpClient.x;
4653 pswpNew -> cx = 48;
4654 pswpClient -> cy -= (aheight + 6L);
4655 pswpNew -> y = pswpClient -> y;
4656 pswpNew -> cy = pswpClient -> cy + (aheight + 5L);
4657 sCount++;
4658 pswpNew = (PSWP) mp1 + (soldCount + 6 +
4659 (fToolbar != FALSE) +
4660 (fDrivebar != FALSE) +
4661 (fSplitStatus != FALSE) +
4662 (fAutoView != FALSE));
4663 *pswpNew = *pswpClient;
4664 pswpNew -> hwnd = hwndStatelist;
4665 pswpNew -> x = swpClient.x + 48;
4666 pswpNew -> cx = (swpClient.cx - 48) / 7;
4667 pswpNew -> y = pswpClient -> y;
4668 pswpNew -> cy = pswpClient -> cy + (aheight + 5L);
4669 sCount++;
4670 pswpNew = (PSWP) mp1 + (soldCount + 7 +
4671 (fToolbar != FALSE) +
4672 (fDrivebar != FALSE) +
4673 (fSplitStatus != FALSE) +
4674 (fAutoView != FALSE));
4675 *pswpNew = *pswpClient;
4676 pswpNew -> hwnd = hwndCmdlist;
4677 pswpNew -> x = swpClient.x + 48 + ((swpClient.cx - 48) / 7);
4678 pswpNew -> cx = (swpClient.cx - 48) / 5 +
4679 ((swpClient.cx - 48) / 5) - ((swpClient.cx - 48) / 7);
4680 pswpNew -> y = pswpClient -> y;
4681 pswpNew -> cy = pswpClient -> cy + (aheight + 5L);
4682 sCount++;
4683 pswpNew = (PSWP) mp1 + (soldCount + 8 +
4684 (fToolbar != FALSE) +
4685 (fDrivebar != FALSE) +
4686 (fSplitStatus != FALSE) +
4687 (fAutoView != FALSE));
4688 *pswpNew = *pswpClient;
4689 pswpNew -> hwnd = hwndUserlist;
4690 pswpNew -> x = swpClient.x + 48 + (((swpClient.cx - 48) / 5) * 2);
4691 pswpNew -> cx = ((swpClient.x + swpClient.cx) - pswpNew -> x) -
4692 ((fToolbar) ?
4693 ((swpClient.cx - 48) / 7) : 0);
4694 pswpNew -> y = pswpClient -> y;
4695 pswpNew -> cy = pswpClient -> cy + (aheight + 5L);
4696 sCount++;
4697 if (fToolbar)
4698 {
4699 pswpNew = (PSWP) mp1 + (soldCount + 9 +
4700 (fToolbar != FALSE) +
4701 (fDrivebar != FALSE) +
4702 (fSplitStatus != FALSE) +
4703 (fAutoView != FALSE));
4704 *pswpNew = *pswpClient;
4705 pswpNew -> hwnd = hwndButtonlist;
4706 pswpNew -> x = swpClient.cx - ((swpClient.cx - 48) / 7) + 4;
4707 pswpNew -> cx = (swpClient.x + swpClient.cx) - pswpNew -> x;
4708 pswpNew -> y = pswpClient -> y;
4709 pswpNew -> cy = pswpClient -> cy + (aheight + 5L);
4710 sCount++;
4711 }
4712 else
4713 WinShowWindow(hwndButtonlist, FALSE);
4714 }
4715 else
4716 {
4717 WinShowWindow(hwndUserlist, FALSE);
4718 WinShowWindow(hwndDrivelist, FALSE);
4719 WinShowWindow(hwndStatelist, FALSE);
4720 WinShowWindow(hwndButtonlist, FALSE);
4721 WinShowWindow(hwndCmdlist, FALSE);
4722 }
4723 {
4724 PSWP pswpTitlebar = (PSWP) 0, pswpMinbutton = (PSWP) 0;
4725 SHORT x;
[2]4726
[133]4727 pswpNew = (PSWP) mp1 + (soldCount + 5 +
4728 (fToolbar != FALSE) +
4729 (fDrivebar != FALSE) +
4730 (fSplitStatus != FALSE) +
4731 (fAutoView != FALSE) +
4732 ((fUserComboBox != FALSE) * 4) +
4733 (fUserComboBox != FALSE &&
4734 fToolbar != FALSE));
4735 pswp = (PSWP) mp1;
4736 for (x = 0; x < soldCount; x++)
4737 {
4738 if (!pswpTitlebar &&
4739 WinQueryWindowUShort(pswp -> hwnd, QWS_ID) == FID_TITLEBAR)
4740 pswpTitlebar = pswp;
4741 else if (!pswpMinbutton &&
4742 WinQueryWindowUShort(pswp -> hwnd, QWS_ID) == FID_MINMAX)
4743 pswpMinbutton = pswp;
4744 if (pswpTitlebar &&
4745 pswpMinbutton)
4746 break;
4747 pswp++;
4748 }
4749 if (pswpMinbutton &&
4750 pswpTitlebar)
4751 {
4752 *pswpNew = *pswpMinbutton;
4753 pswpNew -> hwnd = WinWindowFromID(hwnd, IDM_IDEALSIZE);
4754 pswpNew -> cy = pswpMinbutton -> cy + 3;
4755 pswpNew -> cx = min(pswpNew -> cy, (pswpMinbutton -> cx / 2) + 3);
4756 pswpTitlebar -> cx -= (pswpNew -> cx - 1);
4757 pswpNew -> x = pswpTitlebar -> x + (pswpTitlebar -> cx);
4758 pswpNew -> y = pswpMinbutton -> y - 1;
4759 sCount++;
4760 }
4761 else
4762 WinShowWindow(WinWindowFromID(hwnd, IDM_IDEALSIZE), FALSE);
4763 }
[2]4764
[133]4765 if (fMoreButtons)
4766 {
[2]4767
[133]4768 LONG lastx;
[2]4769
[133]4770 pswpNew = (PSWP) mp1 + (soldCount + 6 +
4771 (fToolbar != FALSE) +
4772 (fDrivebar != FALSE) +
4773 (fSplitStatus != FALSE) +
4774 (fAutoView != FALSE) +
4775 ((fUserComboBox != FALSE) * 4) +
4776 (fUserComboBox != FALSE &&
4777 fToolbar != FALSE));
4778 *pswpNew = *pswpClient;
4779 pswpNew -> hwnd = hwndName;
4780 pswpNew -> x = swpClient.x + 3;
4781 pswpNew -> y = swpClient.y + (sheight + 6);
4782 pswpNew -> cx = ((swpClient.cx / 2) + (swpClient.cx / 5)) - 3;
4783 lastx = pswpNew -> x + pswpNew -> cx;
4784 pswpNew -> cy = bheight;
4785 pswpClient -> y += (bheight + 4);
4786 pswpClient -> cy -= (bheight + 4);
4787 sCount++;
4788 pswpNew = (PSWP) mp1 + (soldCount + 7 +
4789 (fToolbar != FALSE) +
4790 (fDrivebar != FALSE) +
4791 (fSplitStatus != FALSE) +
4792 (fAutoView != FALSE) +
4793 ((fUserComboBox != FALSE) * 4) +
4794 (fUserComboBox != FALSE &&
4795 fToolbar != FALSE));
4796 *pswpNew = *pswpClient;
4797 pswpNew -> hwnd = hwndDate;
4798 pswpNew -> x = lastx + 3;
4799 pswpNew -> y = swpClient.y + (sheight + 6);
4800 pswpNew -> cx = (swpClient.cx / 6) + (swpClient.cx / 16) - 3;
4801 lastx = pswpNew -> x + pswpNew -> cx;
4802 pswpNew -> cy = bheight;
4803 sCount++;
4804 pswpNew = (PSWP) mp1 + (soldCount + 8 +
4805 (fToolbar != FALSE) +
4806 (fDrivebar != FALSE) +
4807 (fSplitStatus != FALSE) +
4808 (fAutoView != FALSE) +
4809 ((fUserComboBox != FALSE) * 4) +
4810 (fUserComboBox != FALSE &&
4811 fToolbar != FALSE));
4812 *pswpNew = *pswpClient;
4813 pswpNew -> hwnd = hwndAttr;
4814 pswpNew -> x = lastx + 3;
4815 pswpNew -> y = swpClient.y + (sheight + 6);
4816 pswpNew -> cx = (swpClient.cx - pswpNew -> x) - 1;
4817 pswpNew -> cy = bheight;
4818 sCount++;
4819 }
4820 else
4821 {
4822 WinShowWindow(hwndAttr, FALSE);
4823 WinShowWindow(hwndName, FALSE);
4824 WinShowWindow(hwndDate, FALSE);
4825 }
4826 return MRFROMSHORT(sCount);
4827 }
[2]4828
[133]4829 case WM_QUERYFRAMECTLCOUNT:
4830 {
4831 SHORT sCount;
[2]4832
[133]4833 sCount = (SHORT) oldproc(hwnd, msg, mp1, mp2);
[2]4834
[133]4835 sCount += 6;
4836 if (fSplitStatus)
4837 sCount++;
4838 if (fToolbar)
4839 sCount++;
4840 if (fUserComboBox)
4841 {
4842 sCount += 4;
4843 if (fToolbar)
4844 sCount++;
4845 }
4846 if (fDrivebar)
4847 sCount++;
4848 if (fAutoView)
4849 sCount++;
4850 if (fMoreButtons)
4851 sCount += 3;
4852 return MRFROMSHORT(sCount);
4853 }
[2]4854
[133]4855 case WM_CLOSE:
4856 WinSendMsg(WinWindowFromID(hwnd, FID_CLIENT), msg, mp1, mp2);
4857 return 0;
4858 }
4859 return oldproc(hwnd, msg, mp1, mp2);
[2]4860}
4861
[133]4862MRESULT EXPENTRY MainWMCommand(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[130]4863{
[2]4864 SetShiftState();
[133]4865 switch (SHORT1FROMMP(mp1))
4866 {
4867 case IDM_SETTARGET:
4868 SetTargetDir(hwnd, FALSE);
4869 break;
[2]4870
[133]4871 case IDM_TOAUTOMLE:
4872 if (fComments && fAutoView)
4873 WinSetFocus(HWND_DESKTOP,
4874 hwndAutoMLE);
4875 break;
[2]4876
[133]4877 case IDM_HIDENOTEWND:
4878 HideNote();
4879 break;
4880 case IDM_SHOWNOTEWND:
4881 ShowNote();
4882 break;
[2]4883
[133]4884 case IDM_COMPARE:
4885 {
4886 WALK2 wa;
4887 PCNRITEM pci;
4888
4889 memset(&wa, 0, sizeof(wa));
4890 wa.size = sizeof(wa);
4891 pci = (PCNRITEM) WinSendMsg(WinWindowFromID(WinWindowFromID(
4892 hwndTree, FID_CLIENT), TREE_CNR),
4893 CM_QUERYRECORDEMPHASIS,
4894 MPFROMLONG(CMA_FIRST),
4895 MPFROMSHORT(CRA_CURSORED));
4896 if (pci && (INT) pci != -1)
[2]4897 {
[133]4898 strcpy(wa.szCurrentPath1, pci -> szFileName);
4899 MakeValidDir(wa.szCurrentPath1);
4900 }
4901 else
4902 save_dir2(wa.szCurrentPath1);
4903 TopWindowName(hwndMain, (HWND) 0, wa.szCurrentPath2);
4904 if (!*wa.szCurrentPath2)
4905 strcpy(wa.szCurrentPath2, wa.szCurrentPath1);
4906 MakeValidDir(wa.szCurrentPath2);
4907 if (WinDlgBox(HWND_DESKTOP,
4908 hwnd,
4909 WalkTwoCmpDlgProc,
4910 FM3ModHandle,
4911 WALK2_FRAME,
4912 MPFROMP(&wa)) &&
4913 !IsFile(wa.szCurrentPath1) &&
4914 !IsFile(wa.szCurrentPath2))
4915 {
4916 if (!*dircompare)
4917 {
[2]4918
[133]4919 COMPARE *cmp;
[2]4920
[133]4921 cmp = malloc(sizeof(COMPARE));
4922 if (cmp)
4923 {
4924 memset(cmp, 0, sizeof(COMPARE));
4925 cmp -> size = sizeof(COMPARE);
4926 strcpy(cmp -> leftdir, wa.szCurrentPath1);
4927 strcpy(cmp -> rightdir, wa.szCurrentPath2);
4928 cmp -> hwndParent = hwnd;
4929 cmp -> dcd.hwndParent = hwnd;
4930 WinDlgBox(HWND_DESKTOP,
4931 HWND_DESKTOP,
4932 CompareDlgProc,
4933 FM3ModHandle,
4934 COMP_FRAME,
4935 MPFROMP(cmp));
4936 }
4937 }
4938 else
4939 {
[2]4940
[200]4941 CHAR d1[] = "\"";
4942 CHAR d2[] = "\"";
[2]4943
[133]4944 if (!needs_quoting(wa.szCurrentPath1))
4945 *d1 = 0;
4946 if (!needs_quoting(wa.szCurrentPath2))
4947 *d2 = 0;
4948 runemf2(SEPARATE,
4949 HWND_DESKTOP,
4950 NULL,
4951 NULL,
4952 "%s %s%s%s %s%s%s",
4953 dircompare,
4954 d1,
4955 wa.szCurrentPath1,
4956 d1,
4957 d2,
4958 wa.szCurrentPath2,
4959 d2);
4960 }
[2]4961 }
[133]4962 }
4963 break;
[2]4964
[133]4965 case IDM_EXIT:
4966 case IDM_KILLME:
4967 PostMsg(hwnd,
4968 WM_CLOSE,
4969 MPVOID,
4970 MPVOID);
4971 break;
[2]4972
[133]4973 case IDM_CLI:
4974 if (fSplitStatus &&
4975 hwndStatus2 &&
4976 !WinIsWindow(WinQueryAnchorBlock(hwnd),
4977 WinWindowFromID(hwndStatus2, COMMAND_LINE)))
4978 PostMsg(hwndStatus2,
4979 UM_CLICKED,
4980 MPVOID,
4981 MPVOID);
4982 break;
[2]4983
[133]4984 case IDM_ADDTOUSERLIST:
4985 case IDM_DELETEFROMUSERLIST:
4986 {
4987 CHAR temp[CCHMAXPATH], path[CCHMAXPATH];
4988
4989 *temp = 0;
4990 WinQueryWindowText(hwndUserlist,
4991 CCHMAXPATH,
4992 temp);
4993 bstrip(temp);
4994 if (*temp &&
4995 !DosQueryPathInfo(temp,
4996 FIL_QUERYFULLNAME,
4997 path,
4998 sizeof(path)))
[2]4999 {
[133]5000 if (SHORT1FROMMP(mp1) == IDM_ADDTOUSERLIST)
5001 {
5002 if (add_udir(TRUE, path))
5003 {
5004 if (fUdirsChanged)
5005 save_udirs();
5006 WinSendMsg(hwnd,
5007 UM_FILLUSERLIST,
5008 MPVOID,
5009 MPVOID);
5010 }
5011 else
5012 DosBeep(50, 50);
5013 }
5014 else
5015 {
5016 if (remove_udir(path))
5017 {
5018 if (fUdirsChanged)
5019 save_udirs();
5020 WinSendMsg(hwnd, UM_FILLUSERLIST, MPVOID, MPVOID);
5021 }
5022 else
5023 DosBeep(50, 50);
5024 }
[2]5025 }
[133]5026 }
5027 break;
[2]5028
[133]5029 case IDM_SAVEDIRCNRSTATE:
5030 case IDM_DELETEDIRCNRSTATE:
5031 {
5032 CHAR name[14];
5033
5034 *name = 0;
5035 WinQueryWindowText(hwndStatelist, 13, name);
5036 bstrip(name);
5037 if (*name)
[2]5038 {
[133]5039 if (SHORT1FROMMP(mp1) == IDM_SAVEDIRCNRSTATE)
5040 {
5041 if (SaveDirCnrState(hwnd, name))
5042 {
5043 if (add_setup(name))
5044 {
5045 WinSendMsg(hwndStatelist, LM_INSERTITEM,
5046 MPFROM2SHORT(LIT_SORTASCENDING, 0),
5047 MPFROMP(name));
5048 save_setups();
5049 }
5050 }
5051 WinSetWindowText(hwndStatelist,
5052 GetPString(IDS_STATETEXT));
5053 }
5054 else
5055 {
[2]5056
[133]5057 ULONG numsaves = 0, size, x;
5058 CHAR s[120];
[2]5059
[133]5060 if (remove_setup(name))
5061 save_setups();
5062 sprintf(s, "%s.NumDirsLastTime", name);
5063 size = sizeof(ULONG);
5064 if (PrfQueryProfileData(fmprof, FM3Str, s, (PVOID) & numsaves,
5065 &size) && size)
5066 {
5067 PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0L);
5068 for (x = 0; x < numsaves; x++)
5069 {
5070 sprintf(s, "%s.DirCnrPos.%lu", name, x);
5071 PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0);
5072 sprintf(s, "%s.DirCnrDir.%lu", name, x);
5073 PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0);
5074 sprintf(s, "%s.DirCnrSort.%lu", name, x);
5075 PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0);
5076 sprintf(s, "%s.DirCnrFilter.%lu", name, x);
5077 PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0);
5078 sprintf(s, "%s.DirCnrView.%lu", name, x);
5079 PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0);
5080 }
5081 sprintf(s, "%s.LastTreePos", name);
5082 PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0);
5083 sprintf(s, "%s.MySizeLastTime", name);
5084 PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0);
5085 }
5086 else
5087 DosBeep(50, 100);
5088 PostMsg(hwnd, UM_FILLSETUPLIST, MPVOID, MPVOID);
5089 }
[2]5090 }
[133]5091 }
5092 break;
[2]5093
[133]5094 case IDM_IDEALSIZE:
5095 {
5096 SWP swp, swpD;
5097 ULONG icz = WinQuerySysValue(HWND_DESKTOP, SV_CYICON) * 2L;
5098 ULONG bsz = WinQuerySysValue(HWND_DESKTOP, SV_CYSIZEBORDER);
5099
5100 WinQueryWindowPos(WinQueryWindow(hwnd, QW_PARENT), &swp);
5101 if (swp.fl & SWP_MAXIMIZE)
[2]5102 {
[133]5103 WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), WM_SYSCOMMAND,
5104 MPFROM2SHORT(SC_RESTORE, 0), MPVOID);
5105 WinQueryWindowPos(WinQueryWindow(hwnd, QW_PARENT), &swp);
[2]5106 }
[133]5107 WinGetMaxPosition(WinQueryWindow(hwnd, QW_PARENT), &swpD);
5108 swpD.x += bsz;
5109 swpD.cx -= (bsz * 2);
5110 swpD.y += icz;
5111 swpD.cy -= (icz + bsz);
5112 if (swp.x == swpD.x && swp.y == swpD.y &&
5113 swp.cx == swpD.cx &&
5114 swp.cy == swpD.cy &&
[200]5115 // fixme to be #defined someday
[133]5116 WinQueryWindowUShort(hwnd, QWL_USER + 10) &&
5117 WinQueryWindowUShort(hwnd, QWL_USER + 14))
5118 {
5119 swpD.x = WinQueryWindowUShort(hwnd, QWL_USER + 8);
5120 swpD.cx = WinQueryWindowUShort(hwnd, QWL_USER + 10);
5121 swpD.y = WinQueryWindowUShort(hwnd, QWL_USER + 12);
5122 swpD.cy = WinQueryWindowUShort(hwnd, QWL_USER + 14);
5123 }
5124 else
5125 {
5126 WinSetWindowUShort(hwnd, QWL_USER + 8, (USHORT) swp.x);
5127 WinSetWindowUShort(hwnd, QWL_USER + 10, (USHORT) swp.cx);
5128 WinSetWindowUShort(hwnd, QWL_USER + 12, (USHORT) swp.y);
5129 WinSetWindowUShort(hwnd, QWL_USER + 14, (USHORT) swp.cy);
5130 }
5131 WinSetWindowPos(WinQueryWindow(hwnd, QW_PARENT), HWND_TOP,
5132 swpD.x, swpD.y, swpD.cx,
5133 swpD.cy, SWP_MOVE | SWP_SIZE);
5134 }
5135 break;
[2]5136
[133]5137 case IDM_BLINK:
5138 WinSetWindowPos(WinQueryWindow(hwnd, QW_PARENT), HWND_TOP, 0, 0, 0, 0,
5139 SWP_MINIMIZE);
5140 WinSetWindowPos(WinQueryWindow(hwnd, QW_PARENT), HWND_TOP, 0, 0, 0, 0,
5141 SWP_RESTORE | SWP_ZORDER);
5142 break;
[2]5143
[133]5144 case DID_CANCEL:
5145 {
5146 HWND hwndTop = TopWindow(hwndMain, (HWND) 0);
[2]5147
[133]5148 if (hwndTop)
5149 WinSetFocus(HWND_DESKTOP,
5150 hwndTop);
5151 }
5152 break;
[2]5153
[133]5154 case IDM_NOTEBOOK:
5155 WinDlgBox(HWND_DESKTOP,
5156 hwnd,
5157 CfgDlgProc,
5158 FM3ModHandle,
5159 CFG_FRAME,
5160 MPVOID);
5161 break;
[2]5162
[133]5163 case IDM_VIEWHELPS:
5164 case IDM_VIEWINFS:
5165 WinDlgBox(HWND_DESKTOP,
5166 HWND_DESKTOP,
5167 ViewInfProc,
5168 FM3ModHandle,
5169 VINF_FRAME,
5170 ((SHORT1FROMMP(mp1) == IDM_VIEWHELPS) ?
5171 MPFROMP(NullStr) :
5172 MPVOID));
5173 break;
[2]5174
[133]5175 case IDM_OPENWALK:
5176 {
5177 char newpath[CCHMAXPATH];
[2]5178
[133]5179 *newpath = 0;
5180 TopWindowName(hwnd, (HWND) 0, newpath);
5181 if (WinDlgBox(HWND_DESKTOP,
5182 hwnd,
5183 WalkAllDlgProc,
5184 FM3ModHandle,
5185 WALK_FRAME,
5186 MPFROMP(newpath)) &&
5187 *newpath)
5188 OpenDirCnr((HWND) 0,
5189 hwndMain,
5190 hwndTree,
5191 FALSE,
5192 newpath);
5193 }
5194 break;
[2]5195
[133]5196 case IDM_WINDOWDLG:
5197 WindowList(hwnd);
5198 break;
[2]5199
[133]5200 case IDM_HELPMOUSE:
5201 case IDM_HELPCONTEXT:
5202 case IDM_HELPHINTS:
5203 case IDM_HELPPIX:
5204 case IDM_HELPTUTOR:
5205 case IDM_HELPUSERLIST:
5206 case IDM_HELP:
5207 case IDM_HELPCONTENTS:
5208 case IDM_HELPKEYS:
5209 case IDM_HELPGENERAL:
5210 if (hwndHelp)
5211 {
5212 if (SHORT1FROMMP(mp2) == CMDSRC_MENU)
5213 {
[2]5214
[133]5215 RECTL rcl;
5216 ULONG icz = WinQuerySysValue(HWND_DESKTOP, SV_CYICON) * 2L;
[2]5217
[133]5218 WinQueryWindowRect(HWND_DESKTOP, &rcl);
5219 rcl.yBottom += icz;
5220 rcl.yTop -= icz;
5221 rcl.xLeft += icz;
5222 rcl.xRight -= icz;
5223 WinSendMsg(hwndHelp, HM_SET_COVERPAGE_SIZE,
5224 MPFROMP(&rcl), MPVOID);
5225 }
5226 else
5227 {
[2]5228
[133]5229 RECTL rcl;
[2]5230
[133]5231 WinQueryWindowRect(HWND_DESKTOP, &rcl);
5232 rcl.yBottom += 8;
5233 rcl.yTop = (rcl.yTop / 2) + (rcl.yTop / 7);
5234 rcl.xLeft = (rcl.xRight / 2) - (rcl.xRight / 7);
5235 rcl.xRight -= 8;
5236 WinSendMsg(hwndHelp, HM_SET_COVERPAGE_SIZE,
5237 MPFROMP(&rcl), MPVOID);
5238 }
5239 switch (SHORT1FROMMP(mp1))
5240 {
5241 case IDM_HELPCONTEXT:
5242 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
5243 MPFROM2SHORT(HELP_CONTEXT, 0),
5244 MPFROMSHORT(HM_RESOURCEID));
5245 break;
[2]5246
[133]5247 case IDM_HELPMOUSE:
5248 if (hwndHelp)
5249 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
5250 MPFROM2SHORT(HELP_MOUSE, 0),
5251 MPFROMSHORT(HM_RESOURCEID));
5252 break;
[2]5253
[133]5254 case IDM_HELPPIX:
5255 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
5256 MPFROM2SHORT(HELP_BITMAP1, 0),
5257 MPFROMSHORT(HM_RESOURCEID));
5258 break;
[2]5259
[133]5260 case IDM_HELPTUTOR:
5261 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
5262 MPFROM2SHORT(HELP_TUTORIAL, 0),
5263 MPFROMSHORT(HM_RESOURCEID));
5264 break;
[2]5265
[133]5266 case IDM_HELPHINTS:
5267 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
5268 MPFROM2SHORT(HELP_HINTS, 0),
5269 MPFROMSHORT(HM_RESOURCEID));
5270 break;
[2]5271
[133]5272 case IDM_HELPGENERAL:
5273 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
5274 MPFROM2SHORT(HELP_MAIN, 0),
5275 MPFROMSHORT(HM_RESOURCEID));
5276 break;
5277 case IDM_HELPKEYS:
5278 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
5279 MPFROM2SHORT(HELP_KEYS, 0),
5280 MPFROMSHORT(HM_RESOURCEID));
5281 break;
[2]5282
[133]5283 case IDM_HELP:
5284 case IDM_HELPCONTENTS:
5285 WinSendMsg(hwndHelp, HM_HELP_CONTENTS, MPVOID, MPVOID);
5286 break;
[2]5287
[133]5288 case IDM_HELPUSERLIST:
5289 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
5290 MPFROM2SHORT(HELP_USERLISTS, 0),
5291 MPFROMSHORT(HM_RESOURCEID));
5292 break;
[2]5293 }
[133]5294 }
5295 break;
[2]5296
[133]5297 case IDM_EDITANYARCHIVER:
5298 {
5299 DIRCNRDATA arc;
[2]5300
[133]5301 memset(&arc, 0, sizeof(DIRCNRDATA));
5302 EditArchiverData(hwnd, &arc);
5303 }
5304 break;
[2]5305
[133]5306 case IDM_ABOUT:
5307 WinDlgBox(HWND_DESKTOP, hwnd, AboutDlgProc, FM3ModHandle,
5308 ABT_FRAME, MPVOID);
5309 break;
[2]5310
[133]5311 case IDM_FONTPALETTE:
5312 OpenObject("<WP_FNTPAL>", Default, hwnd);
5313 break;
[2]5314
[133]5315 case IDM_HICOLORPALETTE:
5316 case IDM_COLORPALETTE:
5317 {
5318 CHAR *palette = "<WP_CLRPAL>";
5319 ULONG version[2];
5320
5321 if (!DosQuerySysInfo(QSV_VERSION_MAJOR, QSV_VERSION_MINOR,
5322 (PVOID) & version, (ULONG) sizeof(version)))
[2]5323 {
[133]5324 if (version[0] > 20L || (version[0] == 20L && version[1] > 29L))
5325 {
5326 if (SHORT1FROMMP(mp1) == IDM_HICOLORPALETTE)
5327 palette = "<WP_HIRESCLRPAL>";
5328 else
5329 palette = "<WP_LORESCLRPAL>";
5330 }
[2]5331 }
[133]5332 OpenObject(palette, Default, hwnd);
5333 }
5334 break;
[2]5335
[133]5336 case IDM_SYSTEMSETUP:
5337 OpenObject("<WP_CONFIG>", Default, hwnd);
5338 break;
[2]5339
[133]5340 case IDM_SCHEMEPALETTE:
5341 {
5342 HOBJECT hWPSObject;
[2]5343
[133]5344 hWPSObject = WinQueryObject("<WP_SCHPAL>");
5345 if (hWPSObject != NULLHANDLE)
5346 WinSetObjectData(hWPSObject, "SCHEMES=Winter:PM_Winter,"
5347 "Spring:PM_Spring,Summer:PM_Summer,"
5348 "System:PM_System,Windows:PM_Windows;"
5349 "OPEN=DEFAULT");
5350 }
5351 break;
[2]5352
[133]5353 case IDM_SYSTEMCLOCK:
5354 OpenObject("<WP_CLOCK>", Default, hwnd);
5355 break;
[2]5356
5357#ifdef NEVER
[133]5358 case IDM_SYSINFO:
5359 WinDlgBox(HWND_DESKTOP, HWND_DESKTOP, SysInfoDlgProc, FM3ModHandle,
5360 SYS_FRAME, NULL);
5361 break;
[2]5362#endif
5363
[133]5364 case IDM_INSTANT:
5365 {
5366 CHAR path[CCHMAXPATH];
5367 PCNRITEM pci = (PCNRITEM) 0;
5368
5369 if (hwndTree)
5370 pci = (PCNRITEM) WinSendMsg(hwndTree, CM_QUERYRECORDEMPHASIS,
5371 MPFROMLONG(CMA_FIRST),
5372 MPFROMSHORT(CRA_CURSORED));
5373 if (pci && (INT) pci != -1)
[2]5374 {
[133]5375 strcpy(path, pci -> szFileName);
5376 MakeValidDir(path);
[2]5377 }
[133]5378 else
5379 save_dir2(path);
5380 WinDlgBox(HWND_DESKTOP, hwnd, InstantDlgProc, FM3ModHandle,
5381 BAT_FRAME, MPFROMP(path));
5382 }
5383 break;
[2]5384
[133]5385 case IDM_WINFULLSCREEN:
5386 case IDM_DOSCOMMANDLINE:
5387 case IDM_COMMANDLINE:
5388 {
5389 CHAR *env = GetCmdSpec(FALSE), path[CCHMAXPATH];
5390 INT type = SEPARATE | WINDOWED;
5391
5392 *path = 0;
5393 TopWindowName(hwnd, (HWND) 0, path);
5394 if (SHORT1FROMMP(mp1) == IDM_DOSCOMMANDLINE)
5395 env = GetCmdSpec(TRUE);
5396 else if (SHORT1FROMMP(mp1) != IDM_COMMANDLINE)
[2]5397 {
[133]5398 env = "WINOS2.COM";
5399 type = SEPARATE | FULLSCREEN;
[2]5400 }
[133]5401 runemf2(type, hwnd, path, NULL, "%s", env);
5402 }
5403 break;
[2]5404
[133]5405 case IDM_KILLPROC:
5406 WinDlgBox(HWND_DESKTOP, hwnd, KillDlgProc, FM3ModHandle,
5407 KILL_FRAME, NULL);
5408 break;
[2]5409
[133]5410 case IDM_AUTOVIEWCOMMENTS:
5411 case IDM_AUTOVIEWFILE:
5412 if (SHORT1FROMMP(mp1) == IDM_AUTOVIEWFILE)
5413 fComments = FALSE;
5414 else
5415 fComments = TRUE;
5416 PrfWriteProfileData(fmprof, FM3Str, "Comments", &fComments,
5417 sizeof(BOOL));
5418 WinSetWindowText((fComments) ? hwndAutoview : hwndAutoMLE, NullStr);
5419 goto AutoChange;
[2]5420
[133]5421 case IDM_AUTOVIEW:
5422 SetMenuCheck(WinQueryWindowULong(hwnd, QWL_USER), SHORT1FROMMP(mp1),
5423 &fAutoView, TRUE, "AutoView");
5424 AutoChange:
5425 PostMsg(WinQueryWindow(hwnd, QW_PARENT), WM_UPDATEFRAME,
5426 MPFROMLONG(FCF_SIZEBORDER), MPVOID);
5427 if (fAutoView)
5428 {
[2]5429
[133]5430 CHAR s[CCHMAXPATH];
5431 HWND hwndDir;
5432 PCNRITEM pci;
[2]5433
[133]5434 hwndDir = TopWindowName(hwnd, (HWND) 0, s);
5435 if (hwndDir)
5436 {
5437 hwndDir = WinWindowFromID(hwndDir, FID_CLIENT);
5438 if (hwndDir)
5439 {
5440 hwndDir = WinWindowFromID(hwndDir, DIR_CNR);
5441 if (hwndDir)
5442 {
5443 pci = (PCNRITEM) WinSendMsg(hwndDir, CM_QUERYRECORDEMPHASIS,
5444 MPFROMLONG(CMA_FIRST),
5445 MPFROMSHORT(CRA_CURSORED));
5446 if (pci && (INT) pci != -1 &&
5447 (!(driveflags[toupper(*pci -> szFileName) - 'A'] & DRIVE_SLOW)))
5448 WinSendMsg(hwnd,
5449 UM_LOADFILE,
5450 MPFROMP(pci -> szFileName),
5451 (SHORT1FROMMP(mp1) == IDM_AUTOVIEW) ?
5452 MPVOID :
5453 MPFROMLONG(1L));
5454 }
5455 }
[2]5456 }
[133]5457 }
5458 break;
[2]5459
[133]5460 case IDM_TEXTTOOLS:
5461 SetMenuCheck(WinQueryWindowULong(hwnd, QWL_USER), SHORT1FROMMP(mp1),
5462 &fTextTools, TRUE, "TextTools");
5463 BuildTools(hwndToolback, TRUE);
5464 PostMsg(WinQueryWindow(hwnd, QW_PARENT), WM_UPDATEFRAME,
5465 MPFROMLONG(FCF_SIZEBORDER), MPVOID);
5466 break;
[2]5467
[133]5468 case IDM_TOOLTITLES:
5469 SetMenuCheck(WinQueryWindowULong(hwnd, QWL_USER), SHORT1FROMMP(mp1),
5470 &fToolTitles, TRUE, "ToolTitles");
5471 BuildTools(hwndToolback, TRUE);
5472 PostMsg(WinQueryWindow(hwnd, QW_PARENT), WM_UPDATEFRAME,
5473 MPFROMLONG(FCF_SIZEBORDER), MPVOID);
5474 break;
[2]5475
[133]5476 case IDM_HIDEMENU:
5477 {
5478 HWND hwndMenu;
5479
5480 hwndMenu = WinQueryWindowULong(hwnd, QWL_USER);
5481 MenuInvisible = (MenuInvisible) ? FALSE : TRUE;
5482 if (MenuInvisible)
[2]5483 {
[133]5484 WinSetParent(hwndMenu, HWND_OBJECT, FALSE);
5485 WinSetMenuItemText(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
5486 FID_SYSMENU), IDM_HIDEMENU,
5487 GetPString(IDS_UNHIDEMENUTEXT));
[2]5488 }
[133]5489 else
5490 {
5491 WinSetParent(hwndMenu, WinQueryWindow(hwnd, QW_PARENT), FALSE);
5492 WinSetMenuItemText(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
5493 FID_SYSMENU), IDM_HIDEMENU,
5494 GetPString(IDS_HIDEMENUTEXT));
5495 }
5496 PostMsg(WinQueryWindow(hwnd, QW_PARENT), WM_UPDATEFRAME,
5497 MPFROMLONG(FCF_MENU), MPVOID);
5498 PrfWriteProfileData(fmprof, FM3Str, "MenuInvisible",
5499 &MenuInvisible, sizeof(BOOL));
5500 }
5501 break;
[2]5502
[133]5503 case IDM_SEEALL:
5504 case IDM_GREP:
5505 case IDM_COLLECTOR:
5506 {
5507 HWND hwndC;
5508 SWP swp;
5509 BOOL already = FALSE;
5510
5511 if (Collector)
5512 already = TRUE;
5513 if (!already && !fAutoTile && !fExternalCollector)
5514 GetNextWindowPos(hwnd, &swp, NULL, NULL);
5515 hwndC = StartCollector((fExternalCollector) ? HWND_DESKTOP :
5516 hwnd, 4);
5517 if (hwndC)
[2]5518 {
[133]5519 if (!already && !fAutoTile && !fExternalCollector)
5520 WinSetWindowPos(hwndC, HWND_TOP, swp.x, swp.y,
5521 swp.cx, swp.cy, SWP_MOVE | SWP_SIZE |
5522 SWP_SHOW | SWP_ZORDER);
5523 else if (fAutoTile && !already)
5524 TileChildren(hwnd, TRUE);
5525 WinSetWindowPos(hwndC, HWND_TOP, 0, 0, 0, 0, SWP_SHOW | SWP_RESTORE |
5526 SWP_ACTIVATE);
5527 if (SHORT1FROMMP(mp1) == IDM_GREP)
5528 PostMsg(WinWindowFromID(hwndC, FID_CLIENT), WM_COMMAND,
5529 MPFROM2SHORT(IDM_GREP, 0), MPVOID);
5530 if (SHORT1FROMMP(mp1) == IDM_SEEALL)
5531 PostMsg(WinWindowFromID(hwndC, FID_CLIENT), WM_COMMAND,
5532 MPFROM2SHORT(IDM_SEEALL, 0), MPVOID);
[2]5533 }
[133]5534 }
5535 break;
[2]5536
[133]5537 case IDM_TOOLLEFT:
5538 case IDM_TOOLRIGHT:
5539 {
5540 TOOL *tool;
5541
5542 if (!toolhead || !toolhead -> next)
[2]5543 {
[133]5544 firsttool = (toolhead) ? toolhead -> id : 0;
5545 break;
[2]5546 }
[133]5547 tool = find_tool(firsttool);
5548 if (!tool)
5549 tool = toolhead;
5550 if (SHORT1FROMMP(mp1) == IDM_TOOLRIGHT)
5551 {
5552 tool = prev_tool(tool, TRUE);
5553 firsttool = tool -> id;
5554 }
5555 else
5556 {
5557 tool = next_tool(tool, TRUE);
5558 firsttool = tool -> id;
5559 }
5560 ResizeTools(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
5561 MAIN_TOOLS));
5562 }
5563 break;
[2]5564
[133]5565 case IDM_CREATETOOL:
5566 BuildTools(hwndToolback,
5567 TRUE);
5568 break;
[2]5569
[133]5570 case IDM_TOOLBAR:
5571 SetMenuCheck(WinQueryWindowULong(hwnd, QWL_USER),
5572 IDM_TOOLSUBMENU,
5573 &fToolbar,
5574 TRUE,
5575 "Toolbar");
5576 BuildTools(hwndToolback,
5577 TRUE);
5578 WinShowWindow(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
5579 MAIN_TOOLS),
5580 fToolbar);
5581 WinSendMsg(WinQueryWindow(hwnd, QW_PARENT),
5582 WM_UPDATEFRAME,
5583 MPFROMLONG(FCF_SIZEBORDER),
5584 MPVOID);
5585 if (fDrivebar)
5586 WinInvalidateRect(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
5587 MAIN_DRIVES),
5588 NULL,
5589 TRUE);
5590 break;
[2]5591
[133]5592 case IDM_DRIVEBAR:
5593 SetMenuCheck(WinQueryWindowULong(hwnd, QWL_USER),
5594 IDM_DRIVEBAR,
5595 &fDrivebar,
5596 TRUE,
5597 "Drivebar");
5598 WinShowWindow(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
5599 MAIN_DRIVES),
5600 fDrivebar);
5601 PostMsg(WinQueryWindow(hwnd, QW_PARENT),
5602 WM_UPDATEFRAME,
5603 MPFROMLONG(FCF_SIZEBORDER),
5604 MPVOID);
5605 PostMsg(hwnd,
[260]5606 UM_BUILDDRIVEBAR,
[133]5607 MPVOID,
5608 MPVOID);
5609 break;
[2]5610
[133]5611 case IDM_USERLIST:
5612 SetMenuCheck(WinQueryWindowULong(hwnd, QWL_USER),
5613 SHORT1FROMMP(mp1),
5614 &fUserComboBox,
5615 TRUE,
5616 "UserComboBox");
5617 WinShowWindow(hwndUserlist, fUserComboBox);
5618 PostMsg(WinQueryWindow(hwnd, QW_PARENT),
5619 WM_UPDATEFRAME,
5620 MPFROMLONG(FCF_SIZEBORDER),
5621 MPVOID);
5622 PostMsg(hwnd,
5623 UM_FILLUSERLIST,
5624 MPVOID,
5625 MPVOID);
5626 PostMsg(hwnd,
5627 UM_FILLSETUPLIST,
5628 MPVOID,
5629 MPVOID);
5630 PostMsg(hwnd,
5631 UM_FILLCMDLIST,
5632 MPVOID,
5633 MPVOID);
5634 PostMsg(hwnd,
5635 UM_FILLBUTTONLIST,
5636 MPVOID,
5637 MPVOID);
5638 break;
[2]5639
[133]5640 case IDM_MOREBUTTONS:
5641 WinSetWindowText(hwndName, NullStr);
5642 WinSetWindowText(hwndDate, NullStr);
5643 WinSetWindowText(hwndAttr, NullStr);
5644 SetMenuCheck(WinQueryWindowULong(hwnd, QWL_USER),
5645 SHORT1FROMMP(mp1),
5646 &fMoreButtons,
5647 TRUE,
5648 "MoreButtons");
5649 if (fMoreButtons)
5650 {
[2]5651
[133]5652 HWND hwndTemp;
[2]5653
[133]5654 hwndTemp = TopWindow(hwnd, (HWND) 0);
[2]5655
[133]5656 if (hwndTemp)
5657 {
5658 WinSetFocus(HWND_DESKTOP,
5659 hwnd);
5660 WinSetFocus(HWND_DESKTOP,
5661 hwndTemp);
[2]5662 }
[133]5663 }
5664 PostMsg(WinQueryWindow(hwnd, QW_PARENT),
5665 WM_UPDATEFRAME,
5666 MPFROMLONG(FCF_SIZEBORDER),
5667 MPVOID);
5668 break;
[2]5669
[133]5670 case IDM_FREETREE:
5671 if (fFreeTree)
5672 {
[2]5673
[133]5674 SWP swp, swpT;
[2]5675
[133]5676 WinQueryWindowPos(hwndTree, &swpT);
5677 WinQueryWindowPos(hwnd, &swp);
5678 WinSetWindowPos(hwndTree, HWND_TOP, 0, swp.cy - swpT.cy, 0, 0, SWP_MOVE);
5679 }
5680 SetMenuCheck(WinQueryWindowULong(hwnd, QWL_USER), SHORT1FROMMP(mp1),
5681 &fFreeTree, TRUE, "FreeTree");
5682 if (fAutoTile)
5683 TileChildren(hwnd, TRUE);
5684 break;
[2]5685
[133]5686 case IDM_AUTOTILE:
5687 SetMenuCheck(WinQueryWindowULong(hwnd, QWL_USER),
5688 SHORT1FROMMP(mp1),
5689 &fAutoTile,
5690 TRUE,
5691 "AutoTile");
5692 if (fAutoTile)
5693 TileChildren(hwnd, TRUE);
5694 break;
[2]5695
[133]5696 case IDM_TILEBACKWARDS:
5697 SetMenuCheck(WinQueryWindowULong(hwnd, QWL_USER),
5698 SHORT1FROMMP(mp1),
5699 &fTileBackwards,
5700 TRUE,
5701 "TileBackwards");
5702 if (fAutoTile)
5703 TileChildren(hwnd, TRUE);
5704 break;
[2]5705
[133]5706 case IDM_NEXTWINDOW:
5707 case IDM_PREVWINDOW:
5708 NextChild(hwnd,
5709 (SHORT1FROMMP(mp1) == IDM_PREVWINDOW));
5710 break;
[2]5711
[133]5712 case IDM_CASCADE:
5713 CascadeChildren(hwnd);
5714 break;
[2]5715
[133]5716 case IDM_TILE:
5717 TileChildren(hwnd, TRUE);
5718 break;
[2]5719
[133]5720 case IDM_RESTORE:
5721 MinResChildren(hwnd,
5722 SWP_RESTORE);
5723 break;
[2]5724
[133]5725 case IDM_MINIMIZE:
5726 MinResChildren(hwnd,
5727 SWP_MINIMIZE);
5728 break;
[2]5729
[133]5730 case IDM_ARRANGEICONS:
5731 ArrangeIcons(hwnd);
5732 break;
[2]5733
[133]5734 case IDM_INIVIEWER:
5735 StartIniEditor(hwnd, NULL, 4);
5736 break;
[2]5737
[133]5738 case IDM_EDITASSOC:
5739 EditAssociations(hwnd);
5740 break;
[2]5741
[133]5742 case IDM_EDITCOMMANDS:
5743 EditCommands(hwnd);
5744 PostMsg(hwnd,
5745 UM_FILLCMDLIST,
5746 MPVOID,
5747 MPVOID);
5748 break;
[2]5749
[133]5750 default:
5751 if (!SwitchCommand((HWND) WinQueryWindowULong(hwnd, QWL_USER),
5752 SHORT1FROMMP(mp1)))
5753 {
5754 if (SHORT1FROMMP(mp1) >= IDM_COMMANDSTART &&
5755 SHORT1FROMMP(mp1) < IDM_QUICKTOOLSTART)
5756 {
[2]5757
[133]5758 INT x;
5759 HWND hwndCnr;
[2]5760
[133]5761 if (!cmdloaded)
5762 load_commands();
5763 hwndCnr = TopWindow(hwnd, (HWND) 0);
5764 hwndCnr = (HWND) WinSendMsg(WinWindowFromID(hwndCnr, FID_CLIENT),
5765 UM_CONTAINERHWND,
5766 MPVOID,
5767 MPVOID);
5768 if (!hwndCnr)
5769 {
5770 DosBeep(50, 100);
5771 break;
5772 }
5773 x = SHORT1FROMMP(mp1) - IDM_COMMANDSTART;
5774 if (x >= 0)
5775 {
5776 x++;
5777 RunCommand(hwndCnr, x);
5778 if (fUnHilite)
5779 {
[2]5780
[133]5781 PCNRITEM pci;
5782 DIRCNRDATA *dcd = NULL;
[2]5783
[133]5784 if (WinQueryWindowUShort(hwndCnr, QWS_ID) != TREE_CNR)
5785 dcd = INSTDATA(hwndCnr);
5786 pci = (PCNRITEM) WinSendMsg(hwndCnr,
5787 CM_QUERYRECORDEMPHASIS,
5788 MPFROMLONG(CMA_FIRST),
5789 MPFROMSHORT(CRA_CURSORED));
5790 if (pci && (INT) pci != -1 &&
5791 (pci -> rc.flRecordAttr & CRA_SELECTED))
5792 UnHilite(hwnd,
5793 TRUE,
5794 ((dcd) ? &dcd -> lastselection : NULL));
5795 }
5796 }
5797 }
5798 else if (SHORT1FROMMP(mp1) >= IDM_QUICKTOOLSTART &&
5799 SHORT1FROMMP(mp1) < IDM_QUICKTOOLSTART + 50)
5800 {
5801 if (!qtloaded)
5802 load_quicktools();
5803 if (quicktool[SHORT1FROMMP(mp1) - IDM_QUICKTOOLSTART])
5804 {
5805 if (fToolsChanged)
5806 save_tools(NULL);
5807 if (!load_tools(quicktool[SHORT1FROMMP(mp1) - IDM_QUICKTOOLSTART]))
5808 load_tools(NULL);
5809 else
5810 {
5811 strcpy(lasttoolbox,
5812 quicktool[SHORT1FROMMP(mp1) - IDM_QUICKTOOLSTART]);
5813 PrfWriteProfileString(fmprof,
5814 FM3Str,
5815 "LastToolBox",
5816 lasttoolbox);
5817 }
5818 BuildTools(hwndToolback,
5819 TRUE);
5820 }
5821 }
5822 else
5823 {
[2]5824
[133]5825 HWND hwndActive;
[2]5826
[133]5827 hwndActive = TopWindow(hwnd,
5828 (HWND) 0);
5829 if (hwndActive)
5830 PostMsg(WinWindowFromID(hwndActive, FID_CLIENT),
5831 WM_COMMAND,
5832 mp1,
5833 mp2);
[2]5834 }
[133]5835 }
5836 break;
[2]5837 }
5838 return 0;
5839}
5840
[178]5841static MRESULT EXPENTRY MainWMOnce(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[133]5842{
5843 switch (msg)
5844 {
5845 case WM_CREATE:
5846 {
5847 TID tid;
[2]5848
[133]5849 WinQueryWindowProcess(hwnd,
5850 &mypid,
5851 &tid);
5852 }
5853 hwndMain = hwnd;
5854 WinSetWindowUShort(hwnd, QWL_USER + 8, 0);
5855 WinSetWindowUShort(hwnd, QWL_USER + 10, 0);
5856 WinSetWindowUShort(hwnd, QWL_USER + 12, 0);
5857 WinSetWindowUShort(hwnd, QWL_USER + 16, 0);
5858 if (_beginthread(MakeMainObjWin,
5859 NULL,
5860 245760,
5861 MPVOID) == -1)
5862 {
5863 PostMsg(hwnd,
5864 WM_CLOSE,
5865 MPVOID,
5866 MPVOID);
5867 return 0;
5868 }
5869 else
5870 DosSleep(64);
5871 {
5872 SWP swp;
5873 PFNWP oldproc;
5874
5875 /*
5876 * create frame children (not client children, frame children)
5877 */
5878 DosSleep(1L);
5879 WinQueryWindowPos(WinQueryWindow(hwnd, QW_PARENT), &swp);
5880 oldproc = WinSubclassWindow(WinQueryWindow(hwnd, QW_PARENT),
5881 (PFNWP) MainFrameWndProc);
5882 if (oldproc)
5883 WinSetWindowPtr(WinQueryWindow(hwnd, QW_PARENT),
[186]5884 QWL_USER,
[133]5885 (PVOID) oldproc);
5886 CommonCreateMainChildren(hwnd, &swp);
5887
5888 if (WinCreateWindow(WinQueryWindow(hwnd, QW_PARENT),
5889 WC_BUTTON,
5890 "I",
5891 WS_VISIBLE | BS_PUSHBUTTON | BS_NOPOINTERFOCUS,
5892 ((swp.cx -
5893 WinQuerySysValue(HWND_DESKTOP,
5894 SV_CXMINMAXBUTTON)) -
5895 WinQuerySysValue(HWND_DESKTOP,
5896 SV_CXMINMAXBUTTON) / 2) -
5897 WinQuerySysValue(HWND_DESKTOP,
5898 SV_CXSIZEBORDER),
5899 (swp.cy - WinQuerySysValue(HWND_DESKTOP,
5900 SV_CYMINMAXBUTTON)) -
5901 WinQuerySysValue(HWND_DESKTOP,
5902 SV_CYSIZEBORDER),
5903 WinQuerySysValue(HWND_DESKTOP,
5904 SV_CXMINMAXBUTTON) / 2,
5905 WinQuerySysValue(HWND_DESKTOP,
5906 SV_CYMINMAXBUTTON),
5907 hwnd,
5908 HWND_TOP,
5909 IDM_IDEALSIZE,
5910 NULL,
5911 NULL))
[2]5912 {
[133]5913 WinSubclassWindow(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
5914 IDM_IDEALSIZE),
5915 (PFNWP) IdealButtonProc);
5916 SetPresParams(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
5917 IDM_IDEALSIZE),
5918 NULL,
5919 NULL,
5920 NULL,
5921 GetPString(IDS_10SYSTEMVIOTEXT));
[2]5922 }
5923
[133]5924 WinCreateWindow(WinQueryWindow(hwnd, QW_PARENT),
5925 WC_BUTTON,
5926 "#1019",
5927 WS_VISIBLE | BS_PUSHBUTTON | BS_NOPOINTERFOCUS |
5928 BS_BITMAP,
5929 swp.cx - 46,
5930 swp.y + 2,
5931 24,
5932 22,
5933 hwnd,
5934 HWND_TOP,
5935 IDM_OPENWALK,
5936 NULL,
5937 NULL);
5938 WinCreateWindow(WinQueryWindow(hwnd, QW_PARENT),
5939 WC_BUTTON,
5940 "#3062",
5941 WS_VISIBLE | BS_PUSHBUTTON | BS_NOPOINTERFOCUS |
5942 BS_BITMAP,
5943 swp.cx - 22,
5944 swp.y + 2,
5945 24,
5946 22,
5947 hwnd,
5948 HWND_TOP,
5949 IDM_USERLIST,
5950 NULL,
5951 NULL);
[2]5952
[133]5953 hwndUserlist = WinCreateWindow(WinQueryWindow(hwnd, QW_PARENT),
5954 WC_COMBOBOX,
5955 (PSZ) NULL,
5956 WS_VISIBLE | CBS_DROPDOWN |
5957 LS_HORZSCROLL,
5958 (swp.x +
5959 WinQuerySysValue(HWND_DESKTOP,
5960 SV_CXSIZEBORDER) + 48L),
5961 (swp.cy -
5962 WinQuerySysValue(HWND_DESKTOP,
5963 SV_CYSIZEBORDER)) - 60,
5964 ((swp.cx -
5965 (WinQuerySysValue(HWND_DESKTOP,
5966 SV_CXSIZEBORDER) * 2)) - 64L),
5967 60L,
5968 WinQueryWindow(hwnd, QW_PARENT),
5969 HWND_TOP,
5970 MAIN_USERLIST,
5971 NULL,
5972 NULL);
5973 hwndCmdlist = WinCreateWindow(WinQueryWindow(hwnd, QW_PARENT),
5974 WC_COMBOBOX,
5975 (PSZ) NULL,
5976 WS_VISIBLE | CBS_DROPDOWN |
5977 LS_HORZSCROLL,
5978 (swp.x +
5979 WinQuerySysValue(HWND_DESKTOP,
5980 SV_CXSIZEBORDER) + 48L),
5981 (swp.cy -
5982 WinQuerySysValue(HWND_DESKTOP,
5983 SV_CYSIZEBORDER)) - 60,
5984 ((swp.cx -
5985 (WinQuerySysValue(HWND_DESKTOP,
5986 SV_CXSIZEBORDER) * 2)) - 64L),
5987 60L,
5988 WinQueryWindow(hwnd, QW_PARENT),
5989 HWND_TOP,
5990 MAIN_CMDLIST,
5991 NULL,
5992 NULL);
5993 WinSetWindowText(hwndCmdlist,
5994 GetPString(IDS_COMMANDSTEXT));
5995 hwndStatelist = WinCreateWindow(WinQueryWindow(hwnd, QW_PARENT),
5996 WC_COMBOBOX,
5997 (PSZ) NULL,
5998 WS_VISIBLE | CBS_DROPDOWN |
5999 LS_HORZSCROLL,
6000 (swp.x +
6001 WinQuerySysValue(HWND_DESKTOP,
6002 SV_CXSIZEBORDER) + 48L),
6003 (swp.cy -
6004 WinQuerySysValue(HWND_DESKTOP,
6005 SV_CYSIZEBORDER)) - 60,
6006 ((swp.cx -
6007 (WinQuerySysValue(HWND_DESKTOP,
6008 SV_CXSIZEBORDER) * 2)) - 64L),
6009 60L,
6010 WinQueryWindow(hwnd, QW_PARENT),
6011 HWND_TOP,
6012 MAIN_SETUPLIST,
6013 NULL,
6014 NULL);
6015 hwndDrivelist = WinCreateWindow(WinQueryWindow(hwnd, QW_PARENT),
6016 WC_COMBOBOX,
6017 (PSZ) NULL,
6018 WS_VISIBLE | CBS_DROPDOWN,
6019 (swp.x +
6020 WinQuerySysValue(HWND_DESKTOP,
6021 SV_CXSIZEBORDER)),
6022 (swp.cy -
6023 WinQuerySysValue(HWND_DESKTOP,
6024 SV_CYSIZEBORDER)) - 60,
6025 48L,
6026 60L,
6027 WinQueryWindow(hwnd, QW_PARENT),
6028 HWND_TOP,
6029 MAIN_DRIVELIST,
6030 NULL,
6031 NULL);
6032 SetPresParams(hwndDrivelist,
6033 NULL,
6034 NULL,
6035 NULL,
6036 GetPString(IDS_10SYSTEMMONOTEXT));
6037 hwndButtonlist = WinCreateWindow(WinQueryWindow(hwnd, QW_PARENT),
6038 WC_COMBOBOX,
6039 (PSZ) NULL,
6040 WS_VISIBLE | CBS_DROPDOWN |
6041 LS_HORZSCROLL,
6042 (swp.cx -
6043 WinQuerySysValue(HWND_DESKTOP,
6044 SV_CXSIZEBORDER)) - 164L,
6045 (swp.cy -
6046 WinQuerySysValue(HWND_DESKTOP,
6047 SV_CYSIZEBORDER)) - 60,
6048 164L,
6049 60L,
6050 WinQueryWindow(hwnd, QW_PARENT),
6051 HWND_TOP,
6052 MAIN_BUTTONLIST,
6053 NULL,
6054 NULL);
6055 WinSendMsg(WinWindowFromID(hwndUserlist, CBID_EDIT),
6056 EM_SETTEXTLIMIT,
6057 MPFROM2SHORT(CCHMAXPATH, 0),
6058 MPVOID);
6059 WinSendMsg(WinWindowFromID(hwndStatelist, CBID_EDIT),
6060 EM_SETTEXTLIMIT,
6061 MPFROM2SHORT(13, 0),
6062 MPVOID);
6063 WinSendMsg(WinWindowFromID(hwndDrivelist, CBID_EDIT),
6064 EM_SETREADONLY,
6065 MPFROM2SHORT(TRUE, 0),
6066 MPVOID);
6067 WinSendMsg(WinWindowFromID(hwndButtonlist, CBID_EDIT),
6068 EM_SETREADONLY,
6069 MPFROM2SHORT(TRUE, 0),
6070 MPVOID);
6071 WinSendMsg(WinWindowFromID(hwndCmdlist, CBID_EDIT),
6072 EM_SETREADONLY,
6073 MPFROM2SHORT(TRUE, 0),
6074 MPVOID);
6075 oldproc = WinSubclassWindow(WinWindowFromID(hwndUserlist, CBID_EDIT),
6076 (PFNWP) DropDownListProc);
6077 if (oldproc)
6078 WinSetWindowPtr(WinWindowFromID(hwndUserlist, CBID_EDIT),
[186]6079 QWL_USER,
[133]6080 (PVOID) oldproc);
6081 oldproc = WinSubclassWindow(WinWindowFromID(hwndCmdlist, CBID_EDIT),
6082 (PFNWP) DropDownListProc);
6083 if (oldproc)
6084 WinSetWindowPtr(WinWindowFromID(hwndCmdlist, CBID_EDIT),
[186]6085 QWL_USER,
[133]6086 (PVOID) oldproc);
6087 oldproc = WinSubclassWindow(WinWindowFromID(hwndButtonlist, CBID_EDIT),
6088 (PFNWP) DropDownListProc);
6089 if (oldproc)
6090 WinSetWindowPtr(WinWindowFromID(hwndButtonlist, CBID_EDIT),
[186]6091 QWL_USER,
[133]6092 (PVOID) oldproc);
6093 oldproc = WinSubclassWindow(WinWindowFromID(hwndStatelist, CBID_EDIT),
6094 (PFNWP) DropDownListProc);
6095 if (oldproc)
6096 WinSetWindowPtr(WinWindowFromID(hwndStatelist, CBID_EDIT),
[186]6097 QWL_USER,
[133]6098 (PVOID) oldproc);
6099 oldproc = WinSubclassWindow(WinWindowFromID(hwndDrivelist, CBID_EDIT),
6100 (PFNWP) DropDownListProc);
6101 if (oldproc)
6102 WinSetWindowPtr(WinWindowFromID(hwndDrivelist, CBID_EDIT),
[186]6103 QWL_USER,
[133]6104 (PVOID) oldproc);
6105 oldproc = WinSubclassWindow(hwndUserlist,
6106 (PFNWP) DropDownListProc);
6107 if (oldproc)
6108 WinSetWindowPtr(hwndUserlist,
[186]6109 QWL_USER,
[133]6110 (PVOID) oldproc);
6111 oldproc = WinSubclassWindow(hwndCmdlist,
6112 (PFNWP) DropDownListProc);
6113 if (oldproc)
6114 WinSetWindowPtr(hwndCmdlist,
[186]6115 QWL_USER,
[133]6116 (PVOID) oldproc);
6117 oldproc = WinSubclassWindow(hwndStatelist,
6118 (PFNWP) DropDownListProc);
6119 if (oldproc)
6120 WinSetWindowPtr(hwndStatelist,
[186]6121 QWL_USER,
[133]6122 (PVOID) oldproc);
6123 oldproc = WinSubclassWindow(hwndDrivelist,
6124 (PFNWP) DropDownListProc);
6125 if (oldproc)
6126 WinSetWindowPtr(hwndDrivelist, QWL_USER, (PVOID) oldproc);
6127 oldproc = WinSubclassWindow(hwndButtonlist,
6128 (PFNWP) DropDownListProc);
6129 if (oldproc)
6130 WinSetWindowPtr(hwndButtonlist,
[186]6131 QWL_USER,
[133]6132 (PVOID) oldproc);
6133 oldproc = WinSubclassWindow(WinWindowFromID(WinQueryWindow(hwnd,
6134 QW_PARENT),
6135 IDM_USERLIST),
6136 (PFNWP) ChildFrameButtonProc);
6137 if (oldproc)
6138 WinSetWindowPtr(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
6139 IDM_USERLIST),
[186]6140 QWL_USER,
[133]6141 (PVOID) oldproc);
6142 oldproc = WinSubclassWindow(WinWindowFromID(WinQueryWindow(hwnd,
6143 QW_PARENT),
6144 IDM_OPENWALK),
6145 (PFNWP) ChildFrameButtonProc);
6146 if (oldproc)
6147 WinSetWindowPtr(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
6148 IDM_OPENWALK),
[186]6149 QWL_USER,
[133]6150 (PVOID) oldproc);
6151 {
6152 HWND hwndSysMenu, hwndSysSubMenu, hwndMenu;
6153 USHORT idSysMenu;
6154 MENUITEM mi, mit;
[2]6155
[133]6156 hwndMenu = WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
6157 FID_MENU);
6158 WinSendMsg(hwnd,
6159 UM_ADDTOMENU,
6160 MPVOID,
6161 MPVOID);
6162 SetToggleChecks(hwndMenu);
6163 SetConditionalCascade(hwndMenu,
6164 IDM_TOOLSUBMENU,
6165 IDM_TOOLBAR);
6166 SetConditionalCascade(hwndMenu,
6167 IDM_AUTOVIEWSUBMENU,
6168 IDM_AUTOVIEW);
6169 SetConditionalCascade(hwndMenu,
6170 IDM_TILEMENU,
6171 IDM_TILE);
6172 WinSetWindowULong(hwnd,
[186]6173 QWL_USER,
[133]6174 (ULONG) hwndMenu);
6175 memset(&mi, 0, sizeof(mi));
6176 memset(&mit, 0, sizeof(mit));
6177 hwndSysMenu = WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
6178 FID_SYSMENU);
6179 idSysMenu = SHORT1FROMMR(WinSendMsg(hwndSysMenu,
6180 MM_ITEMIDFROMPOSITION,
6181 MPVOID,
6182 MPVOID));
6183 WinSendMsg(hwndSysMenu,
6184 MM_QUERYITEM,
6185 MPFROM2SHORT(idSysMenu, 0),
6186 MPFROMP(&mit));
6187 hwndSysSubMenu = mit.hwndSubMenu;
6188 mi.iPosition = MIT_END;
6189 mi.afStyle = MIS_SEPARATOR;
[200]6190 mi.id = (USHORT) -1;
[133]6191 WinSendMsg(hwndSysSubMenu,
6192 MM_INSERTITEM,
6193 MPFROMP(&mi),
6194 MPFROMP(NULL));
6195 mi.afStyle = MIS_TEXT;
6196 mi.id = IDM_IDEALSIZE;
6197 WinSendMsg(hwndSysSubMenu,
6198 MM_INSERTITEM,
6199 MPFROMP(&mi),
6200 MPFROMP(GetPString(IDS_IDEALMENUTEXT)));
6201 mi.afStyle = MIS_TEXT;
6202 mi.id = IDM_HIDEMENU;
6203 WinSendMsg(hwndSysSubMenu,
6204 MM_INSERTITEM,
6205 MPFROMP(&mi),
6206 MPFROMP(GetPString(IDS_HIDEMENUTEXT)));
6207 SetSysMenu(hwndSysMenu);
6208 }
6209 }
6210 {
6211 ULONG size;
6212 BOOL temp = FALSE;
[2]6213
[133]6214 size = sizeof(BOOL);
6215 if (PrfQueryProfileData(fmprof,
6216 FM3Str,
6217 "MenuInvisible",
6218 (PVOID) & temp,
6219 &size) &&
6220 size &&
6221 temp)
6222 WinSendMsg(hwnd,
6223 WM_COMMAND,
6224 MPFROM2SHORT(IDM_HIDEMENU, 0),
6225 MPVOID);
6226 size = sizeof(BOOL);
6227 if (PrfQueryProfileData(fmprof,
6228 FM3Str,
6229 "FreeTree",
6230 (PVOID) & temp,
6231 &size) &&
6232 size &&
6233 temp)
6234 WinSendMsg(hwnd,
6235 WM_COMMAND,
6236 MPFROM2SHORT(IDM_FREETREE, 0),
6237 MPVOID);
6238 size = sizeof(BOOL);
6239 if (PrfQueryProfileData(fmprof,
6240 FM3Str,
6241 "AutoTile",
6242 (PVOID) & temp,
6243 &size) &&
6244 size &&
6245 !temp)
6246 WinSendMsg(hwnd,
6247 WM_COMMAND,
6248 MPFROM2SHORT(IDM_AUTOTILE, 0),
6249 MPVOID);
6250 size = sizeof(BOOL);
6251 if (PrfQueryProfileData(fmprof,
6252 FM3Str,
6253 "Toolbar",
6254 &temp,
6255 &size) &&
6256 size &&
6257 !temp)
6258 WinSendMsg(hwnd,
6259 WM_COMMAND,
6260 MPFROM2SHORT(IDM_TOOLBAR, 0),
6261 MPVOID);
6262 }
6263 WinSetWindowText(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
6264 FID_TITLEBAR),
6265 "FM/2");
6266 FixSwitchList(WinQueryWindow(hwnd, QW_PARENT),
6267 NULL);
6268 break;
[2]6269
[133]6270 case UM_SETUP:
6271 /*
6272 * start up some initial children
6273 */
6274 load_tools(NULL);
6275 BuildTools(hwndToolback,
6276 TRUE);
6277 WinShowWindow(WinQueryWindow(hwnd, QW_PARENT),
6278 TRUE);
6279 PostMsg(MainObjectHwnd,
6280 UM_SETUP2,
6281 mp1,
6282 mp2);
6283 return 0;
[2]6284
[133]6285 case UM_SETUP2:
6286 {
6287 SWP swp;
6288 ULONG size = sizeof(SWP);
[2]6289
[133]6290 WinQueryWindowPos(hwnd, &swp);
6291 hwndTree = StartTreeCnr(hwnd, 0);
6292 if (!hwndTree)
6293 WinDestroyWindow(WinQueryWindow(hwnd, QW_PARENT));
6294 else
[2]6295 {
[133]6296 if (!fSaveState ||
6297 !PrfQueryProfileData(fmprof,
6298 FM3Str,
6299 "LastTreePos",
6300 &swp,
6301 &size) ||
6302 size != sizeof(SWP))
6303 {
[2]6304
[133]6305 INT ratio, height = 0;
[2]6306
[133]6307 if (!fNoTreeGap)
6308 height = WinQuerySysValue(HWND_DESKTOP, SV_CYICON) * 2;
6309 size = sizeof(ratio);
6310 if (!PrfQueryProfileData(fmprof,
6311 FM3Str,
6312 "TreeWindowRatio",
6313 (PVOID) & ratio,
6314 &size) ||
6315 size < sizeof(ratio))
6316 ratio = 400;
6317 WinSetWindowPos(hwndTree,
6318 HWND_TOP,
6319 0,
6320 height,
6321 (swp.cx * 100) / ratio,
6322 swp.cy - height,
6323 SWP_SHOW | SWP_SIZE | SWP_MOVE |
6324 SWP_ACTIVATE | SWP_ZORDER);
6325 }
6326 else
6327 WinSetWindowPos(hwndTree,
6328 HWND_TOP,
6329 swp.x,
6330 swp.y,
6331 swp.cx,
6332 swp.cy,
6333 swp.fl | SWP_MOVE | SWP_SIZE | SWP_SHOW |
6334 SWP_ZORDER | SWP_ACTIVATE);
6335 }
6336 ResizeTools(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
6337 MAIN_TOOLS));
6338 }
6339 PostMsg(MainObjectHwnd,
6340 UM_SETUP3,
6341 mp1,
6342 mp2);
6343 return 0;
[2]6344
[133]6345 case UM_SETUP3:
6346 /* start remaining child windows */
6347 {
6348 if (!fNoSaveState &&
6349 fSaveState)
6350 PostMsg(MainObjectHwnd,
6351 UM_RESTORE,
6352 MPVOID,
6353 MPVOID);
[2]6354 PostMsg(MainObjectHwnd,
[133]6355 UM_SETUP4,
6356 mp1,
6357 mp2);
6358 }
6359 return 0;
[2]6360
[133]6361 case UM_SETUP4:
6362 {
6363 INT argc = (INT) mp1, x;
6364 CHAR **argv = (CHAR **) mp2;
[2]6365
[133]6366 for (x = 1; x < argc; x++)
[2]6367 {
[133]6368 if (*argv[x] == '/' || *argv[x] == ';')
6369 continue;
6370 if (!IsFile(argv[x]) &&
6371 !FindDirCnrByName(argv[x], FALSE))
6372 OpenDirCnr((HWND) 0,
6373 hwndMain,
6374 hwndTree,
6375 TRUE,
6376 argv[x]);
[2]6377 }
[133]6378 }
6379 PostMsg(MainObjectHwnd,
6380 UM_SETUP5,
6381 MPVOID,
6382 MPVOID);
6383 return 0;
[2]6384
[133]6385 case UM_SETUP5:
6386 if (fAutoTile)
6387 TileChildren(hwnd, TRUE);
6388 PostMsg(hwnd,
6389 UM_FILLUSERLIST,
6390 MPVOID,
6391 MPVOID);
6392 PostMsg(hwnd,
6393 UM_FILLSETUPLIST,
6394 MPVOID,
6395 MPVOID);
6396 PostMsg(hwnd,
6397 UM_FILLCMDLIST,
6398 MPVOID,
6399 MPVOID);
6400 PostMsg(hwnd,
6401 UM_FILLBUTTONLIST,
6402 MPVOID,
6403 MPVOID);
6404 {
6405 HWND hwndActive;
[2]6406
[133]6407 hwndActive = TopWindow(hwnd, hwndTree);
6408 if (hwndActive)
6409 WinSetWindowPos(hwndActive,
6410 HWND_TOP,
6411 0,
6412 0,
6413 0,
6414 0,
6415 SWP_ACTIVATE);
6416 }
6417 if (fStartMinimized ||
6418 fReminimize)
6419 PostMsg(hwndTree,
6420 UM_MINIMIZE,
6421 MPVOID,
6422 MPVOID);
6423 else if (fStartMaximized)
6424 PostMsg(hwndTree,
6425 UM_MAXIMIZE,
6426 MPVOID,
6427 MPVOID);
6428 fRunning = TRUE;
6429 return 0;
[2]6430 }
6431
[133]6432 return WinDefWindowProc(hwnd, msg, mp1, mp2);
[2]6433}
6434
[133]6435MRESULT EXPENTRY MainWndProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
6436{
6437 switch (msg)
6438 {
6439 case WM_CREATE:
6440 case UM_SETUP:
6441 case UM_SETUP2:
6442 case UM_SETUP3:
6443 case UM_SETUP4:
6444 case UM_SETUP5:
6445 return MainWMOnce(hwnd, msg, mp1, mp2);
[2]6446
[133]6447 case WM_CONTROLPOINTER:
6448 if (!fNoFinger &&
6449 (SHORT1FROMMP(mp1) == IDM_OPENWALK ||
6450 SHORT1FROMMP(mp1) == IDM_USERLIST))
6451 return MRFROMLONG(hptrFinger);
6452 break;
[2]6453
[133]6454 case UM_LOADFILE:
6455 case UM_THREADUSE:
[260]6456 case UM_BUILDDRIVEBAR:
[133]6457 return CommonMainWndProc(hwnd, msg, mp1, mp2);
[2]6458
[133]6459 case WM_BUTTON1UP:
6460 case WM_BUTTON2UP:
6461 case WM_BUTTON3UP:
6462 case WM_MOUSEMOVE:
6463 shiftstate = (SHORT2FROMMP(mp2) & (KC_ALT | KC_SHIFT | KC_CTRL));
6464 break;
[2]6465
[133]6466 case WM_CHAR:
6467 shiftstate = (SHORT1FROMMP(mp1) & (KC_SHIFT | KC_ALT | KC_CTRL));
6468 break;
[2]6469
[133]6470 case WM_MENUEND:
6471 if ((HWND) mp2 == MainPopupMenu)
6472 {
6473 WinDestroyWindow(MainPopupMenu);
6474 MainPopupMenu = (HWND) 0;
6475 }
6476 break;
[2]6477
[133]6478 case UM_CONTEXTMENU:
6479 case WM_CONTEXTMENU:
6480 if (CheckMenu(&MainPopupMenu, MAIN_POPUP))
6481 {
6482 SetToggleChecks(MainPopupMenu);
6483 PopupMenu(hwnd, hwnd, MainPopupMenu);
6484 }
6485 if (msg == UM_CONTEXTMENU)
6486 return 0;
6487 return MRFROMSHORT(TRUE);
[2]6488
[133]6489 case UM_SETUSERLISTNAME:
6490 if (mp1)
6491 {
6492 if (fUserComboBox)
6493 WinSetWindowText(WinWindowFromID(hwndUserlist, CBID_EDIT),
6494 (CHAR *) mp1);
6495 if (add_udir(FALSE, (CHAR *) mp1))
6496 {
6497 if (fUserComboBox)
6498 {
6499 if (fAutoAddDirs)
6500 WinSendMsg(hwndUserlist, LM_INSERTITEM,
6501 MPFROM2SHORT(LIT_SORTASCENDING, 0),
6502 MPFROMP((CHAR *) mp1));
6503 }
6504 }
6505 }
6506 return 0;
[2]6507
[133]6508 case UM_ARRANGEICONS:
6509 ArrangeIcons(hwnd);
6510 return 0;
[2]6511
[133]6512 case WM_CHORD:
6513 PostMsg(hwnd,
6514 WM_COMMAND,
6515 MPFROM2SHORT(IDM_WINDOWDLG, 0),
6516 MPVOID);
6517 break;
[2]6518
[133]6519 case WM_SETFOCUS:
6520 if (mp2)
[2]6521 PostMsg(hwnd,
[133]6522 UM_FOCUSME,
6523 MPVOID,
6524 MPVOID);
6525 break;
[2]6526
[133]6527 case UM_FOCUSME:
6528 WinSetFocus(hwndTree,
6529 TRUE);
6530 return 0;
[2]6531
[133]6532 case UM_RESCAN:
6533 TileChildren(hwnd, TRUE);
6534 return 0;
[2]6535
[133]6536 case WM_SAVEAPPLICATION:
6537 {
6538 SWP swp;
[2]6539
[133]6540 WinQueryWindowPos(WinQueryWindow(hwnd, QW_PARENT), &swp);
6541 if (!(swp.fl & (SWP_HIDE | SWP_MINIMIZE)))
6542 {
6543 WinStoreWindowPos(FM2Str,
6544 "MainWindowPos",
6545 WinQueryWindow(hwnd, QW_PARENT));
6546 if (!fNoSaveState && fSaveState)
6547 SaveDirCnrState(hwnd, NULL);
6548 }
6549 }
6550 break;
[2]6551
[133]6552 case MM_PORTHOLEINIT:
6553 switch (SHORT1FROMMP(mp1))
6554 {
6555 case 0:
6556 case 1:
6557 {
6558 HWND hwndCurrent;
6559 ULONG wmsg;
[2]6560
[133]6561 wmsg = (SHORT1FROMMP(mp1) == 0) ? UM_FILESMENU : UM_VIEWSMENU;
6562 hwndCurrent = TopWindow(hwnd, (HWND) 0);
6563 PortholeInit((HWND) WinSendMsg(WinWindowFromID(hwndCurrent,
6564 FID_CLIENT), wmsg, MPVOID,
6565 MPVOID), mp1, mp2);
6566 }
6567 break;
6568 }
6569 break;
[2]6570
[133]6571 case WM_INITMENU:
6572 switch (SHORT1FROMMP(mp1))
6573 {
6574 case IDM_CONFIGMENU:
6575 SetToggleChecks((HWND) WinQueryWindowULong(hwnd, QWL_USER));
6576 break;
[2]6577
[133]6578 case IDM_WINDOWSMENU:
6579 /*
6580 * add child windows of client
6581 * and switchlist entries to end of pulldown menu
6582 */
6583 {
6584 HWND hwndMenu, hwndSubMenu;
6585 MENUITEM mi;
[2]6586
[133]6587 hwndMenu = WinQueryWindowULong(hwnd, QWL_USER);
6588 memset(&mi, 0, sizeof(mi));
6589 mi.iPosition = MIT_END;
6590 mi.afStyle = MIS_TEXT;
6591 if (!WinSendMsg(hwndMenu, MM_QUERYITEM,
6592 MPFROM2SHORT(IDM_WINDOWSMENU, TRUE),
6593 MPFROMP(&mi)))
6594 break;
6595 hwndSubMenu = mi.hwndSubMenu;
6596 SetupWinList(hwndSubMenu,
6597 hwnd,
6598 WinQueryWindow(hwnd, QW_PARENT));
6599 }
6600 break;
[2]6601
[133]6602 default:
6603 {
6604 HWND hwndCurrent;
[2]6605
[133]6606 hwndCurrent = TopWindow(hwnd, (HWND) 0);
6607 if (hwndCurrent)
6608 WinSendMsg(hwndCurrent, UM_INITMENU, mp1, mp2);
6609 }
6610 break;
6611 }
6612 break;
[2]6613
[133]6614 case UM_ADDTOMENU:
6615 AddToMenu((CHAR *) mp1, WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
6616 FID_MENU));
6617 return 0;
[2]6618
[133]6619 case UM_FILLCMDLIST:
6620 WinSendMsg(hwndCmdlist, LM_DELETEALL, MPVOID, MPVOID);
6621 if (!cmdloaded)
6622 load_commands();
6623 if (cmdhead)
6624 {
[2]6625
[133]6626 LINKCMDS *info;
[2]6627
[133]6628 info = cmdhead;
6629 while (info)
6630 {
6631 WinSendMsg(hwndCmdlist, LM_INSERTITEM,
6632 MPFROM2SHORT(LIT_END, 0),
6633 MPFROMP(info -> title));
6634 info = info -> next;
6635 }
6636 }
6637 return 0;
[2]6638
[133]6639 case UM_FILLSETUPLIST:
6640 WinSendMsg(hwndStatelist, LM_DELETEALL, MPVOID, MPVOID);
6641 if (fUserComboBox)
6642 {
[2]6643
[133]6644 INT x;
[2]6645
[133]6646 if (!loadedsetups)
6647 load_setups();
6648 for (x = 0; x < MAXNUMSETUPS; x++)
6649 {
6650 if (*lastsetups[x])
6651 WinSendMsg(hwndStatelist, LM_INSERTITEM,
6652 MPFROM2SHORT(LIT_SORTASCENDING, 0),
6653 MPFROMP(lastsetups[x]));
6654 }
6655 WinSetWindowText(hwndStatelist, GetPString(IDS_STATETEXT));
6656 }
6657 return 0;
[2]6658
[133]6659 case UM_FILLBUTTONLIST:
6660 WinSendMsg(hwndButtonlist, LM_DELETEALL, MPVOID, MPVOID);
6661 if (fUserComboBox)
6662 {
[2]6663
[133]6664 BOOL foundit = FALSE, thisone;
6665 ULONG ulSearchCount;
6666 SHORT sSelect;
6667 FILEFINDBUF3 findbuf;
6668 HDIR hDir;
6669 CHAR *p;
[2]6670
[133]6671 DosError(FERR_DISABLEHARDERR);
6672 hDir = HDIR_CREATE;
6673 ulSearchCount = 1L;
6674 if (!DosFindFirst("*.TLS", &hDir, FILE_READONLY | FILE_ARCHIVED,
6675 &findbuf, sizeof(FILEFINDBUF3),
6676 &ulSearchCount, FIL_STANDARD))
6677 {
6678 do
6679 {
6680 priority_bumped();
6681 if (!foundit)
6682 {
6683 thisone = FALSE;
6684 p = strrchr(lasttoolbox, '\\');
6685 if (!p)
6686 p = lasttoolbox;
6687 else
6688 p++;
6689 if (!stricmp(findbuf.achName, p))
6690 thisone = TRUE;
6691 }
6692 p = strrchr(findbuf.achName, '.');
6693 if (p)
6694 *p = 0;
6695 sSelect = (SHORT) WinSendMsg(hwndButtonlist, LM_INSERTITEM,
6696 MPFROM2SHORT(LIT_SORTASCENDING, 0),
6697 MPFROMP(findbuf.achName));
6698 if (!foundit && thisone && sSelect >= 0)
6699 {
6700 WinSendMsg(hwndButtonlist, LM_SELECTITEM, MPFROM2SHORT(sSelect, 0),
6701 MPFROMLONG(TRUE));
6702 foundit = TRUE;
6703 }
6704 }
6705 while (!DosFindNext(hDir, &findbuf, sizeof(FILEFINDBUF3),
6706 &ulSearchCount));
6707 DosFindClose(hDir);
6708 priority_bumped();
6709 }
6710 WinSetWindowText(hwndButtonlist, GetPString(IDS_TOOLBOXTEXT));
6711 }
6712 return 0;
[2]6713
[133]6714 case UM_FILLUSERLIST:
6715 WinSendMsg(hwndUserlist, LM_DELETEALL, MPVOID, MPVOID);
6716 if (fUserComboBox)
6717 {
[260]6718 ULONG ulDriveNum;
6719 ULONG ulDriveMap;
[133]6720 ULONG ulSearchCount;
6721 FILEFINDBUF3 findbuf;
6722 HDIR hDir;
6723 APIRET rc;
[260]6724 LINKDIRS *info;
6725 LINKDIRS *temp;
[2]6726
[133]6727 if (!loadedudirs)
6728 load_udirs();
6729 DosError(FERR_DISABLEHARDERR);
6730 DosQCurDisk(&ulDriveNum, &ulDriveMap);
6731 info = udirhead;
6732 while (info)
6733 {
6734 if (IsFullName(info -> path) &&
6735 !(driveflags[toupper(*info -> path) - 'A'] &
6736 (DRIVE_IGNORE | DRIVE_INVALID)))
6737 {
6738 DosError(FERR_DISABLEHARDERR);
6739 hDir = HDIR_CREATE;
6740 ulSearchCount = 1L;
6741 if (!IsRoot(info -> path))
6742 rc = DosFindFirst(info -> path, &hDir, FILE_DIRECTORY |
6743 MUST_HAVE_DIRECTORY | FILE_READONLY |
6744 FILE_ARCHIVED | FILE_SYSTEM | FILE_HIDDEN,
6745 &findbuf, sizeof(FILEFINDBUF3),
6746 &ulSearchCount, FIL_STANDARD);
6747 else
6748 {
6749 rc = 0;
6750 findbuf.attrFile = FILE_DIRECTORY;
6751 }
6752 priority_bumped();
6753 if (!rc)
6754 {
6755 if (!IsRoot(info -> path))
6756 DosFindClose(hDir);
6757 if (findbuf.attrFile & FILE_DIRECTORY)
6758 WinSendMsg(hwndUserlist, LM_INSERTITEM,
6759 MPFROM2SHORT(LIT_SORTASCENDING, 0),
6760 MPFROMP(info -> path));
6761 else
6762 {
6763 temp = info -> next;
6764 remove_udir(info -> path);
6765 info = temp;
6766 continue;
6767 }
6768 }
6769 else if (!(ulDriveMap & (1L << (toupper(*info -> path) - 'A'))))
6770 {
6771 temp = info -> next;
6772 remove_udir(info -> path);
6773 info = temp;
6774 continue;
6775 }
6776 }
6777 info = info -> next;
6778 }
6779 info = ldirhead;
6780 while (info)
6781 {
6782 if (IsFullName(info -> path) &&
6783 !(driveflags[toupper(*info -> path) - 'A'] &
6784 (DRIVE_IGNORE | DRIVE_INVALID)))
6785 {
6786 DosError(FERR_DISABLEHARDERR);
6787 hDir = HDIR_CREATE;
6788 ulSearchCount = 1L;
6789 if (!IsRoot(info -> path))
6790 rc = DosFindFirst(info -> path, &hDir, FILE_DIRECTORY |
6791 MUST_HAVE_DIRECTORY | FILE_READONLY |
6792 FILE_ARCHIVED | FILE_SYSTEM | FILE_HIDDEN,
6793 &findbuf, sizeof(FILEFINDBUF3),
6794 &ulSearchCount, FIL_STANDARD);
6795 else
6796 {
6797 rc = 0;
6798 findbuf.attrFile = FILE_DIRECTORY;
6799 }
6800 priority_bumped();
6801 if (!rc)
6802 {
6803 if (!IsRoot(info -> path))
6804 DosFindClose(hDir);
6805 if (findbuf.attrFile & FILE_DIRECTORY)
6806 WinSendMsg(hwndUserlist, LM_INSERTITEM,
6807 MPFROM2SHORT(LIT_SORTASCENDING, 0),
6808 MPFROMP(info -> path));
6809 else
6810 {
6811 temp = info -> next;
6812 remove_udir(info -> path);
6813 info = temp;
6814 continue;
6815 }
6816 }
6817 else if (!(ulDriveMap & (1L << (toupper(*info -> path) - 'A'))))
6818 {
6819 temp = info -> next;
6820 remove_udir(info -> path);
6821 info = temp;
6822 continue;
6823 }
6824 }
6825 info = info -> next;
6826 }
6827 WinSendMsg(hwndUserlist, LM_INSERTITEM,
6828 MPFROM2SHORT(0, 0),
6829 MPFROMP(GetPString(IDS_NEWDIRECTORYTEXT)));
6830 WinSetWindowText(hwndUserlist, GetPString(IDS_COMMONDIRTEXT));
6831 }
6832 return 0;
[2]6833
[133]6834 case UM_SIZE:
6835 if (fAutoTile)
6836 TileChildren(hwnd, FALSE);
6837 else
6838 MoveChildrenAwayFromTree(hwnd);
6839 return 0;
[2]6840
[133]6841 case WM_SIZE:
6842 ResizeChildren(hwnd, SHORT1FROMMP(mp1), SHORT2FROMMP(mp1),
6843 SHORT1FROMMP(mp2), SHORT2FROMMP(mp2));
6844 break;
[2]6845
[133]6846 case WM_ERASEBACKGROUND:
6847 WinFillRect((HPS) mp1, (PRECTL) mp2, 0x00d0d0d0);
6848 return 0;
[2]6849
[133]6850 case WM_PAINT:
6851 {
6852 HPS hps;
6853 RECTL rcl;
[2]6854
[133]6855 hps = WinBeginPaint(hwnd, (HPS) 0, NULL);
6856 if (hps)
6857 {
6858 WinQueryWindowRect(hwnd, &rcl);
6859 WinFillRect(hps, &rcl, CLR_PALEGRAY);
6860 WinEndPaint(hps);
6861 }
6862 }
6863 break;
[2]6864
[133]6865 case UM_CONTROL:
6866 switch (SHORT1FROMMP(mp1))
6867 {
6868 case MAIN_CMDLIST:
6869 case MAIN_SETUPLIST:
6870 case MAIN_DRIVELIST:
6871 case MAIN_USERLIST:
6872 case MAIN_BUTTONLIST:
6873 switch (SHORT2FROMMP(mp1))
6874 {
6875 case CBN_ENTER:
6876 {
6877 HWND hwndUL = WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
6878 SHORT1FROMMP(mp1));
6879 CHAR path[CCHMAXPATH];
[2]6880
[133]6881 SetShiftState();
6882 WinQueryWindowText(WinWindowFromID(hwndUL, CBID_EDIT),
6883 ((SHORT1FROMMP(mp1) == MAIN_USERLIST) ?
6884 CCHMAXPATH : 13), path);
6885 bstrip(path);
6886 if (*path)
6887 {
6888 if (SHORT1FROMMP(mp1) == MAIN_USERLIST)
6889 {
6890 if (!strcmp(path, GetPString(IDS_NEWDIRECTORYTEXT)))
6891 {
6892 if (!LastDir ||
6893 !WinSendMsg(WinQueryWindow(LastDir, QW_PARENT),
6894 UM_CONTAINERDIR,
6895 MPFROMP(path),
6896 MPVOID))
6897 save_dir2(path);
6898 if (!PMMkDir(hwnd,
6899 path,
6900 TRUE))
6901 {
6902 WinSetWindowText(hwndUL,
6903 GetPString(IDS_COMMONDIRTEXT));
6904 break;
6905 }
6906 }
6907 if (!IsFile(path) &&
6908 !FindDirCnrByName(path, TRUE))
6909 {
[2]6910
[133]6911 HWND hwndDir;
[2]6912
[133]6913 if ((fUserListSwitches &&
6914 !(shiftstate & KC_SHIFT)) ||
6915 (!fUserListSwitches &&
6916 (shiftstate & KC_SHIFT)))
6917 {
6918 hwndDir = FindDirCnr(hwnd);
6919 if (hwndDir)
6920 {
6921 WinSendMsg(LastDir,
6922 UM_SETDIR,
6923 MPFROMP(path),
6924 MPVOID);
6925 break;
6926 }
6927 }
6928 OpenDirCnr((HWND) 0,
6929 hwndMain,
6930 hwndTree,
6931 FALSE,
6932 path);
6933 }
6934 }
6935 else if (SHORT1FROMMP(mp1) == MAIN_DRIVELIST)
6936 {
6937 ShowTreeRec(WinWindowFromID(WinWindowFromID(hwndTree,
6938 FID_CLIENT),
6939 TREE_CNR),
6940 path,
6941 FALSE,
6942 TRUE);
6943 WinSetFocus(HWND_DESKTOP,
6944 hwndTree);
6945 }
6946 else if (SHORT1FROMMP(mp1) == MAIN_BUTTONLIST)
6947 {
6948 strcat(path, ".TLS");
6949 load_tools(path);
6950 PrfWriteProfileString(fmprof,
6951 FM3Str,
6952 "LastToolBox",
6953 lasttoolbox);
6954 BuildTools(hwndToolback,
6955 TRUE);
6956 WinSetWindowText(hwndButtonlist,
6957 GetPString(IDS_TOOLBOXTEXT));
6958 }
6959 else if (SHORT1FROMMP(mp1) == MAIN_SETUPLIST)
6960 {
[2]6961
[133]6962 CHAR s[120];
6963 ULONG size, numsaves = 0;
[2]6964
[133]6965 SetShiftState();
6966 size = sizeof(ULONG);
6967 sprintf(s,
6968 "%s.NumDirsLastTime",
6969 path);
6970 if (PrfQueryProfileData(fmprof,
6971 FM3Str,
6972 s,
6973 (PVOID) & numsaves,
6974 &size) &&
6975 numsaves)
6976 {
6977 if ((shiftstate & KC_SHIFT) == 0)
6978 PostMsg(MainObjectHwnd,
6979 UM_RESTORE,
6980 MPVOID,
6981 MPFROMLONG(2L));
6982 {
6983 char *temp;
[2]6984
[133]6985 temp = strdup(path);
6986 if (temp)
6987 {
6988 if (!PostMsg(MainObjectHwnd,
6989 UM_RESTORE,
6990 MPFROMP(temp),
6991 MPVOID))
6992 free(temp);
6993 }
6994 else
6995 {
6996 if ((shiftstate & KC_SHIFT) != 0 ||
6997 fAutoTile)
6998 PostMsg(MainObjectHwnd,
6999 UM_RESTORE,
7000 MPVOID,
7001 MPFROMLONG(1L));
7002 }
7003 }
7004 }
7005 else
7006 DosBeep(50, 100);
7007 WinSetWindowText(hwndStatelist,
7008 GetPString(IDS_STATETEXT));
7009 }
7010 else if (SHORT1FROMMP(mp1) == MAIN_CMDLIST)
7011 {
[2]7012
[133]7013 SHORT sSelect;
[2]7014
[133]7015 sSelect = (SHORT) WinSendMsg(hwndCmdlist,
7016 LM_QUERYSELECTION,
7017 MPFROMSHORT(LIT_FIRST),
7018 MPVOID);
7019 if (sSelect >= 0)
7020 WinPostMsg(hwnd,
7021 WM_COMMAND,
7022 MPFROM2SHORT(IDM_COMMANDSTART + sSelect, 0),
7023 MPVOID);
7024 WinSetWindowText(hwndCmdlist,
7025 GetPString(IDS_COMMANDSTEXT));
7026 }
7027 }
7028 }
7029 break;
[2]7030
[133]7031 default:
7032 break;
7033 }
7034 break;
[2]7035
[133]7036 default:
7037 break;
7038 }
7039 return 0;
[2]7040
[133]7041 case WM_HELP:
7042 WinSendMsg(hwndHelp,
7043 HM_HELP_CONTENTS,
7044 MPVOID,
7045 MPVOID);
7046 break;
[2]7047
[133]7048 case UM_COMMAND:
7049 case WM_COMMAND:
[2]7050
[133]7051 return MainWMCommand(hwnd, msg, mp1, mp2);
[2]7052
[133]7053 case WM_CLOSE:
7054 WinSendMsg(WinQueryWindow(hwnd, QW_PARENT),
7055 WM_SYSCOMMAND,
7056 MPFROM2SHORT(SC_RESTORE, 0),
7057 MPVOID);
7058 WinSendMsg(hwnd,
7059 WM_SAVEAPPLICATION,
7060 MPVOID,
7061 MPVOID);
7062 fAmClosing = TRUE;
7063 WinSendMsg(WinQueryWindow(hwnd, QW_PARENT),
7064 WM_SYSCOMMAND,
7065 MPFROM2SHORT(SC_MINIMIZE, 0),
7066 MPVOID);
7067 if (CloseChildren(hwnd))
7068 {
7069 fAmClosing = FALSE;
7070 if (fAutoTile)
7071 PostMsg(hwnd,
7072 WM_COMMAND,
7073 MPFROM2SHORT(IDM_TILE, 0),
7074 MPVOID);
7075 return 0;
7076 }
7077 if (hwndTree)
7078 {
7079 if (!PostMsg(hwndTree,
7080 WM_CLOSE,
7081 MPVOID,
7082 MPVOID))
7083 WinSendMsg(hwndTree,
7084 WM_CLOSE,
7085 MPVOID,
7086 MPVOID);
7087 }
7088 DosSleep(1L);
7089 return 0;
[2]7090
[133]7091 case UM_CLOSE:
7092 HideNote();
7093 WinDestroyWindow(WinQueryWindow(hwnd, QW_PARENT));
7094 return 0;
[2]7095
[133]7096 case UM_RESTORE:
7097 {
7098 char *temp;
[2]7099
[133]7100 temp = strdup(GetPString(IDS_FM2TEMPTEXT));
7101 if (temp)
7102 {
7103 if (!PostMsg(MainObjectHwnd,
7104 UM_RESTORE,
7105 MPFROMP(temp),
7106 MPVOID))
7107 free(temp);
7108 }
7109 }
7110 return 0;
[2]7111
[133]7112 case UM_SETDIR:
7113 if (mp1) /* mp1 == name of directory to open */
7114 return MRFROMLONG(OpenDirCnr((HWND) 0,
7115 hwndMain,
7116 hwndTree,
7117 (BOOL) mp2,
7118 (char *) mp1));
7119 return 0;
[2]7120
[133]7121 case WM_DESTROY:
7122 hwndMain = (HWND) 0;
7123 if (!PostMsg((HWND) 0,
7124 WM_QUIT,
7125 MPVOID,
7126 MPVOID))
7127 WinSendMsg((HWND) 0,
7128 WM_QUIT,
7129 MPVOID,
7130 MPVOID);
7131 break;
7132 }
[2]7133
[133]7134 return WinDefWindowProc(hwnd, msg, mp1, mp2);
[2]7135}
Note: See TracBrowser for help on using the repository browser.