source: trunk/dll/mainwnd.c@ 174

Last change on this file since 174 was 162, checked in by root, 20 years ago

Use ULONGLONG and CommaFmtULL

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