home *** CD-ROM | disk | FTP | other *** search
- /**********************************************************************
- *
- * CustomGetFile Dialog Demo
- *
- * EventHandler.c
- *
- * Written in CodeWarrior Gold 5.5
- * August 31, 1995
- *
- * Copyright © 1995 Carl B. Constantine
- * Some portions Copyright © 1995 MetroWerks, Inc.
- * Some portions Copyright © 1995 Apple Computer, Inc.
- *
- **********************************************************************/
-
- /*------------------------------------------------------------------
- #
- # File History
- #
- # Date Description of Change
- # ---- ---------------------
- # Aug 31/93 — Original creation of file
- #
- #
- #
- -------------------------------------------------------------------*/
-
-
- /*============================ Include Files ============================*/
-
-
- #include "AppConstants.h"
- #include "AppGlobals.h"
- #include "EventHandler.h"
- #include "ErrUtils.h"
-
-
- /*======================== Procedures & Functions =======================*/
-
- void EventLoop( void )
- {
- EventRecord event;
- Boolean gotEvent;
- long sleepTime;
-
- gCursorRgn = NewRgn(); // Pass WNE an empty region 1st time through loop
-
- while ( !gQuitting )
- {
- sleepTime = GetDblTime(); // if from window has TE record
- if ( gInBackground ) sleepTime = -1L; // set approp. background value
-
- gotEvent = WaitNextEvent( everyEvent, &event, sleepTime, gCursorRgn );
-
- if ( gotEvent )
- {
- DoEvent( &event );
- }
- else
- {
- // Don't do anything. You should put some sort of Idle function here.
- }
- } // end while loop
-
- }
-
-
- /*----------------------------------------------------------------------------*/
-
- void DoEvent( EventRecord *event )
- {
- short myError;
- short windowPart;
- WindowPtr window=NIL;
- char key;
- Point mountPoint;
-
- switch ( event->what )
- {
- case mouseDown:
- windowPart = FindWindow( event->where, &window );
- switch ( windowPart )
- {
- case inSysWindow: /* let the system handle the mouseDown */
- SystemClick( event, window );
- break;
- case inMenuBar:
- AdjustMenus(); /* prepare menu items first */
- DoMenuCommand( MenuSelect( event->where ) );
- break;
- case inContent:
- /* No contentRgn to click in */
- break;
- case inDrag:
- /* No DragRgn to drag */
- break;
- }
- break; /* MouseDown */
- case keyDown:
- case autoKey: /* Check for menukey equivalents */
- DoKeyPress( window, event );
- break;
- case activateEvt:
- break;
- case updateEvt:
- break;
- case diskEvt: /* Allow user to format disks if need be */
- if ( HiWrd(event->message) != noErr )
- {
- mountPoint.h = kDILeft;
- mountPoint.v = kDITop;
- myError = DIBadMount( mountPoint, event->message );
- }
- break;
- case osEvt:
- DoOSEvent( event );
- break;
- }
-
- } /* doEvent */
-
- /*----------------------------------------------------------------------------*/
-
- /* Handle Suspend & Resume Events */
-
- void DoOSEvent( EventRecord *event )
- {
- switch ( (event->message >> 24) &0x0FF )
- {
- case suspendResumeMessage:
- if ( ( event->message & resumeFlag ) == 0) /* suspend */
- {
- gInBackground = true;
- ZeroScrap();
- TEToScrap();
- // Don't need to deactiveate anything as we don't have any windows
- }
- else /* resuming */
- {
- gInBackground = false;
- if ( event->message & convertClipboardFlag)
- TEFromScrap();
- // Don't need to activeate anything as we don't have any windows
- }
- break;
- case mouseMovedMessage:
- DisposeRgn( gCursorRgn ); /* get rid of old region */
- gCursorRgn = NewRgn();
- SetRectRgn( gCursorRgn, -32768, -32768, 32766, 32766 );
- break;
- } /* suspend/Resume */
- }
-
- /*----------------------------------------------------------------------------*/
-
- void DoMenuCommand( long menuResult )
- {
- short menuID; /* ID of selected menu */
- short menuItem; /* item number in selected menu */
- short itemHit;
- Str255 daName;
- short daRefNum;
-
- menuID = menuResult >> 16;
- menuItem = menuResult & 0x0000ffff;
-
- switch ( menuID )
- {
- case mApple:
- switch ( menuItem )
- {
- case iAbout: /* display the About box */
- itemHit = Alert( rAboutBox, 0L );
- break;
- default:
- GetItem( GetMHandle( mApple ), menuItem, daName );
- daRefNum = OpenDeskAcc( daName );
- break;
- }
- break;
- case mFile:
- switch ( menuItem )
- {
- case iQuit:
- gQuitting = true;
- break;
- }
- break;
- case mEdit:
- break;
- }
- HiliteMenu( 0 );
-
- } /* DoMenuCommand */
-
-
- /*----------------------------------------------------------------------------*/
-
- void AdjustMenus( void )
- {
- WindowPtr wp = FrontWindow();
- MenuHandle fileMenu, editMenu;
-
- if ( !wp )
- {
- fileMenu = GetMHandle( mFile );
- editMenu = GetMHandle( mEdit );
-
- DisableItem( editMenu, iUndo );
- DisableItem( editMenu, iCut );
- DisableItem( editMenu, iCopy );
- DisableItem( editMenu, iPaste );
- DisableItem( editMenu, iClear );
-
- EnableItem( fileMenu, iQuit );
- }
-
- }
-
- /*----------------------------------------------------------------------------*/
-
- /* Handle keyDown events in windows & Dialogs */
-
- void DoKeyPress( WindowPtr wp, EventRecord *event )
- {
- char key;
-
- key = event->message & charCodeMask;
- if ( event->modifiers & cmdKey)
- { /* is command key down? */
- if ( event->what == keyDown )
- {
- AdjustMenus(); /* prepare menu items first */
- DoMenuCommand( MenuKey( key ) );
- }
- }
-
- }
-
- /*----------------------------------------------------------------------------*/
- /* All this code comes directly from Tom Thompson's book "Power Macintosh
- Programmers Starter Kit"
- */
-
- /* Build high-level event dispatch table and add our handlers to it. Must use static */
- /* declaration so that the dispatch table has file scope. */
- Boolean Init_AE_Events( void )
- {
- OSErr err;
- short i;
- static AEinstalls HandlersToInstall[] = /* The 4 required Apple Events */
- {
- {kCoreEventClass, kAEOpenApplication, Core_AE_Open_Handler},
- {kCoreEventClass, kAEOpenDocuments, Core_AE_OpenDoc_Handler},
- {kCoreEventClass, kAEQuitApplication, Core_AE_Quit_Handler},
- {kCoreEventClass, kAEPrintDocuments, Core_AE_Print_Handler},
- };
-
- for ( i = 0; i < LAST_HANDLER; i++ )
- { /* Install each handler in application dispatch table, with a routine descriptor */
- err = AEInstallEventHandler( HandlersToInstall[i].theClass, HandlersToInstall[i].theEvent,
- NewAEEventHandlerProc( HandlersToInstall[i].theProc ), 0, FALSE );
- if (err) /* If there was a problem, bail out */
- {
- GenAlert( errAEHandler );
- return FALSE;
- } /* end if */
- } /* end for */
-
- return TRUE;
- } /* end Init_AE_Events() */
-
- /* High-level open application event. */
- pascal OSErr Core_AE_Open_Handler( AppleEvent *messagein, AppleEvent *reply, long refIn )
- {
- return( noErr );
- } /* end Core_AE_Open_Handler() */
-
- /* High-level open document event */
- pascal OSErr Core_AE_OpenDoc_Handler( AppleEvent *messagein, AppleEvent *reply, long refIn )
- {
-
- return( noErr );
-
- } /* end Core_AE_OpenDoc_Handler() */
-
- /* High-level print event */
- pascal OSErr Core_AE_Print_Handler( AppleEvent *messagein, AppleEvent *reply, long refIn )
- {
- return errAEEventNotHandled; /* No printing done here, so no print handler */
- } /* end Core_AE_Print_Handler() */
-
- /* High-level quit event */
- pascal OSErr Core_AE_Quit_Handler( AppleEvent *messagein, AppleEvent *reply, long refIn )
- {
- gQuitting = TRUE; /* Tell main event loop we want to stop */
- return noErr;
- } /* Core_AE_Quit_Handler() */
-
- void Do_High_Level( EventRecord *AERecord )
- {
- AEProcessAppleEvent( AERecord );
- } /* end Do_High_Level() */
-
- /*============================= End of File ==============================*/