topical media & game development
lib-of-vs-libs-QTDevWin-CIncludes-Menus.h / h
/*
File: Menus.h
Contains: Menu Manager Interfaces.
Version: Technology: Mac OS 9.0
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 __MENUS__
define __MENUS__
ifndef __MACTYPES__
include <MacTypes.h>
endif
ifndef __EVENTS__
include <Events.h>
endif
ifndef __QUICKDRAW__
include <Quickdraw.h>
endif
ifndef __FONTS__
include <Fonts.h>
endif
ifndef __TEXTCOMMON__
include <TextCommon.h>
endif
ifndef __PROCESSES__
include <Processes.h>
endif
ifndef __APPLEEVENTS__
include <AppleEvents.h>
endif
ifndef __COLLECTIONS__
include <Collections.h>
endif
ifndef __MACERRORS__
include <MacErrors.h>
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
/*--------------------------------------------------------------------------------------*/
/* o Menu Constants */
/*--------------------------------------------------------------------------------------*/
enum {
noMark = 0 /*mark symbol for MarkItem*/
};
enum {
/* menu defProc messages */
kMenuDrawMsg = 0,
kMenuSizeMsg = 2,
kMenuPopUpMsg = 3,
kMenuCalcItemMsg = 5,
kMenuThemeSavvyMsg = 7, /* is your MDEF theme-savvy? If so, return hex 7473 in the whichItem parameter*/
mDrawMsg = 0,
mSizeMsg = 2,
mPopUpMsg = 3, /* position the popup menu rect appropriately */
mCalcItemMsg = 5
};
if CALL_NOT_IN_CARBON
/*
Carbon MDEFs must replace mChooseMsg with the new messages kMenuFindItemMsg and kMenuHiliteItemMsg.
mDrawItemMsg was used by the popup menu control before 8.5, but is no longer used.
*/
enum {
mChooseMsg = 1,
mDrawItemMsg = 4,
kMenuChooseMsg = 1,
kMenuDrawItemMsg = 4
};
endif /* CALL_NOT_IN_CARBON */
enum {
kThemeSavvyMenuResponse = 0x7473
};
/* these MDEF messages are only supported in Carbon*/
enum {
kMenuInitMsg = 8,
kMenuDisposeMsg = 9,
kMenuFindItemMsg = 10,
kMenuHiliteItemMsg = 11
};
enum {
textMenuProc = 0,
hMenuCmd = 27, /*itemCmd == 0x001B ==> hierarchical menu*/
hierMenu = -1, /*a hierarchical menu - for InsertMenu call*/
kInsertHierarchicalMenu = -1, /*a better name for hierMenu */
mctAllItems = -98, /*search for all Items for the given ID*/
mctLastIDIndic = -99 /*last color table entry has this in ID field*/
};
/* Constants for use with MacOS 8.0 (Appearance 1.0) and later*/
enum {
kMenuStdMenuProc = 63,
kMenuStdMenuBarProc = 63
};
enum {
kMenuNoModifiers = 0, /* Mask for no modifiers*/
kMenuShiftModifier = (1 << 0), /* Mask for shift key modifier*/
kMenuOptionModifier = (1 << 1), /* Mask for option key modifier*/
kMenuControlModifier = (1 << 2), /* Mask for control key modifier*/
kMenuNoCommandModifier = (1 << 3) /* Mask for no command key modifier*/
};
enum {
kMenuNoIcon = 0, /* No icon*/
kMenuIconType = 1, /* Type for ICON*/
kMenuShrinkIconType = 2, /* Type for ICON plotted 16 x 16*/
kMenuSmallIconType = 3, /* Type for SICN*/
kMenuColorIconType = 4, /* Type for cicn*/
kMenuIconSuiteType = 5, /* Type for Icon Suite*/
kMenuIconRefType = 6 /* Type for Icon Ref*/
};
enum {
kMenuAttrExcludesMarkColumn = (1 << 0), /* No space is allocated for the mark character */
kMenuAttrAutoDisable = (1 << 2) /* Menu title is automatically disabled when all items are disabled */
};
typedef OptionBits MenuAttributes;
enum {
kMenuItemAttrSubmenuParentChoosable = (1 << 2) /* Parent item of a submenu is still selectable by the user */
};
typedef OptionBits MenuItemAttributes;
typedef UInt32 MenuTrackingMode;
enum {
kMenuTrackingModeMouse = 1, /* Menus are being tracked using the mouse*/
kMenuTrackingModeKeyboard = 2 /* Menus are being tracked using the keyboard*/
};
/*--------------------------------------------------------------------------------------*/
/* o Menu Types */
/*--------------------------------------------------------------------------------------*/
typedef SInt16 MenuID;
typedef UInt16 MenuItemIndex;
typedef UInt32 MenuCommand;
if !OPAQUE_TOOLBOX_STRUCTS
struct MenuInfo {
MenuID menuID;
short menuWidth;
short menuHeight;
Handle menuProc;
long enableFlags;
Str255 menuData;
};
typedef struct MenuInfo MenuInfo;
typedef MenuInfo * MenuPtr;
typedef MenuPtr * MenuHandle;
else
typedef struct OpaqueMenuHandle* MenuHandle;
endif /* !OPAQUE_TOOLBOX_STRUCTS */
/* MenuRef and MenuHandle are equivalent. Use either. We don't care.*/
typedef MenuHandle MenuRef;
struct MCEntry {
MenuID mctID; /*menu ID. ID = 0 is the menu bar*/
short mctItem; /*menu Item. Item = 0 is a title*/
RGBColor mctRGB1; /*usage depends on ID and Item*/
RGBColor mctRGB2; /*usage depends on ID and Item*/
RGBColor mctRGB3; /*usage depends on ID and Item*/
RGBColor mctRGB4; /*usage depends on ID and Item*/
short mctReserved; /*reserved for internal use*/
};
typedef struct MCEntry MCEntry;
typedef MCEntry * MCEntryPtr;
typedef MCEntry MCTable[1];
typedef MCEntry * MCTablePtr;
typedef MCTablePtr * MCTableHandle;
struct MenuCRsrc {
short numEntries; /*number of entries*/
MCTable mcEntryRecs; /*ARRAY [1..numEntries] of MCEntry*/
};
typedef struct MenuCRsrc MenuCRsrc;
typedef MenuCRsrc * MenuCRsrcPtr;
typedef MenuCRsrcPtr * MenuCRsrcHandle;
if TARGET_OS_WIN32
/* QuickTime 3.0 */
struct MenuAccessKeyRec {
short count;
long flags;
unsigned char keys[1];
};
typedef struct MenuAccessKeyRec MenuAccessKeyRec;
typedef MenuAccessKeyRec * MenuAccessKeyPtr;
typedef MenuAccessKeyPtr * MenuAccessKeyHandle;
if CALL_NOT_IN_CARBON
EXTERN_API_C( void )
SetMenuItemHotKey (MenuRef menu,
short itemID,
char hotKey,
long flags);
endif /* CALL_NOT_IN_CARBON */
endif /* TARGET_OS_WIN32 */
struct MenuTrackingData {
MenuRef menu;
MenuItemIndex itemSelected;
MenuItemIndex itemUnderMouse;
Rect itemRect;
SInt32 virtualMenuTop;
SInt32 virtualMenuBottom;
};
typedef struct MenuTrackingData MenuTrackingData;
typedef MenuTrackingData * MenuTrackingDataPtr;
struct HiliteMenuItemData {
MenuItemIndex previousItem;
MenuItemIndex newItem;
};
typedef struct HiliteMenuItemData HiliteMenuItemData;
typedef HiliteMenuItemData * HiliteMenuItemDataPtr;
/*--------------------------------------------------------------------------------------*/
/* o Menu ProcPtrs */
/* */
/* All of these procs are considered deprecated. Developers interested in portability */
/* to Carbon should avoid them entirely, if at all possible. */
/*--------------------------------------------------------------------------------------*/
typedef CALLBACK_API( void , MenuDefProcPtr )(short message, MenuRef theMenu, Rect *menuRect, Point hitPt, short *whichItem);
typedef STACK_UPP_TYPE(MenuDefProcPtr) MenuDefUPP;
if OPAQUE_UPP_TYPES
EXTERN_API(MenuDefUPP)
NewMenuDefUPP (MenuDefProcPtr userRoutine);
EXTERN_API(void)
DisposeMenuDefUPP (MenuDefUPP userUPP);
EXTERN_API(void)
InvokeMenuDefUPP (short message,
MenuRef theMenu,
Rect * menuRect,
Point hitPt,
short * whichItem,
MenuDefUPP userUPP);
else
enum { uppMenuDefProcInfo = 0x0000FF80 }; /* pascal no_return_value Func(2_bytes, 4_bytes, 4_bytes, 4_bytes, 4_bytes) */
#define NewMenuDefUPP(userRoutine) (MenuDefUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppMenuDefProcInfo, GetCurrentArchitecture())
#define DisposeMenuDefUPP(userUPP) DisposeRoutineDescriptor(userUPP)
#define InvokeMenuDefUPP(message, theMenu, menuRect, hitPt, whichItem, userUPP) CALL_FIVE_PARAMETER_UPP((userUPP), uppMenuDefProcInfo, (message), (theMenu), (menuRect), (hitPt), (whichItem))
endif
/* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
define NewMenuDefProc(userRoutine) NewMenuDefUPP(userRoutine)
define CallMenuDefProc(userRoutine, message, theMenu, menuRect, hitPt, whichItem) InvokeMenuDefUPP(message, theMenu, menuRect, hitPt, whichItem, userRoutine)
typedef CALLBACK_API( long , MenuBarDefProcPtr )(short selector, short message, short parameter1, long parameter2);
typedef CALLBACK_API( void , MenuHookProcPtr )(void );
typedef CALLBACK_API( short , MBarHookProcPtr )(Rect *menuRect);
typedef STACK_UPP_TYPE(MenuBarDefProcPtr) MenuBarDefUPP;
typedef STACK_UPP_TYPE(MenuHookProcPtr) MenuHookUPP;
typedef STACK_UPP_TYPE(MBarHookProcPtr) MBarHookUPP;
if OPAQUE_UPP_TYPES
if CALL_NOT_IN_CARBON
EXTERN_API(MenuBarDefUPP)
NewMenuBarDefUPP (MenuBarDefProcPtr userRoutine);
EXTERN_API(MenuHookUPP)
NewMenuHookUPP (MenuHookProcPtr userRoutine);
EXTERN_API(MBarHookUPP)
NewMBarHookUPP (MBarHookProcPtr userRoutine);
EXTERN_API(void)
DisposeMenuBarDefUPP (MenuBarDefUPP userUPP);
EXTERN_API(void)
DisposeMenuHookUPP (MenuHookUPP userUPP);
EXTERN_API(void)
DisposeMBarHookUPP (MBarHookUPP userUPP);
EXTERN_API(long)
InvokeMenuBarDefUPP (short selector,
short message,
short parameter1,
long parameter2,
MenuBarDefUPP userUPP);
EXTERN_API(void)
InvokeMenuHookUPP (MenuHookUPP userUPP);
EXTERN_API(short)
InvokeMBarHookUPP (Rect * menuRect,
MBarHookUPP userUPP);
endif /* CALL_NOT_IN_CARBON */
else
enum { uppMenuBarDefProcInfo = 0x00003AB0 }; /* pascal 4_bytes Func(2_bytes, 2_bytes, 2_bytes, 4_bytes) */
enum { uppMenuHookProcInfo = 0x00000000 }; /* pascal no_return_value Func() */
enum { uppMBarHookProcInfo = 0x000000CF }; /* SPECIAL_CASE_PROCINFO(12) */
#define NewMenuBarDefUPP(userRoutine) (MenuBarDefUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppMenuBarDefProcInfo, GetCurrentArchitecture())
#define NewMenuHookUPP(userRoutine) (MenuHookUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppMenuHookProcInfo, GetCurrentArchitecture())
#define NewMBarHookUPP(userRoutine) (MBarHookUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppMBarHookProcInfo, GetCurrentArchitecture())
#define DisposeMenuBarDefUPP(userUPP) DisposeRoutineDescriptor(userUPP)
#define DisposeMenuHookUPP(userUPP) DisposeRoutineDescriptor(userUPP)
#define DisposeMBarHookUPP(userUPP) DisposeRoutineDescriptor(userUPP)
#define InvokeMenuBarDefUPP(selector, message, parameter1, parameter2, userUPP) (long)CALL_FOUR_PARAMETER_UPP((userUPP), uppMenuBarDefProcInfo, (selector), (message), (parameter1), (parameter2))
#define InvokeMenuHookUPP(userUPP) CALL_ZERO_PARAMETER_UPP((userUPP), uppMenuHookProcInfo)
#define InvokeMBarHookUPP(menuRect, userUPP) (short)CALL_ONE_PARAMETER_UPP((userUPP), uppMBarHookProcInfo, (menuRect))
endif
/* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
define NewMenuBarDefProc(userRoutine) NewMenuBarDefUPP(userRoutine)
define NewMenuHookProc(userRoutine) NewMenuHookUPP(userRoutine)
define NewMBarHookProc(userRoutine) NewMBarHookUPP(userRoutine)
define CallMenuBarDefProc(userRoutine, selector, message, parameter1, parameter2) InvokeMenuBarDefUPP(selector, message, parameter1, parameter2, userRoutine)
define CallMenuHookProc(userRoutine) InvokeMenuHookUPP(userRoutine)
define CallMBarHookProc(userRoutine, menuRect) InvokeMBarHookUPP(menuRect, userRoutine)
enum {
kMenuDefProcPtr = 0 /* raw proc-ptr access based on old MDEF */
};
typedef UInt32 MenuDefType;
struct MenuDefSpec {
MenuDefType defType;
union {
MenuDefUPP defProc;
} u;
};
typedef struct MenuDefSpec MenuDefSpec;
typedef MenuDefSpec * MenuDefSpecPtr;
/*--------------------------------------------------------------------------------------*/
/* o Menu Manager Initialization */
/*--------------------------------------------------------------------------------------*/
if CALL_NOT_IN_CARBON
EXTERN_API( void )
InitProcMenu (short resID) ONEWORDINLINE(0xA808);
EXTERN_API( void )
InitMenus (void) ONEWORDINLINE(0xA930);
/*--------------------------------------------------------------------------------------*/
/* o Menu Manipulation */
/*--------------------------------------------------------------------------------------*/
endif /* CALL_NOT_IN_CARBON */
EXTERN_API( MenuRef )
NewMenu (MenuID menuID,
ConstStr255Param menuTitle) ONEWORDINLINE(0xA931);
if TARGET_OS_MAC
#define MacGetMenu GetMenu
endif
EXTERN_API( MenuRef )
MacGetMenu (short resourceID) ONEWORDINLINE(0xA9BF);
EXTERN_API( void )
DisposeMenu (MenuRef theMenu) ONEWORDINLINE(0xA932);
EXTERN_API( void )
CalcMenuSize (MenuRef theMenu) ONEWORDINLINE(0xA948);
EXTERN_API( short )
CountMenuItems (MenuRef theMenu) ONEWORDINLINE(0xA950);
/* CountMItems() has been renamed to CountMenuItems() in Carbon */
if CALL_NOT_IN_CARBON
EXTERN_API( short )
CountMItems (MenuRef theMenu) ONEWORDINLINE(0xA950);
if CALL_NOT_IN_CARBON
define CountMenuItems( menu ) CountMItems( menu )
endif /* CALL_NOT_IN_CARBON */
/* Routines available in Mac OS 8.5 and later */
endif /* CALL_NOT_IN_CARBON */
EXTERN_API( OSStatus )
GetMenuFont (MenuRef menu,
SInt16 * outFontID,
UInt16 * outFontSize);
EXTERN_API( OSStatus )
SetMenuFont (MenuRef menu,
SInt16 inFontID,
UInt16 inFontSize);
EXTERN_API( Boolean )
GetMenuExcludesMarkColumn (MenuRef menu);
EXTERN_API( OSStatus )
SetMenuExcludesMarkColumn (MenuRef menu,
Boolean excludesMark);
/* Routines available in Carbon only*/
EXTERN_API( OSStatus )
RegisterMenuDefinition (SInt16 inResID,
MenuDefSpecPtr inDefSpec);
EXTERN_API( OSStatus )
CreateNewMenu (MenuID menuID,
MenuAttributes menuAttributes,
MenuRef * outMenuRef);
EXTERN_API( OSStatus )
CreateCustomMenu (const MenuDefSpec * defSpec,
MenuID menuID,
MenuAttributes menuAttributes,
MenuRef * outMenuRef);
/*--------------------------------------------------------------------------------------*/
/* o Menu Item Insertion */
/*--------------------------------------------------------------------------------------*/
if TARGET_OS_MAC
#define MacAppendMenu AppendMenu
endif
EXTERN_API( void )
MacAppendMenu (MenuRef menu,
ConstStr255Param data) ONEWORDINLINE(0xA933);
EXTERN_API( void )
InsertResMenu (MenuRef theMenu,
ResType theType,
short afterItem) ONEWORDINLINE(0xA951);
EXTERN_API( void )
AppendResMenu (MenuRef theMenu,
ResType theType) ONEWORDINLINE(0xA94D);
if TARGET_OS_MAC
#define MacInsertMenuItem InsertMenuItem
endif
EXTERN_API( void )
MacInsertMenuItem (MenuRef theMenu,
ConstStr255Param itemString,
short afterItem) ONEWORDINLINE(0xA826);
EXTERN_API( void )
DeleteMenuItem (MenuRef theMenu,
short item) ONEWORDINLINE(0xA952);
EXTERN_API( void )
InsertFontResMenu (MenuRef theMenu,
short afterItem,
short scriptFilter) THREEWORDINLINE(0x303C, 0x0400, 0xA825);
EXTERN_API( void )
InsertIntlResMenu (MenuRef theMenu,
ResType theType,
short afterItem,
short scriptFilter) THREEWORDINLINE(0x303C, 0x0601, 0xA825);
/* Routines available in Mac OS 8.5 and later*/
EXTERN_API( OSStatus )
AppendMenuItemText (MenuRef menu,
ConstStr255Param inString);
EXTERN_API( OSStatus )
InsertMenuItemText (MenuRef menu,
ConstStr255Param inString,
MenuItemIndex afterItem);
/* Routines available in Carbon and later*/
/*--------------------------------------------------------------------------------------*/
/* o Menu Events */
/*--------------------------------------------------------------------------------------*/
EXTERN_API( long )
MenuKey (CharParameter ch) ONEWORDINLINE(0xA93E);
EXTERN_API( long )
MenuSelect (Point startPt) ONEWORDINLINE(0xA93D);
EXTERN_API( long )
PopUpMenuSelect (MenuRef menu,
short top,
short left,
short popUpItem) ONEWORDINLINE(0xA80B);
EXTERN_API( long )
MenuChoice (void) ONEWORDINLINE(0xAA66);
/* Routines available in Mac OS 8.0 (Appearance 1.0) and later*/
EXTERN_API( UInt32 )
MenuEvent (const EventRecord * inEvent) THREEWORDINLINE(0x303C, 0x020C, 0xA825);
/*--------------------------------------------------------------------------------------*/
/* o Menu Bar */
/*--------------------------------------------------------------------------------------*/
EXTERN_API( short )
GetMBarHeight (void) TWOWORDINLINE(0x3EB8, 0x0BAA);
if TARGET_OS_MAC
#define MacDrawMenuBar DrawMenuBar
endif
EXTERN_API( void )
MacDrawMenuBar (void) ONEWORDINLINE(0xA937);
EXTERN_API( void )
InvalMenuBar (void) ONEWORDINLINE(0xA81D);
EXTERN_API( void )
HiliteMenu (MenuID menuID) ONEWORDINLINE(0xA938);
EXTERN_API( Handle )
GetNewMBar (short menuBarID) ONEWORDINLINE(0xA9C0);
EXTERN_API( Handle )
GetMenuBar (void) ONEWORDINLINE(0xA93B);
EXTERN_API( void )
SetMenuBar (Handle menuList) ONEWORDINLINE(0xA93C);
EXTERN_API( MenuRef )
GetMenuHandle (MenuID menuID) ONEWORDINLINE(0xA949);
if TARGET_OS_MAC
#define MacInsertMenu InsertMenu
endif
EXTERN_API( void )
MacInsertMenu (MenuRef theMenu,
MenuID beforeID) ONEWORDINLINE(0xA935);
if TARGET_OS_MAC
#define MacDeleteMenu DeleteMenu
endif
EXTERN_API( void )
MacDeleteMenu (MenuID menuID) ONEWORDINLINE(0xA936);
EXTERN_API( void )
ClearMenuBar (void) ONEWORDINLINE(0xA934);
EXTERN_API( void )
SetMenuFlashCount (short count) ONEWORDINLINE(0xA94A);
/* SetMenuFlash() has been renamed to SetMenuFlashCount() in Carbon */
if CALL_NOT_IN_CARBON
EXTERN_API( void )
SetMenuFlash (short count) ONEWORDINLINE(0xA94A);
if CALL_NOT_IN_CARBON
define SetMenuFlashCount( count ) SetMenuFlash( count )
endif /* CALL_NOT_IN_CARBON */
endif /* CALL_NOT_IN_CARBON */
EXTERN_API( void )
FlashMenuBar (MenuID menuID) ONEWORDINLINE(0xA94C);
/* These are obsolete because Carbon does not support desk accessories.*/
if CALL_NOT_IN_CARBON
EXTERN_API( Boolean )
SystemEdit (short editCmd) ONEWORDINLINE(0xA9C2);
EXTERN_API( void )
SystemMenu (long menuResult) ONEWORDINLINE(0xA9B5);
/* Routines available in Mac OS 8.5 and later*/
endif /* CALL_NOT_IN_CARBON */
EXTERN_API( Boolean )
IsMenuBarVisible (void);
EXTERN_API( void )
ShowMenuBar (void);
EXTERN_API( void )
HideMenuBar (void);
/*--------------------------------------------------------------------------------------*/
/* o Menu Item Accessors */
/*--------------------------------------------------------------------------------------*/
if TARGET_OS_MAC
#define MacCheckMenuItem CheckMenuItem
endif
EXTERN_API( void )
MacCheckMenuItem (MenuRef theMenu,
short item,
Boolean checked) ONEWORDINLINE(0xA945);
/* CheckItem() has been renamed to CheckMenuItem() in Carbon */
if CALL_NOT_IN_CARBON
EXTERN_API( void )
CheckItem (MenuRef theMenu,
short item,
Boolean checked) ONEWORDINLINE(0xA945);
if TARGET_OS_MAC && CALL_NOT_IN_CARBON
define CheckMenuItem( menu, item, checked ) CheckItem( menu, item, checked )
endif
endif /* CALL_NOT_IN_CARBON */
EXTERN_API( void )
SetMenuItemText (MenuRef theMenu,
short item,
ConstStr255Param itemString) ONEWORDINLINE(0xA947);
EXTERN_API( void )
GetMenuItemText (MenuRef theMenu,
short item,
Str255 itemString) ONEWORDINLINE(0xA946);
EXTERN_API( void )
SetItemMark (MenuRef theMenu,
short item,
CharParameter markChar) ONEWORDINLINE(0xA944);
EXTERN_API( void )
GetItemMark (MenuRef theMenu,
short item,
CharParameter * markChar) ONEWORDINLINE(0xA943);
EXTERN_API( void )
SetItemCmd (MenuRef theMenu,
short item,
CharParameter cmdChar) ONEWORDINLINE(0xA84F);
EXTERN_API( void )
GetItemCmd (MenuRef theMenu,
short item,
CharParameter * cmdChar) ONEWORDINLINE(0xA84E);
EXTERN_API( void )
SetItemIcon (MenuRef theMenu,
short item,
short iconIndex) ONEWORDINLINE(0xA940);
/* icon is returned in high byte of 16-bit iconIndex */
EXTERN_API( void )
GetItemIcon (MenuRef theMenu,
short item,
short * iconIndex) ONEWORDINLINE(0xA93F);
EXTERN_API( void )
SetItemStyle (MenuRef theMenu,
short item,
StyleParameter chStyle) ONEWORDINLINE(0xA942);
EXTERN_API( void )
GetItemStyle (MenuRef theMenu,
short item,
Style * chStyle);
/* These APIs are not supported in Carbon. Please use EnableMenuItem and */
/* DisableMenuItem (available back through Mac OS 8.5) instead. */
if CALL_NOT_IN_CARBON
EXTERN_API( void )
DisableItem (MenuRef theMenu,
short item) ONEWORDINLINE(0xA93A);
EXTERN_API( void )
EnableItem (MenuRef theMenu,
short item) ONEWORDINLINE(0xA939);
/* Routines available in Mac OS 8.0 (Appearance 1.0) and later*/
endif /* CALL_NOT_IN_CARBON */
EXTERN_API( OSErr )
SetMenuItemCommandID (MenuRef inMenu,
SInt16 inItem,
MenuCommand inCommandID) THREEWORDINLINE(0x303C, 0x0502, 0xA825);
EXTERN_API( OSErr )
GetMenuItemCommandID (MenuRef inMenu,
SInt16 inItem,
MenuCommand * outCommandID) THREEWORDINLINE(0x303C, 0x0503, 0xA825);
EXTERN_API( OSErr )
SetMenuItemModifiers (MenuRef inMenu,
SInt16 inItem,
UInt8 inModifiers) THREEWORDINLINE(0x303C, 0x0404, 0xA825);
EXTERN_API( OSErr )
GetMenuItemModifiers (MenuRef inMenu,
SInt16 inItem,
UInt8 * outModifiers) THREEWORDINLINE(0x303C, 0x0505, 0xA825);
EXTERN_API( OSErr )
SetMenuItemIconHandle (MenuRef inMenu,
SInt16 inItem,
UInt8 inIconType,
Handle inIconHandle) THREEWORDINLINE(0x303C, 0x0606, 0xA825);
EXTERN_API( OSErr )
GetMenuItemIconHandle (MenuRef inMenu,
SInt16 inItem,
UInt8 * outIconType,
Handle * outIconHandle) THREEWORDINLINE(0x303C, 0x0707, 0xA825);
EXTERN_API( OSErr )
SetMenuItemTextEncoding (MenuRef inMenu,
SInt16 inItem,
TextEncoding inScriptID) THREEWORDINLINE(0x303C, 0x0408, 0xA825);
EXTERN_API( OSErr )
GetMenuItemTextEncoding (MenuRef inMenu,
SInt16 inItem,
TextEncoding * outScriptID) THREEWORDINLINE(0x303C, 0x0509, 0xA825);
EXTERN_API( OSErr )
SetMenuItemHierarchicalID (MenuRef inMenu,
SInt16 inItem,
MenuID inHierID) THREEWORDINLINE(0x303C, 0x040D, 0xA825);
EXTERN_API( OSErr )
GetMenuItemHierarchicalID (MenuRef inMenu,
SInt16 inItem,
MenuID * outHierID) THREEWORDINLINE(0x303C, 0x050E, 0xA825);
EXTERN_API( OSErr )
SetMenuItemFontID (MenuRef inMenu,
SInt16 inItem,
SInt16 inFontID) THREEWORDINLINE(0x303C, 0x040F, 0xA825);
EXTERN_API( OSErr )
GetMenuItemFontID (MenuRef inMenu,
SInt16 inItem,
SInt16 * outFontID) THREEWORDINLINE(0x303C, 0x0510, 0xA825);
EXTERN_API( OSErr )
SetMenuItemRefCon (MenuRef inMenu,
SInt16 inItem,
UInt32 inRefCon) THREEWORDINLINE(0x303C, 0x050A, 0xA825);
EXTERN_API( OSErr )
GetMenuItemRefCon (MenuRef inMenu,
SInt16 inItem,
UInt32 * outRefCon) THREEWORDINLINE(0x303C, 0x050B, 0xA825);
/* Please use the menu item property APIs in Carbon.*/
if CALL_NOT_IN_CARBON
EXTERN_API( OSErr )
SetMenuItemRefCon2 (MenuRef inMenu,
SInt16 inItem,
UInt32 inRefCon2) THREEWORDINLINE(0x303C, 0x0511, 0xA825);
EXTERN_API( OSErr )
GetMenuItemRefCon2 (MenuRef inMenu,
SInt16 inItem,
UInt32 * outRefCon2) THREEWORDINLINE(0x303C, 0x0512, 0xA825);
endif /* CALL_NOT_IN_CARBON */
EXTERN_API( OSErr )
SetMenuItemKeyGlyph (MenuRef inMenu,
SInt16 inItem,
SInt16 inGlyph) THREEWORDINLINE(0x303C, 0x0513, 0xA825);
EXTERN_API( OSErr )
GetMenuItemKeyGlyph (MenuRef inMenu,
SInt16 inItem,
SInt16 * outGlyph) THREEWORDINLINE(0x303C, 0x0514, 0xA825);
/* Routines available in Mac OS 8.5 and later (supporting enabling/disabling of > 31 items)*/
if TARGET_OS_MAC
#define MacEnableMenuItem EnableMenuItem
endif
EXTERN_API( void )
MacEnableMenuItem (MenuRef theMenu,
MenuItemIndex item);
EXTERN_API( void )
DisableMenuItem (MenuRef theMenu,
MenuItemIndex item);
EXTERN_API( Boolean )
IsMenuItemEnabled (MenuRef menu,
MenuItemIndex item);
EXTERN_API( void )
EnableMenuItemIcon (MenuRef theMenu,
MenuItemIndex item) THREEWORDINLINE(0x303C, 0x0019, 0xA825);
EXTERN_API( void )
DisableMenuItemIcon (MenuRef theMenu,
MenuItemIndex item) THREEWORDINLINE(0x303C, 0x0020, 0xA825);
EXTERN_API( Boolean )
IsMenuItemIconEnabled (MenuRef menu,
MenuItemIndex item) THREEWORDINLINE(0x303C, 0x0018, 0xA825);
/*--------------------------------------------------------------------------------------*/
/* o Menu Item Color Tables */
/* */
/* Menu color manipulation is considered deprecated with the advent of the Appearance */
/* Manager. Avoid using these routines if possible */
/*--------------------------------------------------------------------------------------*/
EXTERN_API( void )
DeleteMCEntries (MenuID menuID,
short menuItem) ONEWORDINLINE(0xAA60);
EXTERN_API( MCTableHandle )
GetMCInfo (void) ONEWORDINLINE(0xAA61);
EXTERN_API( void )
SetMCInfo (MCTableHandle menuCTbl) ONEWORDINLINE(0xAA62);
EXTERN_API( void )
DisposeMCInfo (MCTableHandle menuCTbl) ONEWORDINLINE(0xAA63);
EXTERN_API( MCEntryPtr )
GetMCEntry (MenuID menuID,
short menuItem) ONEWORDINLINE(0xAA64);
EXTERN_API( void )
SetMCEntries (short numEntries,
MCTablePtr menuCEntries) ONEWORDINLINE(0xAA65);
/*--------------------------------------------------------------------------------------*/
/* o Properties (Mac OS 8.5 and later) */
/* */
/* With the following property APIs, you can attach any piece of data you'd like to a */
/* menu or menu item. Passing zero for the item number parameter indicates you'd like */
/* to attach the data to the menu itself, and not to any specific menu item. */
/*--------------------------------------------------------------------------------------*/
enum {
kMenuPropertyPersistent = 0x00000001 /* whether this property gets saved when flattening the menu*/
};
EXTERN_API( OSStatus )
GetMenuItemProperty (MenuRef menu,
MenuItemIndex item,
OSType propertyCreator,
OSType propertyTag,
UInt32 bufferSize,
UInt32 * actualSize,
void * propertyBuffer);
EXTERN_API( OSStatus )
GetMenuItemPropertySize (MenuRef menu,
MenuItemIndex item,
OSType propertyCreator,
OSType propertyTag,
UInt32 * size);
EXTERN_API( OSStatus )
SetMenuItemProperty (MenuRef menu,
MenuItemIndex item,
OSType propertyCreator,
OSType propertyTag,
UInt32 propertySize,
const void * propertyData);
EXTERN_API( OSStatus )
RemoveMenuItemProperty (MenuRef menu,
MenuItemIndex item,
OSType propertyCreator,
OSType propertyTag);
EXTERN_API( OSStatus )
GetMenuItemPropertyAttributes (MenuRef menu,
MenuItemIndex item,
OSType propertyCreator,
OSType propertyTag,
UInt32 * attributes);
EXTERN_API( OSStatus )
ChangeMenuItemPropertyAttributes (MenuRef menu,
MenuItemIndex item,
OSType propertyCreator,
OSType propertyTag,
UInt32 attributesToSet,
UInt32 attributesToClear);
/*--------------------------------------------------------------------------------------*/
/* o Attributes (Carbon and later) */
/* */
/* Each menu and menu item has attribute flags. */
/*--------------------------------------------------------------------------------------*/
EXTERN_API( OSStatus )
GetMenuAttributes (MenuRef menu,
MenuAttributes * outAttributes);
EXTERN_API( OSStatus )
ChangeMenuAttributes (MenuRef menu,
MenuAttributes setTheseAttributes,
MenuAttributes clearTheseAttributes);
EXTERN_API( OSStatus )
GetMenuItemAttributes (MenuRef menu,
MenuItemIndex item,
MenuItemAttributes * outAttributes);
EXTERN_API( OSStatus )
ChangeMenuItemAttributes (MenuRef menu,
MenuItemIndex item,
MenuItemAttributes setTheseAttributes,
MenuItemAttributes clearTheseAttributes);
/*--------------------------------------------------------------------------------------*/
/* o Mass menu item enabling and disabling (Carbon and later) */
/* */
/* Useful when rewriting code that whacks the enableFlags field directly. */
/*--------------------------------------------------------------------------------------*/
EXTERN_API( void )
DisableAllMenuItems (MenuRef theMenu);
EXTERN_API( void )
EnableAllMenuItems (MenuRef theMenu);
EXTERN_API( Boolean )
MenuHasEnabledItems (MenuRef theMenu);
/*--------------------------------------------------------------------------------------*/
/* o Menu tracking status (Carbon and later) */
/* */
/* Get info about the selected menu item during menu tracking. Replaces direct access */
/* to low-mem globals that used to hold this info. */
/*--------------------------------------------------------------------------------------*/
EXTERN_API( OSStatus )
GetMenuTrackingData (MenuRef theMenu,
MenuTrackingData * outData);
/*--------------------------------------------------------------------------------------*/
/* o.Universal command ID access (Carbon and later) */
/* */
/* These APIs allow you to operate on menu items strictly by command ID, with no */
/* knowledge of a menu item's index. */
/*--------------------------------------------------------------------------------------*/
EXTERN_API( ItemCount )
CountMenuItemsWithCommandID (MenuRef menu,
MenuCommand commandID);
EXTERN_API( OSStatus )
GetIndMenuItemWithCommandID (MenuRef menu,
MenuCommand commandID,
UInt32 itemIndex,
MenuRef * outMenu,
MenuItemIndex * outIndex);
EXTERN_API( void )
EnableMenuCommand (MenuRef theMenu,
MenuCommand commandID);
EXTERN_API( void )
DisableMenuCommand (MenuRef theMenu,
MenuCommand commandID);
EXTERN_API( Boolean )
IsMenuCommandEnabled (MenuRef menu,
MenuCommand commandID);
EXTERN_API( OSStatus )
GetMenuCommandProperty (MenuRef menu,
MenuCommand commandID,
OSType propertyCreator,
OSType propertyTag,
ByteCount bufferSize,
ByteCount * actualSize,
void * propertyBuffer);
EXTERN_API( OSStatus )
GetMenuCommandPropertySize (MenuRef menu,
MenuCommand commandID,
OSType propertyCreator,
OSType propertyTag,
ByteCount * size);
EXTERN_API( OSStatus )
SetMenuCommandProperty (MenuRef menu,
MenuCommand commandID,
OSType propertyCreator,
OSType propertyTag,
ByteCount propertySize,
const void * propertyData);
EXTERN_API( OSStatus )
RemoveMenuCommandProperty (MenuRef menu,
MenuCommand commandID,
OSType propertyCreator,
OSType propertyTag);
/*--------------------------------------------------------------------------------------*/
/* o.Standard font menu (Carbon and later) */
/* */
/* These APIs allow you to create and use the standard font menu. */
/*--------------------------------------------------------------------------------------*/
enum {
kHierarchicalFontMenuOption = 0x00000001
};
EXTERN_API( OSStatus )
CreateStandardFontMenu (MenuRef menu,
MenuItemIndex afterItem,
MenuID firstHierMenuID,
OptionBits options,
ItemCount * outHierMenuCount);
EXTERN_API( OSStatus )
UpdateStandardFontMenu (MenuRef menu,
ItemCount * outHierMenuCount);
EXTERN_API( OSStatus )
GetFontFamilyFromMenuSelection (MenuRef menu,
MenuItemIndex item,
FMFontFamily * outFontFamily,
FMFontStyle * outStyle);
/*--------------------------------------------------------------------------------------*/
/* o Contextual Menu routines and constants */
/* available with Conxtextual Menu extension 1.0 and later */
/*--------------------------------------------------------------------------------------*/
/* Gestalt Selector for classic 68K apps only. */
/* CFM apps should weak link and check the symbols. */
enum {
gestaltContextualMenuAttr = FOUR_CHAR_CODE('cmnu'),
gestaltContextualMenuUnusedBit = 0,
gestaltContextualMenuTrapAvailable = 1
};
/* Values indicating what kind of help the application supports */
enum {
kCMHelpItemNoHelp = 0,
kCMHelpItemAppleGuide = 1,
kCMHelpItemOtherHelp = 2
};
/* Values indicating what was chosen from the menu */
enum {
kCMNothingSelected = 0,
kCMMenuItemSelected = 1,
kCMShowHelpSelected = 3
};
EXTERN_API( OSStatus )
InitContextualMenus (void) TWOWORDINLINE(0x7001, 0xAA72);
EXTERN_API( Boolean )
IsShowContextualMenuClick (const EventRecord * inEvent) TWOWORDINLINE(0x7002, 0xAA72);
EXTERN_API( OSStatus )
ContextualMenuSelect (MenuRef inMenu,
Point inGlobalLocation,
Boolean inReserved,
UInt32 inHelpType,
ConstStr255Param inHelpItemString,
const AEDesc * inSelection,
UInt32 * outUserSelectionType,
SInt16 * outMenuID,
MenuItemIndex * outMenuItem) TWOWORDINLINE(0x7003, 0xAA72);
EXTERN_API( Boolean )
ProcessIsContextualMenuClient (ProcessSerialNumber * inPSN) TWOWORDINLINE(0x7004, 0xAA72);
/*--------------------------------------------------------------------------------------*/
/* o Contextual Menu Plugin Notes */
/* */
/* For Mac OS X, we will support a new type of Contextual Menu Plugin: the CFM-based */
/* plugin. Each plugin must be a separate file in the Contextual Menu Items subfolder */
/* of the system folder. It must export two functions and has the option of exporting */
/* a third; these three functions are virtually identical to the methods that must be */
/* supported by a SOM-based plugin. */
/* */
/* The required symbols must be named "ExamineContext" and "HandleSelection". */
/* The optional symbol must be named "PostMenuCleanup". */
/* */
/* The ExamineContext routine must have the following prototype: */
/* pascal OSStatus ExamineContext( const AEDesc* inContext, */
/* AEDescList* outCommandPairs ); */
/* */
/* The HandleSelection routine must have the following prototype: */
/* pascal OSStatus HandleSelection( const AEDesc* inContext, */
/* SInt32 inCommandID ); */
/* */
/* The PostMenuCleanup routine must have the following prototype: */
/* pascal void PostMenuCleanup( void ); */
/*--------------------------------------------------------------------------------------*/
if CALL_NOT_IN_CARBON
EXTERN_API_C( MenuRef )
newmenu (MenuID menuID,
const char * menuTitle);
EXTERN_API_C( void )
appendmenu (MenuRef menu,
const char * data);
EXTERN_API_C( void )
insertmenuitem (MenuRef theMenu,
const char * itemString,
short afterItem);
EXTERN_API_C( long )
menuselect (const Point * startPt);
EXTERN_API_C( void )
setmenuitemtext (MenuRef menu,
short item,
const char * itemString);
EXTERN_API_C( void )
getmenuitemtext (MenuRef menu,
short item,
char * itemString);
endif /* CALL_NOT_IN_CARBON */
if OLDROUTINENAMES
define AddResMenu(theMenu, theType) AppendResMenu(theMenu, theType)
define InsMenuItem(theMenu, itemString, afterItem) InsertMenuItem(theMenu, itemString, afterItem)
define DelMenuItem( theMenu, item ) DeleteMenuItem( theMenu, item )
if TARGET_OS_MAC
define SetItem MacSetItem
define GetItem MacGetItem
endif
define MacSetItem(theMenu, item, itemString) SetMenuItemText(theMenu, item, itemString)
define MacGetItem(theMenu, item, itemString) GetMenuItemText(theMenu, item, itemString)
define GetMHandle(menuID) GetMenuHandle(menuID)
define DelMCEntries(menuID, menuItem) DeleteMCEntries(menuID, menuItem)
define DispMCInfo(menuCTbl) DisposeMCInfo(menuCTbl)
if CALL_NOT_IN_CARBON
define addresmenu(menu, data) appendresmenu(menu, data)
define getitem(menu, item, itemString) getmenuitemtext(menu, item, itemString)
define setitem(menu, item, itemString) setmenuitemtext(menu, item, itemString)
define insmenuitem(theMenu, itemString, afterItem) insertmenuitem(theMenu, itemString, afterItem)
endif
endif /* OLDROUTINENAMES */
if ACCESSOR_CALLS_ARE_FUNCTIONS
/* Getters */
EXTERN_API( MenuID )
GetMenuID (MenuRef menu);
EXTERN_API( SInt16 )
GetMenuWidth (MenuRef menu);
EXTERN_API( SInt16 )
GetMenuHeight (MenuRef menu);
EXTERN_API( StringPtr )
GetMenuTitle (MenuRef menu,
Str255 title);
EXTERN_API( OSStatus )
GetMenuDefinition (MenuRef menu,
MenuDefSpecPtr outDefSpec);
/* Setters */
EXTERN_API( void )
SetMenuID (MenuRef menu,
MenuID menuID);
EXTERN_API( void )
SetMenuWidth (MenuRef menu,
SInt16 width);
EXTERN_API( void )
SetMenuHeight (MenuRef menu,
SInt16 height);
EXTERN_API( OSStatus )
SetMenuTitle (MenuRef menu,
ConstStr255Param title);
EXTERN_API( OSStatus )
SetMenuDefinition (MenuRef menu,
const MenuDefSpec * defSpec);
endif /* ACCESSOR_CALLS_ARE_FUNCTIONS */
if TARGET_OS_WIN32
endif /* TARGET_OS_WIN32 */
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 /* __MENUS__ */
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.