source: trunk/dll/mainwnd.c@ 352

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

Use Runtime_Error

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