source: trunk/dll/common.c@ 574

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

Use QWL_USER; Replace doesn't move the command and Okay on cmd dialog removed error on unchanged command

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