source: trunk/dll/mainwnd.c@ 200

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

Rework MainWMCommand for VAC3.65 compat

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