source: trunk/dll/common.c@ 766

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

format cleanup

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