home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-12-12 | 2.2 KB | 105 lines | [TEXT/KAHL] |
- //----------------------------------------------------------------------------------
- // File : movableModal.c
- // Date : April 4, 1994
- // Author : Jim Stout
- // Purpose : Implements movableModal dialogs
- //------------------------------------------------------------------------------------
- #include "movableModal.h"
-
- extern void updateWindow(WindowPtr); // must be in your application code!!
-
- pascal void movableModalDialog(filterProc filter, short *theItem)
- {
- EventRecord theEvent;
- DialogPtr d,thisDialog;
-
- thisDialog = FrontWindow();
-
- for(;;) {
- WaitNextEvent(everyEvent, &theEvent, 20, 0L);
- if(*theItem = preFilterEvent(thisDialog, &theEvent))
- break;
-
- if (filter != nil)
- if (filter(thisDialog, &theEvent, theItem))
- break;
-
- if (IsDialogEvent(&theEvent))
- if (DialogSelect(&theEvent, &d, theItem))
- break;
- }
- }
-
- static short preFilterEvent(DialogPtr d, EventRecord *theEvent)
- {
- short ret=0;
-
- switch (theEvent->what) {
- case mouseDown:
- ret = doMouseDialog(d,theEvent); /* handle drag etc. of dialog */
- break;
- case diskEvt:
- diskEvent(theEvent);
- break;
- case updateEvt:
- if(d != (DialogPtr)theEvent->message)
- updateWindow((WindowPtr)theEvent->message); /* pass update evt back to mainline */
- break;
- }
- return (ret);
- }
-
- static short doMouseDialog(DialogPtr d, EventRecord *theEvent)
- {
- WindowPtr theWindow;
- short partCode, ret=0;
-
- switch (partCode = FindWindow(theEvent->where,&theWindow)) {
- case inDrag:
- if(theWindow == d) {
- DragWindow(d, theEvent->where, &screenBits.bounds);
- theEvent->what = nullEvent;
- }
- break;
-
- case inMenuBar:
- MenuSelect(theEvent->where);
- HiliteMenu(0);
- break;
-
- case inGoAway:
- if (TrackBox (theWindow, theEvent->where, partCode)) {
- ret = cancel;
- theEvent->what = nullEvent;
- }
- break;
-
- /* add code if you need to deal with these mouseDown events╔ */
-
- case inGrow:
- break;
- case inZoomIn:
- case inZoomOut:
- break;
- case inContent:
- break;
- default:
- break;
- }
- return(ret);
- }
-
- extern void diskEvent(EventRecord *theEvent)
- {
- Point diskInitPt;
-
- if (HiWord (theEvent->message) != noErr) {
- diskInitPt.v = 120;
- diskInitPt.h = 100;
- DILoad ();
- (void) DIBadMount (diskInitPt, theEvent->message);
- DIUnload ();
- theEvent->what = nullEvent;
- }
- }
-