source: trunk/dll/common.c@ 536

Last change on this file since 536 was 536, checked in by root, 19 years ago

Rework thread usage count logic

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