source: trunk/dll/mainwnd.c@ 181

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

Comments and localize code

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