source: trunk/dll/common.c@ 304

Last change on this file since 304 was 246, checked in by root, 20 years ago

Renames

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