source: trunk/dll/mainwnd.c@ 188

Last change on this file since 188 was 186, checked in by root, 20 years ago

Use QWL_USER

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