source: trunk/dll/common.c@ 552

Last change on this file since 552 was 552, checked in by Gregg Young, 18 years ago

font cleanup; new image and archiver masks; messages moved to string file; new drive flags including David's icons mostly working

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 20.3 KB
RevLine 
[246]1
2/***********************************************************************
3
4 $Id: common.c 552 2007-03-01 06:24:47Z gyoung $
5
6 Common window functions
7
8 Copyright (c) 1993, 1998 M. Kimes
[348]9 Copyright (c) 2001, 2006 Steven H. Levine
[246]10
11 13 Aug 05 SHL Renames
[348]12 22 Jul 06 SHL Check more run time errors
[446]13 15 Aug 06 SHL Use Dos_Error
[536]14 03 Nov 06 SHL Rework thread usage count logic
[552]15 07 Jan 07 GKY Move error strings etc. to string file
16 07 Jan 07 GKY Updated Helv font to vector font Helvetica
[246]17
18***********************************************************************/
19
[2]20#define INCL_DOS
21#define INCL_DOSERRORS
22#define INCL_WIN
23#define INCL_GPI
[348]24#include <os2.h>
[2]25
26#include <stdarg.h>
27#include <stdio.h>
28#include <stdlib.h>
29#include <string.h>
30#include <ctype.h>
31#include <time.h>
32#include <direct.h>
33#include <share.h>
34#include <limits.h>
[348]35
[2]36#include "fm3dll.h"
37#include "fm3dlg.h"
38#include "fm3str.h"
39#include "mle.h"
40
41#pragma data_seg(DATA1)
[348]42
43static PSZ pszSrcFile = __FILE__;
44
[2]45#pragma alloc_text(COMMON,CommonFrameWndProc,CommonTextProc,CommonTextPaint)
46#pragma alloc_text(COMMON1,CommonCreateTextChildren,CommonCreateMainChildren)
47#pragma alloc_text(COMMON2,CommonDriveCmd,CommonTextButton)
[536]48#pragma alloc_text(COMMON3,CommonMainWndProc,IncrThreadUsage,DecrThreadUsage)
[2]49#pragma alloc_text(COMMON4,CommonCnrProc)
50#pragma alloc_text(COMMON5,OpenDirCnr)
51
[551]52MRESULT EXPENTRY CommonFrameWndProc(USHORT id,
53 HWND hwnd,
54 ULONG msg, MPARAM mp1, MPARAM mp2)
[377]55{
[551]56 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, 0);
[2]57
[551]58 switch (msg) {
59 case UM_TIMER:
60 case UM_ACTION:
61 case UM_SHOWME:
62 case UM_OPENWINDOWFORME:
63 case UM_MINIMIZE:
64 case UM_MAXIMIZE:
65 case UM_CONTAINERDIR:
66 case UM_FILTER:
67 case UM_INITMENU:
68 case UM_COMMAND:
69 case UM_UPDATERECORD:
70 case UM_UPDATERECORDLIST:
71 case WM_COMMAND:
72 case MM_PORTHOLEINIT:
73 case WM_INITMENU:
74 case UM_CONTAINER_FILLED:
75 case UM_FILESMENU:
76 return WinSendMsg(WinWindowFromID(hwnd, FID_CLIENT), msg, mp1, mp2);
[2]77
[551]78 case UM_CONTEXTMENU:
79 PostMsg(WinWindowFromID(hwnd, FID_CLIENT), msg, mp1, mp2);
80 return 0;
[2]81
[551]82 case UM_CONTAINERHWND:
83 return MRFROMLONG(WinWindowFromID(hwnd, id));
[2]84
[551]85 case DM_DROP:
86 case DM_DRAGOVER:
87 case DM_DRAGLEAVE:
88 case DM_DROPHELP:
89 {
90 CNRDRAGINFO cnd;
91 USHORT dcmd;
[2]92
[551]93 switch (msg) {
94 case DM_DROP:
95 dcmd = CN_DROP;
96 break;
97 case DM_DRAGOVER:
98 dcmd = CN_DRAGOVER;
99 break;
100 case DM_DRAGLEAVE:
101 dcmd = CN_DRAGLEAVE;
102 break;
103 case DM_DROPHELP:
104 dcmd = CN_DROPHELP;
105 break;
[2]106 }
[551]107 cnd.pDragInfo = (PDRAGINFO) mp1;
108 cnd.pRecord = NULL;
109 return WinSendMsg(WinWindowFromID(hwnd, FID_CLIENT),
110 WM_CONTROL, MPFROM2SHORT(id, dcmd), MPFROMP(&cnd));
111 }
[2]112
[551]113 case UM_RESCAN:
114 if (fAutoTile &&
115 !fAmClosing && !fNoTileUpdate && !ParentIsDesktop(hwnd, (HWND) 0))
116 PostMsg(WinQueryWindow(hwnd, QW_PARENT), UM_RESCAN, MPVOID, MPVOID);
117 return 0;
[2]118
[551]119 case WM_MINMAXFRAME:
120 {
121 PSWP pswp = (PSWP) mp1;
122 MRESULT rc;
[2]123
[551]124 rc = oldproc(hwnd, msg, mp1, mp2);
125 if (pswp->fl & (SWP_MINIMIZE | SWP_HIDE | SWP_RESTORE))
126 WinSendMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
127 return rc;
128 }
[2]129
[551]130 case WM_DESTROY:
131 WinSendMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
132 break;
[2]133 }
[551]134 return oldproc(hwnd, msg, mp1, mp2);
[2]135}
136
[551]137MRESULT EXPENTRY CommonTextProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[377]138{
[551]139 switch (msg) {
140 case WM_CREATE:
141 {
142 MRESULT rc;
[2]143
[551]144 rc = PFNWPStatic(hwnd, msg, mp1, mp2);
[552]145 switch (WinQueryWindowUShort(hwnd, QWS_ID))
[551]146 case DIR_SORT:
147 case DIR_VIEW:
148 case DIR_FILTER:
[552]149
150 SetPresParams(hwnd, &RGBGREY, &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVTEXT));
[551]151 return rc;
152 }
[2]153 }
[551]154 return PFNWPStatic(hwnd, msg, mp1, mp2);
[2]155}
156
[551]157void CommonTextPaint(HWND hwnd, HPS hps)
[377]158{
[2]159 int x;
[551]160 USHORT ids[] = { DIR_FOLDERICON, DIR_TOTALS, DIR_SELECTED, DIR_VIEW,
161 DIR_FILTER, DIR_SORT, DIR_MAX, 0
162 };
163 BOOL bools[] = { TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE };
[2]164
[551]165 for (x = 0; ids[x]; x++) {
166 if (WinWindowFromID(hwnd, ids[x]) != (HWND) 0)
167 PaintRecessedWindow(WinWindowFromID(hwnd, ids[x]), hps,
168 bools[x], FALSE);
[2]169 }
170}
171
[551]172void CommonCreateTextChildren(HWND hwnd, char *class, USHORT * ids)
[377]173{
[551]174 int x;
175 CHAR s[33];
[2]176 ULONG attrs;
[377]177 HWND hwndTmp;
[2]178
[377]179 if (!hwnd || !class || !ids) {
180 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
[2]181 return;
[377]182 }
[2]183
[551]184 for (x = 0; ids[x]; x++) {
[2]185 *s = 0;
[551]186 switch (ids[x]) {
187 case DIR_SORT:
188 case DIR_FILTER:
189 case DIR_VIEW:
190 attrs = SS_TEXT | DT_LEFT | DT_VCENTER;
191 break;
192 case DIR_FOLDERICON:
193 case DIR_MAX:
194 attrs = SS_BITMAP;
195 sprintf(s, "#%d", ids[x]);
196 break;
197 default:
198 attrs = SS_TEXT | DT_CENTER | DT_VCENTER;
199 break;
[2]200 }
[551]201 hwndTmp = WinCreateWindow(hwnd, class, s, attrs, 0, 0, 0, 0, hwnd,
202 HWND_TOP, ids[x], NULL, NULL);
[377]203 if (!hwndTmp)
[551]204 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
205 } // for
[2]206}
207
[551]208void CommonDriveCmd(HWND hwnd, char *drive, USHORT cmd)
[377]209{
[2]210 char dv[CCHMAXPATH];
211
[551]212 if (!drive || !*drive)
[2]213 return;
[551]214 strcpy(dv, drive);
[2]215 MakeValidDir(dv);
216
[551]217 switch (cmd) {
218 case IDM_MKDIR:
219 PMMkDir(hwnd, dv, FALSE);
220 break;
221 case IDM_INFO:
222 WinDlgBox(HWND_DESKTOP,
223 HWND_DESKTOP,
224 DrvInfoProc, FM3ModHandle, INFO_FRAME, (PVOID) dv);
225 break;
226 case IDM_DRVFLAGS:
[552]227 strcpy(dv, drive); // Must use original drive letter
[551]228 if (WinDlgBox(HWND_DESKTOP,
229 hwnd,
230 SetDrvProc,
231 FM3ModHandle, DVS_FRAME, MPFROMP(dv)) && hwndTree)
232 PostMsg(hwndTree, WM_COMMAND, MPFROM2SHORT(IDM_UPDATE, 0), MPVOID);
233 break;
234 case IDM_SIZES:
235 WinDlgBox(HWND_DESKTOP,
236 HWND_DESKTOP, DirSizeProc, FM3ModHandle, DSZ_FRAME, dv);
237 break;
238 case IDM_SHOWALLFILES:
239 StartSeeAll(HWND_DESKTOP, FALSE, dv);
240 break;
241 case IDM_UNDELETE:
242 WinDlgBox(HWND_DESKTOP,
243 hwnd, UndeleteDlgProc, FM3ModHandle, UNDEL_FRAME, MPFROMP(dv));
244 break;
245 case IDM_CHKDSK:
246 runemf2(SEPARATE | WINDOWED,
247 hwnd, NULL, NULL, "PMCHKDSK.EXE %c:", toupper(*dv));
248 break;
249 case IDM_OPTIMIZE:
250 {
251 CHAR FileSystem[CCHMAXPATH];
252 ULONG type;
[2]253
[551]254 CheckDrive(*dv, FileSystem, &type);
255 if (*FileSystem) {
256 strcat(FileSystem, "OPT.CMD");
257 runemf2(SEPARATE | WINDOWED,
258 hwnd,
259 NULL,
260 NULL,
261 "%s /C %s %c:", GetCmdSpec(FALSE), FileSystem, toupper(*dv));
[2]262 }
[551]263 }
264 break;
265 case IDM_FORMAT:
266 runemf2(SEPARATE | WINDOWED,
267 hwnd, NULL, NULL, "PMFORMAT.EXE %c:", toupper(*dv));
268 break;
[2]269
[551]270#if 0 // fixme to be gone?
[446]271
[551]272 case IDM_CLOSETRAY:
273 if (driveflags[*dv - 'A'] & DRIVE_CDROM) {
[2]274
[551]275 BYTE parm[4] = { "CD01" };
276 ULONG dlen, plen;
277 HFILE hfile;
278 APIRET rc;
[2]279
[551]280 dv[2] = 0;
281 rc = DosOpen(dv,
282 &hfile,
283 &dlen,
284 0,
285 0,
286 OPEN_ACTION_OPEN_IF_EXISTS |
287 OPEN_ACTION_CREATE_IF_NEW,
288 OPEN_FLAGS_DASD |
289 OPEN_FLAGS_FAIL_ON_ERROR | OPEN_SHARE_DENYNONE, NULL);
290 if (rc)
291 Dos_Error(MB_CANCEL, rc, hwnd, pszSrcFile, __LINE__, "DosOpen");
292 else {
293 dlen = 0;
294 plen = sizeof(parm);
295 rc = DosDevIOCtl(hfile,
296 0x80,
297 0x45, &parm, sizeof(parm), &plen, NULL, 0, &dlen);
298 DosClose(hfile);
299 if (rc)
300 Dos_Error(MB_CANCEL, rc, hwnd, pszSrcFile, __LINE__, "DosDevIOCtl");
[2]301 }
[551]302 }
303 break;
[446]304#endif // fixme to be gone?
[2]305
[551]306 case IDM_LOCK:
307 case IDM_UNLOCK:
308 case IDM_EJECT:
309 {
310 BYTE parm[2];
311 ULONG plen = sizeof(parm), dlen = 0L;
[446]312
[551]313 switch (SHORT1FROMMP(cmd)) {
314 case IDM_LOCK:
315 parm[0] = 1;
316 break;
317 case IDM_UNLOCK:
318 parm[0] = 0;
319 break;
320 case IDM_EJECT:
321 parm[0] = 2;
322 break;
[2]323 }
[551]324 parm[1] = (BYTE) (*dv - 'A');
325 DosError(FERR_DISABLEHARDERR);
326 DosDevIOCtl(-1L,
327 8L, 0x40L, &parm, sizeof(parm), &plen, NULL, 0L, &dlen);
328 }
329 break;
[2]330 }
331}
332
[551]333void CommonCreateMainChildren(HWND hwnd, SWP * swp)
[377]334{
[551]335 HWND hwndFrame = WinQueryWindow(hwnd, QW_PARENT);
[377]336 HWND hwndTmp;
337 PFNWP oldproc;
[2]338
[377]339 // Create a children of frame window
340 hwndStatus = WinCreateWindow(hwndFrame,
[551]341 GetPString(IDS_WCSTATUS),
342 "Status",
343 WS_VISIBLE | SS_TEXT | DT_LEFT |
344 DT_VCENTER,
345 swp->x + 4 +
346 WinQuerySysValue(HWND_DESKTOP,
347 SV_CXSIZEBORDER),
348 swp->y + 4 +
349 WinQuerySysValue(HWND_DESKTOP,
350 SV_CYSIZEBORDER),
351 ((swp->cx / 2) - 8) -
352 (WinQuerySysValue(HWND_DESKTOP,
353 SV_CXSIZEBORDER) * 2),
354 20,
355 hwndFrame, HWND_TOP, MAIN_STATUS, NULL, NULL);
[377]356 if (!hwndStatus)
[551]357 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
[377]358
359 hwndStatus2 = WinCreateWindow(hwndFrame,
[551]360 GetPString(IDS_WCSTATUS),
361 "Status2",
362 WS_VISIBLE | SS_TEXT | DT_LEFT |
363 DT_VCENTER,
364 ((swp->cx / 2) + 4) +
365 WinQuerySysValue(HWND_DESKTOP,
366 SV_CXSIZEBORDER),
367 ((swp->cy / 2) + 4) +
368 WinQuerySysValue(HWND_DESKTOP,
369 SV_CYSIZEBORDER),
370 ((swp->cx / 2) - 8) -
371 (WinQuerySysValue(HWND_DESKTOP,
372 SV_CXSIZEBORDER) * 2),
373 20,
374 hwndFrame,
375 HWND_TOP, MAIN_STATUS2, NULL, NULL);
[377]376 if (!hwndStatus2)
[551]377 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
[2]378
[377]379 hwndAttr = WinCreateWindow(hwndFrame,
[551]380 GetPString(IDS_WCSTATUS),
381 "Attr",
382 WS_VISIBLE | SS_TEXT | DT_CENTER |
383 DT_VCENTER,
384 swp->x + 4 +
385 WinQuerySysValue(HWND_DESKTOP,
386 SV_CXSIZEBORDER),
387 swp->y + 4 + 24 +
388 WinQuerySysValue(HWND_DESKTOP,
389 SV_CYSIZEBORDER),
390 ((swp->cx / 4) - 8) -
391 (WinQuerySysValue(HWND_DESKTOP,
392 SV_CXSIZEBORDER) * 2),
393 20, hwndFrame, HWND_TOP, IDM_ATTRS, NULL, NULL);
[377]394 if (!hwndAttr)
[551]395 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
[377]396
397 hwndDate = WinCreateWindow(hwndFrame,
[551]398 GetPString(IDS_WCSTATUS),
399 "Date",
400 WS_VISIBLE | SS_TEXT | DT_CENTER |
401 DT_VCENTER,
402 ((swp->x / 4) * 2) + 4 +
403 WinQuerySysValue(HWND_DESKTOP,
404 SV_CXSIZEBORDER),
405 swp->y + 4 + 24 +
406 WinQuerySysValue(HWND_DESKTOP,
407 SV_CYSIZEBORDER),
408 ((swp->cx / 4) - 8) -
409 (WinQuerySysValue(HWND_DESKTOP,
410 SV_CXSIZEBORDER) * 2),
411 20, hwndFrame, HWND_TOP, IDM_INFO, NULL, NULL);
[377]412 if (!hwndDate)
[551]413 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
[377]414
415 hwndName = WinCreateWindow(hwndFrame,
[551]416 GetPString(IDS_WCSTATUS),
417 "Name",
418 WS_VISIBLE | SS_TEXT | DT_LEFT |
419 DT_VCENTER,
420 ((swp->x / 4) * 3) + 4 +
421 WinQuerySysValue(HWND_DESKTOP,
422 SV_CXSIZEBORDER),
423 swp->y + 4 +
424 WinQuerySysValue(HWND_DESKTOP,
425 SV_CYSIZEBORDER),
426 ((swp->cx / 4) - 8) -
427 (WinQuerySysValue(HWND_DESKTOP,
428 SV_CXSIZEBORDER) * 2),
429 20, hwndFrame, HWND_TOP, IDM_RENAME, NULL, NULL);
[377]430 if (!hwndName)
[551]431 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
[2]432
[377]433 hwndTmp = WinCreateWindow(hwndFrame,
[551]434 GetPString(IDS_WCTOOLBACK),
435 NullStr,
436 WS_VISIBLE | SS_TEXT | DT_CENTER | DT_VCENTER,
437 swp->x +
438 WinQuerySysValue(HWND_DESKTOP,
439 SV_CXSIZEBORDER),
440 (swp->cy -
441 WinQuerySysValue(HWND_DESKTOP,
442 SV_CYSIZEBORDER)) - 30,
443 swp->cx -
444 (WinQuerySysValue(HWND_DESKTOP,
445 SV_CXSIZEBORDER) * 2),
446 30, hwndFrame, HWND_TOP, MAIN_TOOLS, NULL, NULL);
[377]447 if (!hwndTmp)
[551]448 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
[377]449
450 hwndBack = WinCreateWindow(hwndFrame,
[551]451 GetPString(IDS_WCDRIVEBACK),
452 NullStr,
453 WS_VISIBLE | SS_TEXT | DT_RIGHT | DT_BOTTOM,
454 swp->x +
455 WinQuerySysValue(HWND_DESKTOP,
456 SV_CXSIZEBORDER),
457 (swp->cy -
458 WinQuerySysValue(HWND_DESKTOP,
459 SV_CYSIZEBORDER)) - 30,
460 swp->cx -
461 (WinQuerySysValue(HWND_DESKTOP,
462 SV_CXSIZEBORDER) * 2),
463 30,
464 hwndFrame, HWND_TOP, MAIN_DRIVES, NULL, NULL);
[2]465
[377]466 if (!hwndBack)
[551]467 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
[377]468
469 hwndLED = WinCreateWindow(hwndFrame,
[551]470 GetPString(IDS_WCLED),
471 "#920",
472 WS_VISIBLE | SS_BITMAP,
473 swp->cx - 58,
474 swp->y,
475 12,
476 12, hwndFrame, HWND_TOP, MAIN_LED, NULL, NULL);
[377]477 if (!hwndLED)
[551]478 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
[377]479
480 hwndLEDHdr = WinCreateWindow(hwndFrame,
[551]481 GetPString(IDS_WCLED),
482 "0",
483 WS_VISIBLE | SS_TEXT | DT_VCENTER |
484 DT_CENTER,
485 swp->cx - 58,
486 swp->y + 12,
487 12,
488 12,
489 hwndFrame, HWND_TOP, MAIN_LEDHDR, NULL, NULL);
[377]490 if (!hwndLEDHdr)
[551]491 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
[377]492
493 hwndAutoview = WinCreateWindow(hwndFrame,
[551]494 GetPString(IDS_WCAUTOVIEW),
495 NullStr,
496 WS_VISIBLE | SS_TEXT | DT_LEFT |
497 DT_TOP | DT_WORDBREAK,
498 swp->x + 4 +
499 WinQuerySysValue(HWND_DESKTOP,
500 SV_CXSIZEBORDER),
501 swp->y + 4 +
502 WinQuerySysValue(HWND_DESKTOP,
503 SV_CYSIZEBORDER) + 16,
504 (swp->cx - 8) -
505 (WinQuerySysValue(HWND_DESKTOP,
506 SV_CXSIZEBORDER) * 2),
507 48,
508 hwndFrame,
509 HWND_TOP, MAIN_AUTOVIEW, NULL, NULL);
[377]510 if (!hwndAutoview)
[551]511 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
[377]512
513 hwndAutoMLE = WinCreateWindow(hwndFrame,
[551]514 // GetPString(IDS_WCAUTOVIEW),
515 WC_MLE,
516 NullStr,
517 WS_VISIBLE | MLS_HSCROLL |
518 MLS_VSCROLL | MLS_BORDER,
519 swp->x + 4 +
520 WinQuerySysValue(HWND_DESKTOP,
521 SV_CXSIZEBORDER),
522 swp->y + 4 +
523 WinQuerySysValue(HWND_DESKTOP,
524 SV_CYSIZEBORDER) + 16,
525 (swp->cx - 8) -
526 (WinQuerySysValue(HWND_DESKTOP,
527 SV_CXSIZEBORDER) * 2),
528 48,
529 hwndFrame,
530 HWND_TOP, MAIN_AUTOVIEWMLE, NULL, NULL);
[377]531 if (!hwndAutoMLE)
[551]532 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
[2]533
[551]534 oldproc = WinSubclassWindow(hwndAutoMLE, AutoViewProc);
535 WinSetWindowPtr(hwndAutoMLE, 0, (PVOID) oldproc);
536 PostMsg(hwndAutoMLE, UM_SETUP, MPVOID, MPVOID);
[2]537}
538
[551]539MRESULT EXPENTRY CommonMainWndProc(HWND hwnd, ULONG msg, MPARAM mp1,
540 MPARAM mp2)
[377]541{
[551]542 switch (msg) {
543 case UM_THREADUSE:
544 if (hbmLEDon && hbmLEDoff) {
545 static LONG threaduse;
546 CHAR ts[33];
[2]547
[551]548 if (mp1) {
549 threaduse++;
550 if (threaduse == 1)
551 WinSendMsg(hwndLED, SM_SETHANDLE, MPFROMLONG(hbmLEDon), MPVOID);
552 }
553 else {
554 threaduse--;
555 if (threaduse <= 0) {
556 threaduse = 0;
557 WinSendMsg(hwndLED, SM_SETHANDLE, MPFROMLONG(hbmLEDoff), MPVOID);
[377]558 }
559 }
[551]560 ltoa(threaduse, ts, 10);
561 WinSetWindowText(hwndLEDHdr, ts);
562 DosSleep(0);
563 }
564 return 0;
[2]565
[551]566 case UM_LOADFILE:
567 {
568 CHAR *s = NULL;
569 static CHAR lastfile[CCHMAXPATH] = "";
[2]570
[551]571 if (!fAutoView) {
572 if (*lastfile)
573 PostMsg((fComments) ? hwndAutoMLE : hwndAutoview,
574 UM_LOADFILE, MPVOID, MPVOID);
575 *lastfile = 0;
576 }
577 else {
578 if (mp1) {
579 if (!mp2 && !stricmp(lastfile, (CHAR *) mp1))
580 return 0;
581 strcpy(lastfile, (CHAR *) mp1);
582 s = xstrdup(lastfile, pszSrcFile, __LINE__);
583 }
584 else
585 *lastfile = 0;
586 if (!PostMsg((fComments) ? hwndAutoMLE : hwndAutoview,
587 UM_LOADFILE, MPFROMP(s), MPVOID)) {
588 if (s)
589 free(s);
590 }
591 }
592 }
593 return 0;
[2]594
[551]595 case UM_BUILDDRIVEBAR:
596 BuildDriveBarButtons(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
597 MAIN_DRIVES));
598 return 0;
[2]599 }
[551]600 return WinDefWindowProc(hwnd, msg, mp1, mp2);
[2]601}
602
[551]603MRESULT EXPENTRY CommonTextButton(HWND hwnd, ULONG msg, MPARAM mp1,
604 MPARAM mp2)
[377]605{
[551]606 static HWND hwndLast = (HWND) 0;
[2]607 static ULONG lastclick = 0;
608
[551]609 switch (msg) {
610 case WM_MOUSEMOVE:
611 shiftstate = (SHORT2FROMMP(mp2) & (KC_SHIFT | KC_ALT | KC_CTRL));
612 if (!fNoFinger) {
613 WinSetPointer(HWND_DESKTOP, hptrFinger);
614 return MRFROMLONG(TRUE);
615 }
616 break;
[348]617
[551]618 case WM_BUTTON1DOWN:
619 case WM_BUTTON3DOWN:
620 if (hwndBubble)
621 WinDestroyWindow(hwndBubble);
622 shiftstate = (SHORT2FROMMP(mp2) & (KC_SHIFT | KC_ALT | KC_CTRL));
623 WinSetCapture(HWND_DESKTOP, hwnd);
624 PaintRecessedWindow(hwnd, (HPS) 0, FALSE, FALSE);
625 break;
[2]626
[551]627 case WM_BUTTON2UP:
628 case WM_BUTTON2DOWN:
629 shiftstate = (SHORT2FROMMP(mp2) & (KC_SHIFT | KC_ALT | KC_CTRL));
630 if (msg == WM_BUTTON2UP && hwndLast) {
631 PostMsg(hwnd, UM_FOCUSME, MPFROMP(hwndLast), MPVOID);
632 hwndLast = (HWND) 0;
633 }
634 break;
[2]635
[551]636 case WM_BUTTON1UP:
637 case WM_BUTTON3UP:
638 shiftstate = (SHORT2FROMMP(mp2) & (KC_SHIFT | KC_ALT | KC_CTRL));
639 WinSetCapture(HWND_DESKTOP, (HWND) 0);
640 PaintRecessedWindow(hwnd, (HPS) 0, TRUE, FALSE);
641 {
642 ULONG check;
[2]643
[551]644 DosQuerySysInfo(QSV_MS_COUNT, QSV_MS_COUNT, &check, sizeof(check));
645 if (check > lastclick + 500) {
[2]646
[551]647 RECTL rcl;
648 POINTS pts;
[2]649
[551]650 pts.x = SHORT1FROMMP(mp1);
651 pts.y = SHORT2FROMMP(mp1);
652 WinQueryWindowRect(hwnd, &rcl);
653 if (pts.x > 0 && pts.y > 0 && pts.x < rcl.xRight && pts.y < rcl.yTop)
654 PostMsg(hwnd, UM_CLICKED + (msg == WM_BUTTON3UP), mp1, mp2);
[2]655 }
[551]656 lastclick = check;
657 }
658 PostMsg(hwnd, UM_FOCUSME, MPFROMP(hwndLast), MPVOID);
659 hwndLast = (HWND) 0;
660 break;
[2]661
[551]662 case WM_SETFOCUS:
663 if (mp2)
664 hwndLast = (HWND) mp1;
665 break;
[2]666
[551]667 case UM_FOCUSME:
668 if (mp1) {
[2]669
[551]670 PID pid;
671 TID tid;
[2]672
[551]673 if (WinIsWindow(WinQueryAnchorBlock(hwnd), (HWND) mp1) &&
674 WinQueryWindowProcess((HWND) mp1, &pid, &tid) && pid == mypid) {
675 WinSetFocus(HWND_DESKTOP, (HWND) mp1);
676 return 0;
[2]677 }
[551]678 }
679 {
680 HWND htemp = (HWND) 0;
[2]681
[551]682 if (hwndMain)
683 htemp = TopWindow(hwndMain, (HWND) 0);
684 if (!htemp)
685 htemp = hwndTree;
686 if (htemp)
687 WinSetFocus(HWND_DESKTOP, htemp);
688 else
689 WinSetFocus(HWND_DESKTOP, WinQueryWindow(hwnd, QW_PARENT));
690 }
691 return 0;
[2]692 }
693
[551]694 return PFNWPStatic(hwnd, msg, mp1, mp2);
[2]695}
696
[551]697MRESULT EXPENTRY CommonCnrProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[377]698{
[551]699 DIRCNRDATA *dcd = WinQueryWindowPtr(hwnd, 0);
[2]700
[551]701 switch (msg) {
702 case UM_FIXCNRMLE:
703 if (dcd) {
[2]704
[551]705 SWP swp, swpC;
[2]706
[551]707 if (WinQueryWindowPos(WinWindowFromID(hwnd, CID_MLE), &swp)) {
708 if (WinQueryWindowPos(hwnd, &swpC)) {
709 swpC.cx -= (WinQuerySysValue(HWND_DESKTOP, SV_CXVSCROLL) + 4);
710 swpC.cx -= swp.x;
711 WinSetWindowPos(WinWindowFromID(hwnd, CID_MLE),
712 HWND_TOP, 0, 0, swpC.cx, swp.cy + 2, SWP_SIZE);
713 }
[2]714 }
[551]715 if (mp1)
716 WinSendMsg(WinWindowFromID(hwnd, CID_MLE),
717 MLM_SETTEXTLIMIT, mp1, MPVOID);
718 }
719 return 0;
[2]720
[551]721 case UM_FIXEDITNAME:
722 if (dcd) {
723 if (mp1 && (INT) mp1 != -1) {
[2]724
[551]725 CHAR *p;
[2]726
[551]727 WinSendMsg(hwnd, UM_FIXCNRMLE, MPFROMLONG(CCHMAXPATH), MPVOID);
728 MLEdelete(WinWindowFromID(hwnd, CID_MLE),
729 0, strlen((CHAR *) mp1) + 1);
730 WinSetDlgItemText(hwnd, CID_MLE, (CHAR *) mp1);
731 p = strrchr((CHAR *) mp1, '\\');
732 if (p) {
733 p++;
734 MLEsetcurposa(WinWindowFromID(hwnd, CID_MLE), (p - (CHAR *) mp1));
735 MLEsetcurposc(WinWindowFromID(hwnd, CID_MLE), strlen((CHAR *) mp1));
736 }
737 else
738 MLEsetcurpos(WinWindowFromID(hwnd, CID_MLE), strlen((CHAR *) mp1));
739 }
740 else if (mp2) {
741 if ((INT) mp1 == -1) {
[2]742
[551]743 PCNRITEM pci = (PCNRITEM) mp2;
[2]744
[551]745 WinSendMsg(hwnd,
746 CM_REMOVERECORD,
747 MPFROMP(&pci),
748 MPFROM2SHORT(1, CMA_FREE | CMA_INVALIDATE));
749 }
750 else {
751 Broadcast(WinQueryAnchorBlock(hwnd),
752 dcd->hwndParent, UM_UPDATERECORD, mp2, MPVOID);
753 free(mp2);
754 }
[2]755 }
[551]756 }
757 return 0;
[2]758 }
[551]759 return PFNWPCnr(hwnd, msg, mp1, mp2);
[2]760}
761
[551]762HWND OpenDirCnr(HWND hwnd, HWND hwndParent, HWND hwndRestore,
763 BOOL noautotile, char *directory)
[377]764{
[551]765 SWP swp;
[2]766 HWND hwndDir;
767
[551]768 if (ParentIsDesktop(hwnd, hwndParent) || *(ULONG *) realappname != FM3UL)
769 StartDirCnr(HWND_DESKTOP, directory, hwndRestore, 1);
770 else if (*(ULONG *) realappname == FM3UL) {
771 if (!fAutoTile)
772 GetNextWindowPos(hwndParent, &swp, NULL, NULL);
773 hwndDir = StartDirCnr(hwndParent, directory, hwndRestore, 1);
774 if (hwndDir) {
775 if (!fAutoTile)
776 WinSetWindowPos(hwndDir,
777 HWND_TOP,
778 swp.x,
779 swp.y,
780 swp.cx,
781 swp.cy, SWP_MOVE | SWP_SIZE | SWP_SHOW | SWP_ZORDER);
782 else if (!noautotile)
783 TileChildren(hwndParent, TRUE);
[2]784 WinSetWindowPos(hwndDir,
[551]785 HWND_TOP,
786 0, 0, 0, 0, SWP_RESTORE | SWP_SHOW | SWP_ACTIVATE);
[2]787 }
788 }
789 else {
790
791 char s[256];
792
793 assign_ignores(s);
794 runemf2(WINDOWED | SEPARATE,
[551]795 hwnd,
796 NULL,
797 NULL,
798 "VDIR.EXE %s%s\"%s%s\"",
799 (*s) ? s : NullStr, (*s) ? " " : NullStr,
800 directory,
801 (directory[strlen(directory) - 1] == '\\') ? "\\" : NullStr);
[2]802 }
803 return hwndDir;
804}
805
[536]806//= IncrThreadUsage() Increment thread usage counter ==
807
808VOID IncrThreadUsage(VOID)
809{
810 if (hwndMain)
[551]811 WinPostMsg(hwndMain, UM_THREADUSE, MPFROMLONG(1), MPVOID);
[536]812}
813
814//= DecrThreadUsage() Decrement thread usage counter ==
815
816VOID DecrThreadUsage(VOID)
817{
818 if (hwndMain)
[551]819 WinPostMsg(hwndMain, UM_THREADUSE, MPVOID, MPVOID);
[536]820}
Note: See TracBrowser for help on using the repository browser.