source: trunk/dll/mainwnd.c@ 302

Last change on this file since 302 was 297, checked in by root, 19 years ago

DriveProc: disable menu items if drive not ready
DriveProc: correct my stupid
IDM_EDITANYARCHIVER: sanitize code

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