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
RevLine 
[246]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
[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
[246]14
15***********************************************************************/
16
[2]17#define INCL_DOS
18#define INCL_DOSERRORS
19#define INCL_WIN
20#define INCL_GPI
[348]21#include <os2.h>
[2]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>
[348]32
[2]33#include "fm3dll.h"
34#include "fm3dlg.h"
35#include "fm3str.h"
36#include "mle.h"
37
38#pragma data_seg(DATA1)
[348]39
40static PSZ pszSrcFile = __FILE__;
41
[2]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,
[377]54 MPARAM mp2)
55{
[2]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,
[377]148 MPARAM mp2)
149{
[2]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
[377]175void CommonTextPaint (HWND hwnd,HPS hps)
176{
[2]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
[377]190void CommonCreateTextChildren (HWND hwnd,char *class,USHORT *ids)
191{
[2]192 int x;
193 CHAR s[33];
194 ULONG attrs;
[377]195 HWND hwndTmp;
[2]196
[377]197 if (!hwnd || !class || !ids) {
198 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
[2]199 return;
[377]200 }
[2]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 }
[377]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
[2]224}
225
226
[377]227void CommonDriveCmd (HWND hwnd,char *drive,USHORT cmd)
228{
[2]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
[446]320#if 0 // fixme to be gone?
321
[2]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);
[446]342 if (rc)
343 Dos_Error(MB_CANCEL,rc,hwnd,pszSrcFile,__LINE__,"DosOpen");
344 else {
[2]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);
[446]357 if (rc)
358 Dos_Error(MB_CANCEL,rc,hwnd,pszSrcFile,__LINE__,"DosDevIOCtl");
[2]359 }
360 }
361 break;
[446]362#endif // fixme to be gone?
[2]363
[446]364
[2]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
[377]400void CommonCreateMainChildren (HWND hwnd,SWP *swp)
401{
402 HWND hwndFrame = WinQueryWindow(hwnd,QW_PARENT);
403 HWND hwndTmp;
404 PFNWP oldproc;
[2]405
[377]406 // Create a children of frame window
407 hwndStatus = WinCreateWindow(hwndFrame,
[2]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,
[377]422 hwndFrame,
[2]423 HWND_TOP,
424 MAIN_STATUS,
425 NULL,
426 NULL);
[377]427 if (!hwndStatus)
428 Win_Error2(hwndFrame,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
429
430 hwndStatus2 = WinCreateWindow(hwndFrame,
[2]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,
[377]445 hwndFrame,
[2]446 HWND_TOP,
447 MAIN_STATUS2,
448 NULL,
449 NULL);
[377]450 if (!hwndStatus2)
451 Win_Error2(hwndFrame,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
[2]452
[377]453 hwndAttr = WinCreateWindow(hwndFrame,
[2]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,
[377]468 hwndFrame,
[2]469 HWND_TOP,
470 IDM_ATTRS,
471 NULL,
472 NULL);
[377]473 if (!hwndAttr)
474 Win_Error2(hwndFrame,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
475
476 hwndDate = WinCreateWindow(hwndFrame,
[2]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,
[377]491 hwndFrame,
[2]492 HWND_TOP,
493 IDM_INFO,
494 NULL,
495 NULL);
[377]496 if (!hwndDate)
497 Win_Error2(hwndFrame,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
498
499 hwndName = WinCreateWindow(hwndFrame,
[2]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,
[377]514 hwndFrame,
[2]515 HWND_TOP,
516 IDM_RENAME,
517 NULL,
518 NULL);
[377]519 if (!hwndName)
520 Win_Error2(hwndFrame,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
[2]521
[377]522 hwndTmp = WinCreateWindow(hwndFrame,
[2]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,
[377]536 hwndFrame,
[2]537 HWND_TOP,
538 MAIN_TOOLS,
539 NULL,
540 NULL);
[377]541 if (!hwndTmp)
542 Win_Error2(hwndFrame,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
543
544 hwndBack = WinCreateWindow(hwndFrame,
[2]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,
[377]558 hwndFrame,
[2]559 HWND_TOP,
560 MAIN_DRIVES,
561 NULL,
562 NULL);
563
[377]564 if (!hwndBack)
565 Win_Error2(hwndFrame,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
566
567 hwndLED = WinCreateWindow(hwndFrame,
[2]568 GetPString(IDS_WCLED),
569 "#920",
570 WS_VISIBLE | SS_BITMAP,
571 swp->cx - 58,
572 swp->y,
573 12,
574 12,
[377]575 hwndFrame,
[2]576 HWND_TOP,
577 MAIN_LED,
578 NULL,
579 NULL);
[377]580 if (!hwndLED)
581 Win_Error2(hwndFrame,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
582
583 hwndLEDHdr = WinCreateWindow(hwndFrame,
[2]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,
[377]592 hwndFrame,
[2]593 HWND_TOP,
594 MAIN_LEDHDR,
595 NULL,
596 NULL);
[377]597 if (!hwndLEDHdr)
598 Win_Error2(hwndFrame,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
599
600 hwndAutoview = WinCreateWindow(hwndFrame,
[2]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,
[377]615 hwndFrame,
[2]616 HWND_TOP,
617 MAIN_AUTOVIEW,
618 NULL,
619 NULL);
[377]620 if (!hwndAutoview)
621 Win_Error2(hwndFrame,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
622
623 hwndAutoMLE = WinCreateWindow(hwndFrame,
624 // GetPString(IDS_WCAUTOVIEW),
[2]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,
[377]639 hwndFrame,
[2]640 HWND_TOP,
641 MAIN_AUTOVIEWMLE,
642 NULL,
643 NULL);
[377]644 if (!hwndAutoMLE)
645 Win_Error2(hwndFrame,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
[2]646
[377]647 oldproc = WinSubclassWindow(hwndAutoMLE,AutoViewProc);
648 WinSetWindowPtr(hwndAutoMLE,0,(PVOID)oldproc);
649 PostMsg(hwndAutoMLE,UM_SETUP,MPVOID,MPVOID);
[2]650}
651
[377]652MRESULT EXPENTRY CommonMainWndProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
653{
[2]654 switch(msg) {
655 case UM_THREADUSE:
[377]656 if (hbmLEDon && hbmLEDoff) {
657 static LONG threaduse = 0;
658 CHAR ts[33];
[2]659
660 if(mp1) {
[377]661 threaduse++;
662 if (threaduse == 1)
[2]663 WinSendMsg(hwndLED,
664 SM_SETHANDLE,
665 MPFROMLONG(hbmLEDon),
666 MPVOID);
[377]667 }
668 else {
669 threaduse--;
670 if(threaduse <= 0) {
671 threaduse = 0;
[2]672 WinSendMsg(hwndLED,
673 SM_SETHANDLE,
674 MPFROMLONG(hbmLEDoff),
675 MPVOID);
[377]676 }
677 }
[2]678 ltoa(threaduse,
679 ts,
680 10);
681 WinSetWindowText(hwndLEDHdr,
682 ts);
[377]683 }
684 return 0;
[2]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);
[348]704 s = xstrdup(lastfile,pszSrcFile,__LINE__);
[2]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
[246]719 case UM_BUILDDRIVEBAR:
720 BuildDriveBarButtons(WinWindowFromID(WinQueryWindow(hwnd,QW_PARENT),
[2]721 MAIN_DRIVES));
722 return 0;
723 }
724 return WinDefWindowProc(hwnd,msg,mp1,mp2);
725}
726
727
[377]728MRESULT EXPENTRY CommonTextButton (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
729{
[2]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;
[348]741
[2]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
[377]843MRESULT EXPENTRY CommonCnrProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
844{
[2]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,
[377]930 BOOL noautotile,char *directory)
931{
[2]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.