source: trunk/dll/mainwnd.c@ 151

Last change on this file since 151 was 133, checked in by root, 20 years ago

Use datamin.h

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