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/NotificationPrefs.c
#include "NotificationMon.h" |
#define PrefsID 128 |
#define PrefsOK 1 |
#define PrefsCAN 2 |
#define PrefsFlash 6 |
#define PrefsHide 5 |
#define PrefsBGSleep 3 |
#define PrefsFGSleep 4 |
#define PrefsHilite 9 |
#define ENTER_KEY 0x03 |
#define TAB_KEY 0x09 |
#define BACKSPACE_KEY 0x08 |
#define RETURN_KEY 0x0D |
#define ESCAPE_KEY 0x1B |
#define ABORT_KEY '.' |
pascal void HiliteItemProc(WindowPtr wp, short item); |
Boolean IsCursorControlKey(char key) |
{ |
Boolean result = false; |
if ( (key >= 0x28) && (key <= 0x31) ) |
result = true; |
else if(key == TAB_KEY) |
result = true; |
else if(key == BACKSPACE_KEY) |
result = true; |
return result; |
} |
pascal Boolean PrefsFilter(DialogPtr dp, EventRecord *event, short *item) |
{ |
Boolean result = false; |
char key; |
long endTicks; |
Boolean cmdKeyDown; |
if( ! ((event->what == keyDown) || (event->what == autoKey)) ) |
return false; |
key = (char)event->message & charCodeMask; |
cmdKeyDown = (Boolean)((event->modifiers & cmdKey) != false); |
if ( (key == RETURN_KEY) || (key == ENTER_KEY) || |
(cmdKeyDown && ((key == 'O') || (key == 'o'))) ) { |
SetDialogCtlHilite(dp,PrefsOK,1); |
Delay(15, &endTicks); |
SetDialogCtlHilite(dp,PrefsOK,0); |
Delay(10, &endTicks); |
result = true; |
*item = PrefsOK; |
} else if((key == ESCAPE_KEY) |
|| ( (cmdKeyDown) |
&& ( (key == '.') |
|| (key == '`') |
|| (key == 'c') || (key == 'C') ))) { |
SetDialogCtlHilite(dp,PrefsCAN,1); |
Delay(15,&endTicks); |
SetDialogCtlHilite(dp,PrefsCAN,0); |
Delay(10,&endTicks); |
result = true; |
*item = PrefsCAN; |
} else if(IsCursorControlKey(key)) { |
result = false; |
} else if( (key < '0') || (key > '9') ) { |
SysBeep(5); |
result = true; |
} |
return result; |
} |
void DoNotificationPrefsDialog(notificationDoc *nmd) |
{ |
DialogPtr dp; |
short itemHit; |
dp = GetNewDialog(PrefsID,nil,(WindowPtr)-1); |
SetDialogCtlValue(dp,PrefsHide,nmd->prefs.hideWindowInBackground); |
SetDialogCtlValue(dp,PrefsFlash,nmd->prefs.notifyNewMessage); |
PutNumericItem(dp,PrefsBGSleep,nmd->prefs.backTime); |
PutNumericItem(dp,PrefsFGSleep,nmd->prefs.foreTime); |
SetUserItemProc(dp, PrefsHilite, HiliteItemProc); |
ShowWindow(dp); |
do { |
ModalDialog(PrefsFilter,&itemHit); |
switch(itemHit) { |
case PrefsHide: |
case PrefsFlash: |
SetDialogCtlValue(dp,itemHit, |
!GetDialogCtlValue(dp,itemHit)); |
break; |
} |
} while( (itemHit != PrefsOK) && (itemHit != PrefsCAN)); |
if(itemHit == PrefsOK) { |
nmd->prefs.hideWindowInBackground = GetDialogCtlValue(dp,PrefsHide); |
nmd->prefs.notifyNewMessage = GetDialogCtlValue(dp,PrefsFlash); |
nmd->prefs.backTime = GetNumericItem(dp,PrefsBGSleep); |
nmd->prefs.foreTime = GetNumericItem(dp,PrefsFGSleep); |
} |
DisposDialog(dp); |
} |
void InitNotificationPrefs(notificationDoc *nmd) |
{ |
Handle prefs; |
if(prefs = GetResource('PREF',128)) { |
BlockMove(*prefs,&nmd->prefs,sizeof(prefRec)); |
ReleaseResource(prefs); |
MoveWindow(&nmd->nWin.port, |
nmd->prefs.windowLoc.left, |
nmd->prefs.windowLoc.top, |
false); |
SizeWindow(&nmd->nWin, |
RECT_WIDTH(nmd->prefs.windowLoc), |
RECT_HEIGHT(nmd->prefs.windowLoc), |
false); |
} else { |
nmd->prefs.hideWindowInBackground = false; |
nmd->prefs.notifyNewMessage = true; |
nmd->prefs.backTime = 60 * 15; /* Maybe every 15 seconds we run */ |
nmd->prefs.foreTime = 60 * 5; /* we don't need much time */ |
/* leaving windowloc field uninitialized */ |
} |
} |
void UpdateNotificationPrefs(notificationDoc *nmd) |
{ |
prefRec **prefs; |
short err; |
GetWindowGlobalRect(&nmd->nWin.port, |
&nmd->nWin.port.portRect, |
&nmd->prefs.windowLoc); |
if(prefs = GetResource('PREF',128)) { |
BlockMove(&nmd->prefs,*prefs,sizeof(prefRec)); |
ChangedResource(prefs); |
if(err = ResError()) { |
error("\pChangedResource fail in UpdateNotificationPrefs",err); |
return; |
} |
ReleaseResource(prefs); |
} else { |
prefs = NewHandle(sizeof(prefRec)); |
if(!prefs) { |
error("\pError - update prefs failed.",MemError()); |
return; |
} |
BlockMove(&nmd->prefs,*prefs,sizeof(prefRec)); |
AddResource(prefs,'PREF',128,"\p"); |
if(err = ResError()) { |
error("\pUpdateNotificationPrefs addres fail.",err); |
return; |
} |
ReleaseResource(prefs); |
} |
} |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14