Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
NotificationMon.ƒ/Source/Event.c
/* |
This file contains all the code needed to handle dispatching events. |
Any files that need to access the globals should include the Event.h file. |
*/ |
#include "Event.h" |
#include <AppleEvents.h> |
#include "NotificationMon.h" |
Boolean Done = false; |
Boolean KeyPressed = false; |
char KeyValue = 0; |
Boolean InBackGround = false; |
void DoCloseWindow(EventRecord *Event, WindowPtr theWindow) |
{ |
if(TrackGoAway(theWindow,Event->where)) |
{ |
CloseWindow(theWindow); |
} |
} |
void DoClickInContent(EventRecord *Event, WindowPtr theWindow) |
{ |
int part; |
ControlHandle ctlh; |
Point pt; |
GrafPtr saveport; |
Rect frame; |
if(theWindow!=FrontWindow()) |
{ |
SelectWindow(theWindow); |
} |
else |
{ |
GetPort(&saveport); |
SetPort(theWindow); |
if(IsNotificationDoc(theWindow)) |
NotificationClick(theWindow, Event); |
SetPort(saveport); |
} |
} |
void DoDragWindow(register EventRecord *Event, register WindowPtr theWindow) |
{ |
DragWindow(theWindow,Event->where,&screenBits.bounds); |
} |
void DoGrowWindow(register EventRecord *Event, register WindowPtr theWindow) |
{ |
long newSize; |
int newHeight,newWidth; |
GrafPtr savePort; |
if(IsNotificationDoc(theWindow)) |
SizeNotificationWindow(theWindow,Event); |
else { |
GetPort(&savePort); |
SetPort(theWindow); |
newSize = GrowWindow(theWindow,Event->where,&screenBits.bounds); |
newHeight = HiWord(newSize); |
newWidth = LoWord(newSize); |
SizeWindow(theWindow,newWidth,newHeight,true); |
SetPort(savePort); |
} |
} |
DoZoom(register EventRecord *Event, register WindowPtr theWindow, int part) |
{ |
GrafPtr savePort; |
GetPort(&savePort); |
SetPort(theWindow); |
if(TrackBox(theWindow,Event->where,part)) |
{ |
if(IsNotificationDoc(theWindow)) |
ZoomNotificationWindow(theWindow, part); |
else |
ZoomWindow(theWindow,part,true); |
} |
SetPort(savePort); |
} |
void DoMenu(register long msel) |
{ |
int item,menu; |
item = LoWord(msel); |
menu = HiWord(msel); |
MenuDispatch(menu, item); |
HiliteMenu(0); /* remove menu title hiliting */ |
} |
DoKey(EventRecord *Event) |
{ |
char c; |
c = (char)Event->message & charCodeMask; |
if((Event->modifiers & cmdKey) == FALSE) |
{ |
KeyPressed = true; |
KeyValue = c; |
} |
else |
{ |
DoMenu(MenuKey(Event->message & charCodeMask)); |
} |
} |
void DrawVerticalGrowIcon(WindowPtr theWindow) |
{ |
Rect clip; |
clip = theWindow->portRect; |
clip.left = clip.right - 15; |
clip.top = clip.bottom - 15; |
ClipRect(&clip); |
DrawGrowIcon(theWindow); |
ClipRect(&theWindow->portRect); |
} |
void DoUpdate(register EventRecord *Event) |
{ |
WindowPtr theWindow; |
GrafPtr savePort; |
GetPort(&savePort); /* save current port */ |
theWindow=(WindowPtr)Event->message; /* get windowPtr from event msg */ |
SetPort(theWindow); |
ClipRect(&theWindow->portRect); |
BeginUpdate(theWindow); |
EraseRect(&theWindow->portRect); /* erase content region */ |
DrawControls(theWindow); /* draw any controls in the window */ |
DrawVerticalGrowIcon(theWindow); |
DrawImage(theWindow); /* sample routine to draw contents */ |
EndUpdate(theWindow); |
SetPort(savePort); |
} |
void DoActivate(EventRecord *Event) |
{ |
if(Event->modifiers & activeFlag) |
if(IsNotificationDoc((WindowPeek)Event->message)) |
ActivateNotificationWindow(Event->message); |
else |
if(IsNotificationDoc((WindowPeek)Event->message)) |
DeactivateNotificationWindow(Event->message); |
} |
void DoMFinder(register EventRecord *Event) |
{ |
if( (Event->message >> 24) == suspendResumeMessage) { |
InBackGround = !(Event->message & resumeFlag); |
NotificationDocLayerSwitch(); |
} |
} |
void DoClick(EventRecord *Event) |
{ |
WindowPtr theWindow; |
switch(FindWindow(Event->where, &theWindow)) |
{ |
case inDesk: break; |
case inMenuBar: DoMenu(MenuSelect(Event->where)); |
break; |
case inSysWindow: SystemClick(Event,theWindow); |
break; |
case inContent: DoClickInContent(Event,theWindow); |
break; |
case inDrag: DoDragWindow(Event,theWindow); |
break; |
case inGrow: DoGrowWindow(Event,theWindow); |
break; |
case inGoAway: DoCloseWindow(Event,theWindow); |
break; |
case inZoomIn: DoZoom(Event,theWindow,inZoomIn); |
break; |
case inZoomOut: DoZoom(Event,theWindow,inZoomOut); |
break; |
} |
} |
void MainEvent(void) |
{ |
EventRecord Event; |
Boolean anEvent; |
KeyPressed = false; /* set to false every time through */ |
anEvent = WaitNextEvent(everyEvent,&Event,GetSleepTime(),nil); |
if(anEvent) |
{ |
switch(Event.what) |
{ |
case nullEvent: CheckNotifications(); break; |
case mouseDown: DoClick(&Event); break; |
case mouseUp: break; |
case keyDown: DoKey(&Event); break; |
case keyUp: break; |
case autoKey: DoKey(&Event); break; |
case updateEvt: DoUpdate(&Event); break; |
case diskEvt: break; |
case activateEvt: DoActivate(&Event); break; |
case networkEvt: break; |
case driverEvt: break; |
case app1Evt: break; |
case app2Evt: break; |
case app3Evt: break; |
case osEvt: DoMFinder(&Event); break; |
case kHighLevelEvent: DoHighLevelEvent(&Event); break; |
} |
} |
else |
CheckNotifications(); |
} |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14