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.
SAL ƒ/SAL_Public.h
#ifndef SAL_PUBLIC_H |
#define SAL_PUBLIC_H |
/***************************************************************************\ |
|***************************************************************************| |
| | |
| SimpleApp Framework: A Simple Application Framework | |
| by Apple Macintosh Developer Technical Support | |
| | |
| File Name: SAL_Public.h | |
| | |
| Contains: SimpleAppLib public interface | |
| | |
| DRI: George Warner, Apple Developer Technical Support (dts@apple.com) | |
| | |
| Copyright: © 1999 by Apple Computer,Inc., all rights reserved. | |
| | |
| You may incorporate this sample code into your applications without | |
| restriction, though the sample code has been provided "AS IS" and the | |
| responsibility for its operation is 100% yours. However, what you are | |
| not permitted to do is redistribute the source as "Apple Sample Code" | |
| after having made changes. If you're going to re-distribute the source, | |
| we require that you make it clear in the source that the code was | |
| descended from Apple Sample Code, but that you've made changes. | |
| | |
| **************************************************************************| |
| C h a n g e H i s t o r y (most recent first): | |
| **************************************************************************| |
| Vers Date Author Description | |
| ---- -------- ------ ----------------------------------------| |
| 2.0 8/10/99 gaw Converted to C | |
| 1.0 4/ 1/94 mxm Initial version | |
|***************************************************************************| |
\***************************************************************************/ |
/************************************************************\ |
|* NOTICE: This is an minimun header file for SAL; *| |
|* It's just enough to build the sample apps. *| |
|* SAL is a work in progress; we'll release more *| |
|* as we write it. *| |
\************************************************************/ |
#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 |
#include <Controls.h> |
#include <Lists.h> |
/**\ |
|**| Typedefs, defines, enums, structs, etc. |
\**/ |
enum |
{ |
kSAL_ErrorBase = 0, // Base value for ErrorNumbers |
kSAL_StandardDebugAlert = 9999, |
kSAL_NonFatalError = 0, |
kSAL_FatalError = kSAL_ErrorBase - 1, |
kSAL_BadSelectorErr = kSAL_ErrorBase - 2, |
kSAL_BadProcPtr = kSAL_ErrorBase - 3, |
kSAL_NotOurWindowError = kSAL_ErrorBase - 4, |
kSAL_NotValidObject = kSAL_ErrorBase - 5 |
}; |
enum |
{ |
kSAL_UseStandardMenu = true, |
kSAL_MenuStartID = 127, |
kSAL_AppleNum = 128, |
kSAL_FileNum = 129, |
kSAL_EditNum = 130, |
kSAL_EditMenu = 3, |
kSAL_UndoItem = 1, |
//kSAL_Undefined = 2, |
kSAL_CutItem = 3, |
kSAL_CopyItem = 4, |
kSAL_PasteItem = 5, |
kSAL_ClearItem = 6 |
}; |
//key navigation |
enum |
{ |
kSAL_NoKey = 0, |
kSAL_NoCommandKey = 0, |
kSAL_UpArrow = 30, |
kSAL_DownArrow = 31, |
kSAL_EnterKey = 3, |
kSAL_ReturnKey = 13, |
kSAL_TabKey = 9 |
}; |
//List Flags |
enum |
{ |
kSAL_ListDrawFrame = 1, |
kSAL_ListVScroll = 2, |
kSAL_ListHScroll = 4, |
kSAL_ListCustomLDEF = 8, |
kSAL_ListDrawingOn = 16, |
kSAL_ListHasGrow = 32, |
kSAL_ListWantsDrag = 64, |
kSAL_StandardList = kSAL_ListDrawFrame + kSAL_ListVScroll + kSAL_ListDrawingOn |
}; |
enum |
{ |
kSAL_MagicSig = 0x4D584D21, // 'MXM!' our magic signature |
kSAL_MaxMenus = 20, |
kSAL_MaxMenuItems = 128, |
kSAL_MaxButtons = 128, |
kSAL_MaxEventProc = 10, |
kSAL_AppleEventLoadingErr = 129, |
kSAL_EventPassThru = true,// This lets the event pass thru to the default handler |
kSAL_EventOverRide = false, // This overides the event and doesn't call to the default handler |
kSAL_ResultNoErr = noErr, |
kSAL_ResultPassThru = 1, |
kSAL_ResultOverride = 0, |
kSAL_DefaultStackSize = (SInt32)(24 * 1024), |
kSAL_Margin = 5 |
}; |
typedef Str255 StringArray[]; |
typedef StringArray* StringArray_Ptr; |
typedef StringArray_Ptr* StringArray_Hdl; |
typedef ControlHandle ControlArray[]; |
typedef ControlArray* ControlArray_Ptr; |
typedef ControlArray_Ptr* ControlArray_Hdl; |
// Opaque references |
typedef struct ButtonItem_Struct** ButtonItemRef; |
typedef struct Group_Struct** GroupRecRef; |
typedef struct ListItem_Struct** ListItemRef; |
typedef struct ObjectItem_Struct** ObjectRef; |
typedef struct WindowItem_Struct** WindowItemRef; |
// ProcPtr's |
typedef pascal void (*SalAction_ProcPtr)(const ControlHandle pCtrlHdl, |
const SInt16 pPart); |
typedef pascal OSErr (*SalButtonHit_ProcPtr)(const ButtonItemRef pButtonItemRef, |
const SInt32 pModifiers); |
typedef pascal OSErr (*SalButtonUpdate_ProcPtr)(const SInt32 pModifiers); |
typedef pascal OSErr (*SalEvent_ProcPtr)(const EventRecord* pEventPtr); |
typedef pascal Boolean (*SalAbout_ProcPtr)(const SInt32 pData); |
typedef pascal OSErr (*SalListHit_ProcPtr)(const Boolean pIsDoubleClick, |
const Point pCell, |
const Rect* pBounds, |
const ListItemRef pListItemRef); |
typedef pascal OSErr (*SalListTrack_ProcPtr)(const EventRecord* pEventPtr, |
const ListItemRef pListItemRef); |
typedef pascal OSErr (*SalListUpdate_ProcPtr)(const RgnHandle pUpdateRgn_Hdl, |
const ListItemRef pListItemRef); |
typedef pascal void (*SalListDrawCell_ProcPtr)(const Point pCell, |
const Rect* pBounds, |
const ListItemRef pListItemRef); |
typedef pascal OSErr (*SalListIdle_ProcPtr)(const EventRecord* pEventPtr, |
const ListItemRef pListItemRef); |
typedef pascal OSErr (*SalListKey_ProcPtr)(EventRecord* pEventPtr, |
ListItemRef pListItemRef); |
typedef pascal OSErr (*SalMenuEvent_ProcPtr)(const SInt32 pMenuResult); |
typedef pascal OSErr (*SalMenuHit_ProcPtr)(const SInt32 pModifiers); |
typedef pascal OSErr (*SalMenuUpdate_ProcPtr)(const SInt32 pModifiers); |
typedef pascal OSErr (*SalWindowHit_ProcPtr)(const WindowItemRef pWIR, |
const EventRecord* pEventPtr); |
typedef pascal OSErr (*SalWindowUpdate_ProcPtr)(const SInt32 pModifiers); |
typedef pascal OSErr (*SalWindowResize_ProcPtr)(const WindowPtr pWindowPtr); |
typedef pascal Boolean (*SalGroupPreHit_ProcPtr)(const SInt32 pModifiers, |
const Point pPoint, |
const ControlArray_Ptr pCAP, |
const SInt16 pCount); |
typedef pascal OSErr (*SalGroupPostHit_ProcPtr)(const SInt32 pModifiers, |
const ControlHandle pCtrl_Hdl, |
const ButtonItemRef pBIR, |
const SInt16 pItem); |
typedef pascal OSErr (*SalGroupUpdate_ProcPtr)(const WindowPtr pWindowPtr, |
const GroupRecRef pGroupRecRef); |
/**\ |
|**| external globals |
\**/ |
extern SInt16 gSAL_NumberOfWindows; |
extern WindowPtr gSAL_CurrentWindow; |
extern WindowItemRef gSAL_CurrentWindowItemRef; |
extern ControlHandle gSAL_CurrentControl; |
extern ListHandle gSAL_CurrentList; |
extern TextStyle gSAL_DefaultStyle; |
extern TextStyle gSAL_TextStyle; |
extern SysEnvRec gSAL_Mac; |
/**\ |
|**| external function prototypes |
\**/ |
//----------------------------------------------------------------------------- |
// Application |
//----------------------------------------------------------------------------- |
// Initialize SimpleApp |
extern pascal void SAL_InitSimpleApp(const SInt16 pMasters, |
const Boolean pWantsStandardMenu); |
// Run |
extern pascal void SAL_Run(void); |
extern pascal OSErr SAL_AddStringToList(const ListHandle pListID, |
const Str255 pStr255); |
// Get & Set the print area |
extern pascal void SAL_GetPrintArea(const WindowPtr pWindowPtr, |
Rect* pBounds); |
extern pascal void SAL_SetPrintArea(const WindowPtr pWindowPtr, |
const Rect* pBounds); |
// Print no CR |
extern pascal void SAL_Print(const StringPtr pStringPtr); |
// Print with CR |
extern pascal void SAL_PrintLine(const StringPtr pStringPtr); |
// Print a buffer full of text with CR |
extern pascal void SAL_PrintTextHandle(const Handle pText_Hdl); |
extern pascal void SAL_SetCursorBusy(void); |
extern pascal void SAL_DefaultCursor(void); |
//----------------------------------------------------------------------------- |
// Controls |
//----------------------------------------------------------------------------- |
extern pascal Rect SAL_GetGroupBounds(GroupRecRef pGroupRecRef); |
extern pascal OSErr SAL_InstallCheckBox(const SInt32 pButtonID, |
const WindowPtr pWindowPtr, |
const Str255 pName, |
const Rect* pRect, |
const UInt8 pCmdKey, |
const SInt16 pInitialValue, |
const SalButtonHit_ProcPtr pBHP, |
const SalButtonUpdate_ProcPtr pBUP); |
extern pascal OSErr SAL_InstallPushButton(const SInt32 pButtonID, |
const WindowPtr pWindowPtr, |
const Str255 pName, |
const Rect* pRect, |
const UInt8 pCmdKey, |
const SalButtonHit_ProcPtr pBHP, |
const SalButtonUpdate_ProcPtr pBUP); |
extern pascal OSErr SAL_InstallRadioGroup(const SInt32 pGroupID, |
const WindowPtr pWindowPtr, |
const SInt16 pCount, |
const Str255 pTitle, |
const StringArray_Ptr pNames, |
const Rect* pRect, |
const SInt16 pDefaultItem, |
const SInt16 pSpacingH, |
const SInt16 pSpacingV, |
const SInt16 pButtonHeight, |
const SInt16 pButtonWidth, |
const SalGroupPreHit_ProcPtr pPreGHP, |
const SalGroupPostHit_ProcPtr pPostGHP, |
const SalGroupUpdate_ProcPtr pGUP); |
extern pascal void SAL_DisableMe(void); |
extern pascal void SAL_EnableMe(void); |
extern pascal void SAL_SetTitle(const StringPtr pTitle); |
//----------------------------------------------------------------------------- |
// Error Unit |
//----------------------------------------------------------------------------- |
extern pascal void SAL_ErrorMessage(const StringPtr pMessage, |
const OSStatus pOSStatus, |
const SInt16 pFlags); |
//----------------------------------------------------------------------------- |
// Lists |
//----------------------------------------------------------------------------- |
extern pascal OSErr SAL_InstallList(const SInt32 pListID, |
const WindowPtr pWindowPtr, |
const Point pCellSize, |
const Rect* pRect, |
const SalListHit_ProcPtr pLHP, |
const SalListTrack_ProcPtr pLTP, |
const SalListUpdate_ProcPtr pLUP, |
const SalListDrawCell_ProcPtr pLDCP, |
const ListDefUPP pLDefUPP, |
const SInt32 pFlags); |
//----------------------------------------------------------------------------- |
// Menus |
//----------------------------------------------------------------------------- |
extern pascal OSErr SAL_AttachMenuToMenuItem(const SInt16 pMenuIDToAdd, |
const SInt16 pAttachMenuID, |
const SInt16 pAttachMenuItem); |
extern pascal OSErr SAL_InstallFontMenu(const SInt16 pMenuID, |
const Str255 pName, |
const Boolean pIsHeirarchical, |
const SalMenuHit_ProcPtr pMHP, |
const SalMenuUpdate_ProcPtr pMUP); |
extern pascal OSErr SAL_InstallMenu(const SInt16 pMenuID, |
const Str255 pMenuTitle, |
const Boolean pIsHierarchical, |
const SalMenuHit_ProcPtr pMHP, |
const SalMenuUpdate_ProcPtr pMUP); |
extern pascal OSErr SAL_InstallMenuItem(const SInt16 pMenuID, |
const SInt16 pMenuItem, |
const Str255 pMenuTitle, |
const char pMarkChar, |
const char pCmdChar, |
const SalMenuHit_ProcPtr pMHP, |
const SalMenuUpdate_ProcPtr pMUP); |
extern pascal OSErr SAL_InstallResourceMenu(const SInt16 pMenuID, |
const Str255 pMenuTitle, |
const OSType pResType, |
const Boolean pIsHiearchical, |
const SalMenuHit_ProcPtr pMHP, |
const SalMenuUpdate_ProcPtr pMUP); |
//----------------------------------------------------------------------------- |
// Objects |
//----------------------------------------------------------------------------- |
extern pascal void SAL_DisableObject(const SInt32 pThing); |
extern pascal void SAL_EnableObject(const SInt32 pThing); |
extern pascal SInt32 SAL_GetObjectRefCon(const SInt32 pThing); |
extern pascal void SAL_SetObjectRefCon(const SInt32 pThing, |
SInt32 pRefCon); |
extern pascal Handle SAL_GetObjectHandle(const SInt32 pThing); |
//----------------------------------------------------------------------------- |
// ProcUnit |
//----------------------------------------------------------------------------- |
extern pascal void SAL_InstallIdleProc(const SalEvent_ProcPtr pEventProc); |
extern pascal void SAL_InstallAboutProc(const SalAbout_ProcPtr pAboutProc); |
//----------------------------------------------------------------------------- |
// ScrollBars |
//----------------------------------------------------------------------------- |
extern pascal OSErr SAL_InstallScrollBar(const SInt32 pButtonID, |
const WindowPtr pWindowPtr, |
const Str255 pName, |
const Rect* pRect, |
const UInt8 pCmdKey, |
const SalAction_ProcPtr pSHP, |
const SalAction_ProcPtr pSBP, |
const SalAction_ProcPtr pSIP); |
//----------------------------------------------------------------------------- |
// Utils |
//----------------------------------------------------------------------------- |
extern pascal SInt8 SAL_LockHandle(Handle pHandle); |
extern pascal void SAL_UnlockHandle(Handle pHandle, |
const SInt8 pState); |
// This Sets a rects anchor point |
extern pascal void SAL_SetRectLocation(Rect* pRect, |
const SInt16 pH, |
const SInt16 pV); |
// This Sets its size without changing its position |
extern pascal void SAL_SetRectDimensions(Rect* pRect, |
const SInt16 pH, |
const SInt16 pV); |
//----------------------------------------------------------------------------- |
// Windows |
//----------------------------------------------------------------------------- |
// Deprecated funtion do not use |
extern pascal SInt16 SAL_GetDocWindow(SInt16 pResID); |
extern pascal SInt16 SAL_GetDocumentWindow(const SInt16 pResID, |
WindowPtr* pWindowPtr); |
extern pascal void SAL_SetWindowUpdateProc(const WindowPtr pWindowPtr, |
const SalWindowUpdate_ProcPtr pWindowUpdateProc); |
extern pascal void SAL_SetWindowResizeProc(const WindowPtr pWindowPtr, |
const SalWindowResize_ProcPtr pWRP); |
extern pascal OSErr SAL_DoWindowClose(const WindowPtr pWindowPtr); |
//----------------------------------------------------------------------------- |
#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 SAL_PUBLIC_H |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-30