/* File: Dialogs.h Contains: Dialog Manager interfaces. Version: Technology: Mac OS 9 Release: QuickTime 6.0.2 Copyright: (c) 1985-2001 by Apple Computer, Inc., all rights reserved Bugs?: For bug reports, consult the following page on the World Wide Web: http://developer.apple.com/bugreporter/ */ #ifndef __DIALOGS__ #define __DIALOGS__ #ifndef __MACTYPES__ #include #endif #ifndef __MIXEDMODE__ #include #endif #ifndef __EVENTS__ #include #endif #ifndef __MACWINDOWS__ #include #endif #ifndef __TEXTEDIT__ #include #endif #ifndef __CONTROLS__ #include #endif #ifndef __MACERRORS__ #include #endif #if PRAGMA_ONCE #pragma once #endif #ifdef __cplusplus extern "C" { #endif #if PRAGMA_IMPORT #pragma import on #endif #if PRAGMA_STRUCT_ALIGN #pragma options align=mac68k #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(push, 2) #elif PRAGMA_STRUCT_PACK #pragma pack(2) #endif enum { /* new, more standard names for dialog item types*/ kControlDialogItem = 4, kButtonDialogItem = kControlDialogItem | 0, kCheckBoxDialogItem = kControlDialogItem | 1, kRadioButtonDialogItem = kControlDialogItem | 2, kResourceControlDialogItem = kControlDialogItem | 3, kStaticTextDialogItem = 8, kEditTextDialogItem = 16, kIconDialogItem = 32, kPictureDialogItem = 64, kUserDialogItem = 0, kItemDisableBit = 128 }; enum { /* old names for dialog item types*/ ctrlItem = 4, btnCtrl = 0, chkCtrl = 1, radCtrl = 2, resCtrl = 3, statText = 8, editText = 16, iconItem = 32, picItem = 64, userItem = 0, itemDisable = 128 }; enum { /* standard dialog item numbers*/ kStdOkItemIndex = 1, kStdCancelItemIndex = 2, /* old names*/ ok = kStdOkItemIndex, cancel = kStdCancelItemIndex }; enum { /* standard icon resource id's */ kStopIcon = 0, kNoteIcon = 1, kCautionIcon = 2, /* old names*/ stopIcon = kStopIcon, noteIcon = kNoteIcon, cautionIcon = kCautionIcon }; #if OLDROUTINENAMES /* These constants lived briefly on ETO 16. They suggest that there is only one index you can use for the OK item, which is not true. You can put the ok item anywhere you want in the DITL. */ enum { kOkItemIndex = 1, kCancelItemIndex = 2 }; #endif /* OLDROUTINENAMES */ /* Dialog Item List Manipulation Constants */ typedef SInt16 DITLMethod; enum { overlayDITL = 0, appendDITLRight = 1, appendDITLBottom = 2 }; typedef SInt16 StageList; /* DialogRef is obsolete. Use DialogPtr instead.*/ typedef DialogPtr DialogRef; #if !OPAQUE_TOOLBOX_STRUCTS struct DialogRecord { WindowRecord window; Handle items; TEHandle textH; SInt16 editField; SInt16 editOpen; SInt16 aDefItem; }; typedef struct DialogRecord DialogRecord; typedef DialogRecord * DialogPeek; #endif /* !OPAQUE_TOOLBOX_STRUCTS */ struct DialogTemplate { Rect boundsRect; SInt16 procID; Boolean visible; Boolean filler1; Boolean goAwayFlag; Boolean filler2; SInt32 refCon; SInt16 itemsID; Str255 title; }; typedef struct DialogTemplate DialogTemplate; typedef DialogTemplate * DialogTPtr; typedef DialogTPtr * DialogTHndl; struct AlertTemplate { Rect boundsRect; SInt16 itemsID; StageList stages; }; typedef struct AlertTemplate AlertTemplate; typedef AlertTemplate * AlertTPtr; typedef AlertTPtr * AlertTHndl; /* new type abstractions for the dialog manager */ typedef SInt16 DialogItemIndexZeroBased; typedef SInt16 DialogItemIndex; typedef SInt16 DialogItemType; /* dialog manager callbacks */ typedef CALLBACK_API( void , SoundProcPtr )(SInt16 soundNumber); typedef CALLBACK_API( Boolean , ModalFilterProcPtr )(DialogPtr theDialog, EventRecord *theEvent, DialogItemIndex *itemHit); typedef CALLBACK_API( void , UserItemProcPtr )(DialogPtr theDialog, DialogItemIndex itemNo); typedef STACK_UPP_TYPE(SoundProcPtr) SoundUPP; typedef STACK_UPP_TYPE(ModalFilterProcPtr) ModalFilterUPP; typedef STACK_UPP_TYPE(UserItemProcPtr) UserItemUPP; #if OPAQUE_UPP_TYPES #if CALL_NOT_IN_CARBON EXTERN_API(SoundUPP) NewSoundUPP (SoundProcPtr userRoutine); #endif /* CALL_NOT_IN_CARBON */ EXTERN_API(ModalFilterUPP) NewModalFilterUPP (ModalFilterProcPtr userRoutine); EXTERN_API(UserItemUPP) NewUserItemUPP (UserItemProcPtr userRoutine); #if CALL_NOT_IN_CARBON EXTERN_API(void) DisposeSoundUPP (SoundUPP userUPP); #endif /* CALL_NOT_IN_CARBON */ EXTERN_API(void) DisposeModalFilterUPP (ModalFilterUPP userUPP); EXTERN_API(void) DisposeUserItemUPP (UserItemUPP userUPP); #if CALL_NOT_IN_CARBON EXTERN_API(void) InvokeSoundUPP (SInt16 soundNumber, SoundUPP userUPP); #endif /* CALL_NOT_IN_CARBON */ EXTERN_API(Boolean) InvokeModalFilterUPP (DialogPtr theDialog, EventRecord * theEvent, DialogItemIndex * itemHit, ModalFilterUPP userUPP); EXTERN_API(void) InvokeUserItemUPP (DialogPtr theDialog, DialogItemIndex itemNo, UserItemUPP userUPP); #else enum { uppSoundProcInfo = 0x00000080 }; /* pascal no_return_value Func(2_bytes) */ enum { uppModalFilterProcInfo = 0x00000FD0 }; /* pascal 1_byte Func(4_bytes, 4_bytes, 4_bytes) */ enum { uppUserItemProcInfo = 0x000002C0 }; /* pascal no_return_value Func(4_bytes, 2_bytes) */ #define NewSoundUPP(userRoutine) (SoundUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppSoundProcInfo, GetCurrentArchitecture()) #define NewModalFilterUPP(userRoutine) (ModalFilterUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppModalFilterProcInfo, GetCurrentArchitecture()) #define NewUserItemUPP(userRoutine) (UserItemUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppUserItemProcInfo, GetCurrentArchitecture()) #define DisposeSoundUPP(userUPP) DisposeRoutineDescriptor(userUPP) #define DisposeModalFilterUPP(userUPP) DisposeRoutineDescriptor(userUPP) #define DisposeUserItemUPP(userUPP) DisposeRoutineDescriptor(userUPP) #define InvokeSoundUPP(soundNumber, userUPP) CALL_ONE_PARAMETER_UPP((userUPP), uppSoundProcInfo, (soundNumber)) #define InvokeModalFilterUPP(theDialog, theEvent, itemHit, userUPP) (Boolean)CALL_THREE_PARAMETER_UPP((userUPP), uppModalFilterProcInfo, (theDialog), (theEvent), (itemHit)) #define InvokeUserItemUPP(theDialog, itemNo, userUPP) CALL_TWO_PARAMETER_UPP((userUPP), uppUserItemProcInfo, (theDialog), (itemNo)) #endif /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */ #define NewSoundProc(userRoutine) NewSoundUPP(userRoutine) #define NewModalFilterProc(userRoutine) NewModalFilterUPP(userRoutine) #define NewUserItemProc(userRoutine) NewUserItemUPP(userRoutine) #define CallSoundProc(userRoutine, soundNumber) InvokeSoundUPP(soundNumber, userRoutine) #define CallModalFilterProc(userRoutine, theDialog, theEvent, itemHit) InvokeModalFilterUPP(theDialog, theEvent, itemHit, userRoutine) #define CallUserItemProc(userRoutine, theDialog, itemNo) InvokeUserItemUPP(theDialog, itemNo, userRoutine) #if !TARGET_OS_MAC /* QuickTime 3.0 */ typedef CALLBACK_API_C( void , QTModelessCallbackProcPtr )(EventRecord *theEvent, DialogPtr theDialog, DialogItemIndex itemHit); #if CALL_NOT_IN_CARBON EXTERN_API( void ) SetModelessDialogCallbackProc (DialogPtr theDialog, QTModelessCallbackProcPtr callbackProc); #endif /* CALL_NOT_IN_CARBON */ typedef QTModelessCallbackProcPtr QTModelessCallbackUPP; #if CALL_NOT_IN_CARBON EXTERN_API( OSErr ) GetDialogControlNotificationProc (void * theProc); EXTERN_API( void ) SetDialogMovableModal (DialogPtr theDialog); EXTERN_API( void *) GetDialogParent (DialogPtr theDialog); #endif /* CALL_NOT_IN_CARBON */ #endif /* !TARGET_OS_MAC */ /* --------------------------------------------------------------------------------------------------------- o Following types are valid with Appearance 1.0 and later --------------------------------------------------------------------------------------------------------- */ enum { /* Alert types to pass into StandardAlert */ kAlertStopAlert = 0, kAlertNoteAlert = 1, kAlertCautionAlert = 2, kAlertPlainAlert = 3 }; typedef SInt16 AlertType; enum { kAlertDefaultOKText = -1, /* "OK"*/ kAlertDefaultCancelText = -1, /* "Cancel"*/ kAlertDefaultOtherText = -1 /* "Don't Save"*/ }; /* StandardAlert alert button numbers */ enum { kAlertStdAlertOKButton = 1, kAlertStdAlertCancelButton = 2, kAlertStdAlertOtherButton = 3, kAlertStdAlertHelpButton = 4 }; enum { /* Dialog Flags for use in NewFeaturesDialog or dlgx resource */ kDialogFlagsUseThemeBackground = (1 << 0), kDialogFlagsUseControlHierarchy = (1 << 1), kDialogFlagsHandleMovableModal = (1 << 2), kDialogFlagsUseThemeControls = (1 << 3) }; enum { /* Alert Flags for use in alrx resource */ kAlertFlagsUseThemeBackground = (1 << 0), kAlertFlagsUseControlHierarchy = (1 << 1), kAlertFlagsAlertIsMovable = (1 << 2), kAlertFlagsUseThemeControls = (1 << 3) }; /* For dftb resource */ enum { kDialogFontNoFontStyle = 0, kDialogFontUseFontMask = 0x0001, kDialogFontUseFaceMask = 0x0002, kDialogFontUseSizeMask = 0x0004, kDialogFontUseForeColorMask = 0x0008, kDialogFontUseBackColorMask = 0x0010, kDialogFontUseModeMask = 0x0020, kDialogFontUseJustMask = 0x0040, kDialogFontUseAllMask = 0x00FF, kDialogFontAddFontSizeMask = 0x0100, kDialogFontUseFontNameMask = 0x0200, kDialogFontAddToMetaFontMask = 0x0400 }; struct AlertStdAlertParamRec { Boolean movable; /* Make alert movable modal */ Boolean helpButton; /* Is there a help button? */ ModalFilterUPP filterProc; /* Event filter */ ConstStringPtr defaultText; /* Text for button in OK position */ ConstStringPtr cancelText; /* Text for button in cancel position */ ConstStringPtr otherText; /* Text for button in left position */ SInt16 defaultButton; /* Which button behaves as the default */ SInt16 cancelButton; /* Which one behaves as cancel (can be 0) */ UInt16 position; /* Position (kWindowDefaultPosition in this case */ /* equals kWindowAlertPositionParentWindowScreen) */ }; typedef struct AlertStdAlertParamRec AlertStdAlertParamRec; typedef AlertStdAlertParamRec * AlertStdAlertParamPtr; /* --- end Appearance 1.0 or later stuff*/ /* NOTE: Code running under MultiFinder or System 7.0 or newer should always pass NULL to InitDialogs. */ #if CALL_NOT_IN_CARBON EXTERN_API( void ) InitDialogs (void * ignored) ONEWORDINLINE(0xA97B); EXTERN_API( void ) ErrorSound (SoundUPP soundProc) ONEWORDINLINE(0xA98C); #endif /* CALL_NOT_IN_CARBON */ EXTERN_API( DialogPtr ) NewDialog (void * dStorage, const Rect * boundsRect, ConstStr255Param title, Boolean visible, SInt16 procID, WindowPtr behind, Boolean goAwayFlag, SInt32 refCon, Handle items) ONEWORDINLINE(0xA97D); EXTERN_API( DialogPtr ) GetNewDialog (SInt16 dialogID, void * dStorage, WindowPtr behind) ONEWORDINLINE(0xA97C); EXTERN_API( DialogPtr ) NewColorDialog (void * dStorage, const Rect * boundsRect, ConstStr255Param title, Boolean visible, SInt16 procID, WindowPtr behind, Boolean goAwayFlag, SInt32 refCon, Handle items) ONEWORDINLINE(0xAA4B); #if CALL_NOT_IN_CARBON EXTERN_API( void ) CloseDialog (DialogPtr theDialog) ONEWORDINLINE(0xA982); #endif /* CALL_NOT_IN_CARBON */ EXTERN_API( void ) DisposeDialog (DialogPtr theDialog) ONEWORDINLINE(0xA983); EXTERN_API( void ) ModalDialog (ModalFilterUPP modalFilter, DialogItemIndex * itemHit) ONEWORDINLINE(0xA991); EXTERN_API( Boolean ) IsDialogEvent (const EventRecord * theEvent) ONEWORDINLINE(0xA97F); EXTERN_API( Boolean ) DialogSelect (const EventRecord * theEvent, DialogPtr * theDialog, DialogItemIndex * itemHit) ONEWORDINLINE(0xA980); EXTERN_API( void ) DrawDialog (DialogPtr theDialog) ONEWORDINLINE(0xA981); EXTERN_API( void ) UpdateDialog (DialogPtr theDialog, RgnHandle updateRgn) ONEWORDINLINE(0xA978); EXTERN_API( void ) HideDialogItem (DialogPtr theDialog, DialogItemIndex itemNo) ONEWORDINLINE(0xA827); EXTERN_API( void ) ShowDialogItem (DialogPtr theDialog, DialogItemIndex itemNo) ONEWORDINLINE(0xA828); EXTERN_API( DialogItemIndexZeroBased ) FindDialogItem (DialogPtr theDialog, Point thePt) ONEWORDINLINE(0xA984); EXTERN_API( void ) DialogCut (DialogPtr theDialog); EXTERN_API( void ) DialogPaste (DialogPtr theDialog); EXTERN_API( void ) DialogCopy (DialogPtr theDialog); EXTERN_API( void ) DialogDelete (DialogPtr theDialog); EXTERN_API( DialogItemIndex ) Alert (SInt16 alertID, ModalFilterUPP modalFilter) ONEWORDINLINE(0xA985); EXTERN_API( DialogItemIndex ) StopAlert (SInt16 alertID, ModalFilterUPP modalFilter) ONEWORDINLINE(0xA986); EXTERN_API( DialogItemIndex ) NoteAlert (SInt16 alertID, ModalFilterUPP modalFilter) ONEWORDINLINE(0xA987); EXTERN_API( DialogItemIndex ) CautionAlert (SInt16 alertID, ModalFilterUPP modalFilter) ONEWORDINLINE(0xA988); EXTERN_API( void ) GetDialogItem (DialogPtr theDialog, DialogItemIndex itemNo, DialogItemType * itemType, Handle * item, Rect * box) ONEWORDINLINE(0xA98D); EXTERN_API( void ) SetDialogItem (DialogPtr theDialog, DialogItemIndex itemNo, DialogItemType itemType, Handle item, const Rect * box) ONEWORDINLINE(0xA98E); EXTERN_API( void ) ParamText (ConstStr255Param param0, ConstStr255Param param1, ConstStr255Param param2, ConstStr255Param param3) ONEWORDINLINE(0xA98B); EXTERN_API( void ) SelectDialogItemText (DialogPtr theDialog, DialogItemIndex itemNo, SInt16 strtSel, SInt16 endSel) ONEWORDINLINE(0xA97E); EXTERN_API( void ) GetDialogItemText (Handle item, Str255 text) ONEWORDINLINE(0xA990); EXTERN_API( void ) SetDialogItemText (Handle item, ConstStr255Param text) ONEWORDINLINE(0xA98F); EXTERN_API( SInt16 ) GetAlertStage (void) TWOWORDINLINE(0x3EB8, 0x0A9A); EXTERN_API( void ) SetDialogFont (SInt16 fontNum) TWOWORDINLINE(0x31DF, 0x0AFA); EXTERN_API( void ) ResetAlertStage (void) TWOWORDINLINE(0x4278, 0x0A9A); /* APIs in Carbon*/ EXTERN_API( void ) GetParamText (StringPtr param0, StringPtr param1, StringPtr param2, StringPtr param3); #if CALL_NOT_IN_CARBON EXTERN_API_C( DialogPtr ) newdialog (void * dStorage, const Rect * boundsRect, const char * title, Boolean visible, SInt16 procID, WindowPtr behind, Boolean goAwayFlag, SInt32 refCon, Handle items); EXTERN_API_C( DialogPtr ) newcolordialog (void * dStorage, const Rect * boundsRect, const char * title, Boolean visible, SInt16 procID, WindowPtr behind, Boolean goAwayFlag, SInt32 refCon, Handle items); EXTERN_API_C( void ) paramtext (const char * param0, const char * param1, const char * param2, const char * param3); EXTERN_API_C( void ) getdialogitemtext (Handle item, char * text); EXTERN_API_C( void ) setdialogitemtext (Handle item, const char * text); EXTERN_API_C( DialogItemIndexZeroBased ) finddialogitem (DialogPtr theDialog, Point * thePt); #endif /* CALL_NOT_IN_CARBON */ EXTERN_API( void ) AppendDITL (DialogPtr theDialog, Handle theHandle, DITLMethod method); EXTERN_API( DialogItemIndex ) CountDITL (DialogPtr theDialog); EXTERN_API( void ) ShortenDITL (DialogPtr theDialog, DialogItemIndex numberItems); EXTERN_API( OSStatus ) InsertDialogItem (DialogPtr theDialog, DialogItemIndex afterItem, DialogItemType itemType, Handle itemHandle, const Rect * box); EXTERN_API( OSStatus ) RemoveDialogItems (DialogPtr theDialog, DialogItemIndex itemNo, DialogItemIndex amountToRemove, Boolean disposeItemData); EXTERN_API( Boolean ) StdFilterProc (DialogPtr theDialog, EventRecord * event, DialogItemIndex * itemHit); EXTERN_API( OSErr ) GetStdFilterProc (ModalFilterUPP * theProc) THREEWORDINLINE(0x303C, 0x0203, 0xAA68); EXTERN_API( OSErr ) SetDialogDefaultItem (DialogPtr theDialog, DialogItemIndex newItem) THREEWORDINLINE(0x303C, 0x0304, 0xAA68); EXTERN_API( OSErr ) SetDialogCancelItem (DialogPtr theDialog, DialogItemIndex newItem) THREEWORDINLINE(0x303C, 0x0305, 0xAA68); EXTERN_API( OSErr ) SetDialogTracksCursor (DialogPtr theDialog, Boolean tracks) THREEWORDINLINE(0x303C, 0x0306, 0xAA68); /* --------------------------------------------------------------------------------------------------------- o Appearance Dialog Routines (available only with Appearance 1.0 and later) --------------------------------------------------------------------------------------------------------- */ EXTERN_API( DialogPtr ) NewFeaturesDialog (void * inStorage, const Rect * inBoundsRect, ConstStr255Param inTitle, Boolean inIsVisible, SInt16 inProcID, WindowPtr inBehind, Boolean inGoAwayFlag, SInt32 inRefCon, Handle inItemListHandle, UInt32 inFlags) THREEWORDINLINE(0x303C, 0x110C, 0xAA68); EXTERN_API( OSErr ) AutoSizeDialog (DialogPtr inDialog) THREEWORDINLINE(0x303C, 0x020D, 0xAA68); /* Regarding StandardAlert and constness: Even though the inAlertParam parameter is marked const here, there was a chance Dialog Manager would modify it on versions of Mac OS prior to 9. */ EXTERN_API( OSErr ) StandardAlert (AlertType inAlertType, ConstStr255Param inError, ConstStr255Param inExplanation, const AlertStdAlertParamRec * inAlertParam, SInt16 * outItemHit) THREEWORDINLINE(0x303C, 0x090E, 0xAA68); EXTERN_API( OSErr ) GetDialogItemAsControl (DialogPtr inDialog, SInt16 inItemNo, ControlHandle * outControl) THREEWORDINLINE(0x303C, 0x050F, 0xAA68); EXTERN_API( OSErr ) MoveDialogItem (DialogPtr inDialog, SInt16 inItemNo, SInt16 inHoriz, SInt16 inVert) THREEWORDINLINE(0x303C, 0x0510, 0xAA68); EXTERN_API( OSErr ) SizeDialogItem (DialogPtr inDialog, SInt16 inItemNo, SInt16 inWidth, SInt16 inHeight) THREEWORDINLINE(0x303C, 0x0511, 0xAA68); EXTERN_API( OSErr ) AppendDialogItemList (DialogPtr dialog, SInt16 ditlID, DITLMethod method) THREEWORDINLINE(0x303C, 0x0412, 0xAA68); /* --------------------------------------------------------------------------------------------------------- o Dialog Routines available only with Appearance 1.1 and later --------------------------------------------------------------------------------------------------------- */ EXTERN_API( OSStatus ) SetDialogTimeout (DialogPtr inDialog, SInt16 inButtonToPress, UInt32 inSecondsToWait); EXTERN_API( OSStatus ) GetDialogTimeout (DialogPtr inDialog, SInt16 * outButtonToPress, UInt32 * outSecondsToWait, UInt32 * outSecondsRemaining); EXTERN_API( OSStatus ) SetModalDialogEventMask (DialogPtr inDialog, EventMask inMask); EXTERN_API( OSStatus ) GetModalDialogEventMask (DialogPtr inDialog, EventMask * outMask); #if OLDROUTINENAMES #define DisposDialog(theDialog) DisposeDialog(theDialog) #define UpdtDialog(theDialog, updateRgn) UpdateDialog(theDialog, updateRgn) #define GetDItem(theDialog, itemNo, itemType, item, box) GetDialogItem(theDialog, itemNo, itemType, item, box) #define SetDItem(theDialog, itemNo, itemType, item, box) SetDialogItem(theDialog, itemNo, itemType, item, box) #define HideDItem(theDialog, itemNo) HideDialogItem(theDialog, itemNo) #define ShowDItem(theDialog, itemNo) ShowDialogItem(theDialog, itemNo) #define SelIText(theDialog, itemNo, strtSel, endSel) SelectDialogItemText(theDialog, itemNo, strtSel, endSel) #define GetIText(item, text) GetDialogItemText(item, text) #define SetIText(item, text) SetDialogItemText(item, text) #define FindDItem(theDialog, thePt) FindDialogItem(theDialog, thePt) #define NewCDialog(dStorage, boundsRect, title, visible, procID, behind, goAwayFlag, refCon, items) \ NewColorDialog(dStorage, boundsRect, title, visible, procID, behind, goAwayFlag, refCon, items) #define GetAlrtStage() GetAlertStage() #define ResetAlrtStage() ResetAlertStage() #define DlgCut(theDialog) DialogCut(theDialog) #define DlgPaste(theDialog) DialogPaste(theDialog) #define DlgCopy(theDialog) DialogCopy(theDialog) #define DlgDelete(theDialog) DialogDelete(theDialog) #define SetDAFont(fontNum) SetDialogFont(fontNum) #if CGLUESUPPORTED #define newcdialog(dStorage, boundsRect, title, visible, procID, behind, goAwayFlag, refCon, items) \ newcolordialog(dStorage, boundsRect, title, visible, procID, behind, goAwayFlag, refCon, items) #define getitext(item, text) getdialogitemtext(item, text) #define setitext(item, text) setdialogitemtext(item, text) #define findditem(theDialog, thePt) finddialogitem(theDialog, thePt) #endif #endif /* OLDROUTINENAMES */ /* ***************************************************************************** * * * The conditional STRICT_DIALOGS has been removed from this interface file. * * The accessor macros to a DialogRecord are no longer necessary. * * * * All *Ref Types have reverted to their original Handle and Ptr Types. * * * ***************************************************************************** Details: The original purpose of the STRICT_ conditionals and accessor macros was to help ease the transition to Copland. Shared data structures are difficult to coordinate in a preemptive multitasking OS. By hiding the fields in a WindowRecord and other data structures, we would begin the migration to the discipline wherein system data structures are completely hidden from applications. After many design reviews, we finally concluded that with this sort of migration, the system could never tell when an application was no longer peeking at a WindowRecord, and thus the data structure might never become system owned. Additionally, there were many other limitations in the classic toolbox that were begging to be addressed. The final decision was to leave the traditional toolbox as a compatibility mode. We also decided to use the Handle and Ptr based types in the function declarations. For example, NewWindow now returns a WindowPtr rather than a WindowRef. The Ref types are still defined in the header files, so all existing code will still compile exactly as it did before. There are several reasons why we chose to do this: - The importance of backwards compatibility makes it unfeasible for us to enforce real opaque references in the implementation anytime in the foreseeable future. Therefore, any opaque data types (e.g. WindowRef, ControlRef, etc.) in the documentation and header files would always be a fake veneer of opacity. - There exists a significant base of books and sample code that neophyte Macintosh developers use to learn how to program the Macintosh. These books and sample code all use direct data access. Introducing opaque data types at this point would confuse neophyte programmers more than it would help them. - Direct data structure access is used by nearly all Macintosh developers. Changing the interfaces to reflect a false opacity would not provide any benefit to these developers. - Accessor functions are useful in and of themselves as convenience functions, without being tied to opaque data types. We will complete and document the Windows and Dialogs accessor functions in an upcoming release of the interfaces. */ #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline WindowPtr GetDialogWindow(DialogPtr dialog) { return (WindowPtr) dialog; } inline SInt16 GetDialogDefaultItem(DialogPtr dialog) { return (*(SInt16 *) (((UInt8 *) dialog) + 168)); } inline SInt16 GetDialogCancelItem(DialogPtr dialog) { return (*(SInt16 *) (((UInt8 *) dialog) + 166)); } inline SInt16 GetDialogKeyboardFocusItem(DialogPtr dialog) { return (SInt16) ((*(SInt16 *) (((UInt8 *) dialog) + 164)) < 0 ? -1 : (*(SInt16 *) (((UInt8 *) dialog) + 164)) + 1); } inline void SetGrafPortOfDialog(DialogPtr dialog) { MacSetPort ((GrafPtr) dialog); } #else #define GetDialogWindow(dialog) ((WindowPtr) dialog) #define GetDialogDefaultItem(dialog) (*(SInt16 *) (((UInt8 *) dialog) + 168)) #define GetDialogCancelItem(dialog) (*(SInt16 *) (((UInt8 *) dialog) + 166)) #define GetDialogKeyboardFocusItem(dialog) ((SInt16)((*(SInt16 *) (((UInt8 *) dialog) + 164)) < 0 ? -1 : (*(SInt16 *) (((UInt8 *) dialog) + 164)) + 1)) #define SetGrafPortOfDialog(dialog) do { MacSetPort ((GrafPtr) dialog); } while (false) #endif #endif /* !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS */ #if ACCESSOR_CALLS_ARE_FUNCTIONS /* Getters */ EXTERN_API( WindowPtr ) GetDialogWindow (DialogPtr dialog); EXTERN_API( TEHandle ) GetDialogTextEditHandle (DialogPtr dialog); EXTERN_API( SInt16 ) GetDialogDefaultItem (DialogPtr dialog); EXTERN_API( SInt16 ) GetDialogCancelItem (DialogPtr dialog); EXTERN_API( SInt16 ) GetDialogKeyboardFocusItem (DialogPtr dialog); /* Setters */ /* Utilities */ EXTERN_API( void ) SetPortDialogPort (DialogPtr dialog); EXTERN_API( CGrafPtr ) GetDialogPort (DialogPtr dialog); /* To prevent upward dependencies, GetDialogFromWindow() is defined here instead of MacWindows.i */ EXTERN_API( DialogPtr ) GetDialogFromWindow (WindowPtr window); #endif /* ACCESSOR_CALLS_ARE_FUNCTIONS */ #if CALL_NOT_IN_CARBON EXTERN_API( void ) CouldDialog (SInt16 dialogID) ONEWORDINLINE(0xA979); EXTERN_API( void ) FreeDialog (SInt16 dialogID) ONEWORDINLINE(0xA97A); EXTERN_API( void ) CouldAlert (SInt16 alertID) ONEWORDINLINE(0xA989); EXTERN_API( void ) FreeAlert (SInt16 alertID) ONEWORDINLINE(0xA98A); #endif /* CALL_NOT_IN_CARBON */ #if !TARGET_OS_MAC #endif /* !TARGET_OS_MAC */ #if PRAGMA_STRUCT_ALIGN #pragma options align=reset #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(pop) #elif PRAGMA_STRUCT_PACK #pragma pack() #endif #ifdef PRAGMA_IMPORT_OFF #pragma import off #elif PRAGMA_IMPORT #pragma import reset #endif #ifdef __cplusplus } #endif #endif /* __DIALOGS__ */