source: trunk/dll/mainwnd.c@ 529

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

Complain nicer if state name does not exist

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