source: trunk/dll/mainwnd.c@ 401

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

Clean

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