source: trunk/dll/common.c@ 446

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

Use Dos_Error

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