home *** CD-ROM | disk | FTP | other *** search
- /*
- // $VER: pm.h 9.00 (20.4.99)
- //
- // Library base, tags and macro definitions
- // for popupmenu.library.
- //
- // ©1996-1998 Henrik Isaksson
- // All Rights Reserved.
- //
- // Changes:
- //
- // 9.00 New PopupMenu structure.
- // Several new tags and updated macros.
- // 9.01 Added PM_HintBox
- //
- */
-
- #ifndef LIBRARIES_POPUPMENU_H
- #define LIBRARIES_POPUPMENU_H
-
- #ifndef EXEC_TYPES_H
- #include <exec/types.h>
- #endif
-
- #ifndef EXEC_LIBRARIES_H
- #include <exec/libraries.h>
- #endif
-
- #ifndef UTILITY_TAGITEM_H
- #include <utility/tagitem.h>
- #endif
-
- #ifndef INTUITION_CLASSUSR_H
- #include <intuition/classusr.h>
- #endif
-
- /*
- // Tags passed to PM_OpenPopupMenuA and PM_FilterIMsgA
- */
-
- #define PM_Menu (TAG_USER+4) /* (struct PopupMenu *) Pointer to menulist initialized by MakeMenu() */
- #define PM_Top (TAG_USER+12) /* (LONG) Top (Y) position */
- #define PM_Left (TAG_USER+13) /* (LONG) Left (X) position */
- #define PM_Code (TAG_USER+14) /* (UWORD) Obsolete. */
- #define PM_Right (TAG_USER+15) /* (LONG) X position relative to right edge */
- #define PM_Bottom (TAG_USER+16) /* (LONG) Y position relative to bottom edge */
- #define PM_MinWidth (TAG_USER+17) /* (LONG) Minimum width */
- #define PM_MinHeight (TAG_USER+18) /* (LONG) Minimum height */
- #define PM_ForceFont (TAG_USER+19) /* (struct TextFont *tf) Use this font instead of user preferences. */
- #define PM_PullDown (TAG_USER+90) /* (BOOL) Turn the menu into a pulldown menu. */
- #define PM_MenuHandler (TAG_USER+91) /* (struct Hook *) Hook that is called for each selected item, after the */
- /* menu has been closed. This tag turns on MultiSelect. */
- #define PM_AutoPullDown (TAG_USER+92) /* (BOOL) Automatic pulldown menu. (PM_FilterIMsg only) */
- #define PM_LocaleHook (TAG_USER+93) /* (struct Hook *) Locale "GetString()" hook. (Not yet implemented) */
- #define PM_CenterScreen (TAG_USER+94) /* (BOOL) Center menu on the screen */
- #define PM_UseLMB (TAG_USER+95) /* (BOOL) Left mouse button should be used to select an item */
- /* (right button selects multiple items) */
- #define PM_DRIPensOnly (TAG_USER+96) /* (BOOL) Only use the screen's DRI pens, revert to system images if necessary. */
- /* Use with care as it overrides the user's prefs! */
- #define PM_HintBox (TAG_USER+97) /* (BOOL) Close the menu when the mouse is moved. */
-
- /*
- // Tags passed to MakeItem
- */
-
- #define PM_Title (TAG_USER+20) /* (STRPTR) Item title */
- #define PM_UserData (TAG_USER+21) /* (void *) Anything, returned by OpenPopupMenu when this item is selected */
- #define PM_ID (TAG_USER+22) /* (ULONG) ID number, if you want an easy way to access this item later */
- #define PM_CommKey (TAG_USER+47) /* (char) Keyboard shortcut for this item. */
- #define PM_TitleID (TAG_USER+49) /* (ULONG) Locale string ID */
- #define PM_Object (TAG_USER+43) /* (Object *) BOOPSI object with the abillity to render this item */
-
- /* Submenu & Layout tags */
- /* PM_Sub & PM_Members are mutally exclusive */
- #define PM_Sub (TAG_USER+23) /* (PopupMenu *) Pointer to submenu list (from PM_MakeMenu) */
- #define PM_Members (TAG_USER+65) /* (PopupMenu *) Members for this group (list created by PM_MakeMenu) */
- #define PM_LayoutMode (TAG_USER+64) /* (ULONG) Layout method (PML_Horizontal / PML_Vertical) */
-
- /* Text attributes */
- #define PM_FillPen (TAG_USER+26) /* (BOOL) Make the item appear in FILLPEN */
- #define PM_Italic (TAG_USER+29) /* (BOOL) Italic text */
- #define PM_Bold (TAG_USER+30) /* (BOOL) Bold text */
- #define PM_Underlined (TAG_USER+31) /* (BOOL) Underlined text */
- #define PM_ShadowPen (TAG_USER+34) /* (BOOL) Draw text in SHADOWPEN */
- #define PM_ShinePen (TAG_USER+35) /* (BOOL) Draw text in SHINEPEN */
- #define PM_Center (TAG_USER+36) /* (BOOL) Center the text of this item */
- #define PM_TextPen (TAG_USER+45) /* (ULONG) Pen number for text colour of this item */
- #define PM_Shadowed (TAG_USER+48) /* (BOOL) Draw a shadow behind the text */
-
- /* Other item attributes */
- #define PM_TitleBar (TAG_USER+32) /* (BOOL) Horizontal separator bar */
- #define PM_WideTitleBar (TAG_USER+33) /* (BOOL) Same as above, but full width */
- #define PM_NoSelect (TAG_USER+25) /* (BOOL) Make the item unselectable (without visual indication) */
- #define PM_Disabled (TAG_USER+38) /* (BOOL) Disable an item */
- #define PM_Hidden (TAG_USER+63) /* (BOOL) This item is not to be drawn (nor used in the layout process) */
-
- /* Images & Icons */
- #define PM_ImageSelected (TAG_USER+39) /* (struct Image *) Image when selected, title will be rendered on top it */
- #define PM_ImageUnselected (TAG_USER+40) /* (struct Image *) Image when unselected */
- #define PM_IconSelected (TAG_USER+41) /* (struct Image *) Icon when selected */
- #define PM_IconUnselected (TAG_USER+42) /* (struct Image *) Icon when unselected */
-
- /* Check/MX items */
- #define PM_Checkit (TAG_USER+27) /* (BOOL) Leave space for a checkmark */
- #define PM_Checked (TAG_USER+28) /* (BOOL) Make this item is checked */
- #define PM_AutoStore (TAG_USER+44) /* (BOOL *) Pointer to BOOL reflecting the current state of the item */
- #define PM_Exclude (TAG_USER+37) /* (PM_IDLst *) Items to unselect or select when this gets selected */
-
- /* Dynamic construction/destruction */
- #define PM_SubConstruct (TAG_USER+61) /* (struct Hook *) Constructor hook for submenus. Called before menu is opened. */
- #define PM_SubDestruct (TAG_USER+62) /* (struct Hook *) Destructor hook for submenus. Called after menu has closed. */
-
- /* Special/misc. stuff */
- #define PM_UserDataString (TAG_USER+46) /* (STRPTR) Allocates memory and copies the string to UserData. */
- #define PM_Flags (TAG_USER+24) /* (UlONG) For internal use */
- #define PM_ColourBox (TAG_USER+60) /* (UlONG) Filled rectangle (for palettes etc.) */
-
- /*
- // Tags passed to MakeMenu
- */
-
- #define PM_Item (TAG_USER+50) /* (PopupMenu *) Item pointer from MakeItem */
- #define PM_Dummy (TAG_USER+51) /* (void) Ignored. */
-
- /*
- // Tags passed to MakeIDList
- */
-
- #define PM_ExcludeID (TAG_USER+55) /* (ULONG) ID number of menu to deselect when this gets selected */
- #define PM_IncludeID (TAG_USER+56) /* (ULONG) ID number of menu to select when this gets selected */
- #define PM_ReflectID (TAG_USER+57) /* (ULONG) ID number of menu that should reflect the state of this one */
- #define PM_InverseID (TAG_USER+58) /* (ULONG) ID number of menu to inverse reflect the state of this one */
-
- /*
- // Tags for PM_InsertMenuItemA()
- */
-
- #define PM_Insert_Before (TAG_USER+200) /* (BOOL) Insert before the item pointed to by the following argument (N/A) */
- #define PM_Insert_BeforeID (TAG_USER+201) /* (ULONG) Insert before the first item with ID equal to the argument */
- #define PM_Insert_After (TAG_USER+202) /* (PopupMenu *) Insert after the item pointed to by the following argument */
- #define PM_Insert_AfterID (TAG_USER+203) /* (ULONG) Insert after the first item with ID equal to the argument */
- #define PM_Insert_Last (TAG_USER+205) /* (BOOL) Insert after the last item */
- #define PM_Insert_First (TAG_USER+209) /* (BOOL) Insert after the first item (which is usually invisible) */
- #define PM_InsertSub_First (TAG_USER+206) /* (PopupMenu *) Insert before the first item in the submenu */
- #define PM_InsertSub_Last (TAG_USER+207) /* (PopupMenu *) Insert at the and of a submenu */
- #define PM_InsertSub_Sorted (TAG_USER+208) /* (PopupMenu *) (N/A) */
- #define PM_Insert_Item (TAG_USER+210) /* (PopupMenu *) Item to insert, may be repeated for several items */
-
- /*
- // Layout methods
- */
-
- #define PML_None 0 /* Normal item */
- #define PML_Horizontal 1 /* Horizontal group */
- #define PML_Vertical 2 /* Vertical group */
- #define PML_Table 3 /* Table group */
- #define PML_Default 255 /* Don't use */
-
- /*
- // Macros
- */
-
- #define PMMenu(t) PM_MakeMenu(\
- PM_Item, PM_MakeItem(PM_Hidden, TRUE, TAG_DONE),\
- PM_Item, PM_MakeItem(PM_Title, t, PM_NoSelect, TRUE, PM_ShinePen, TRUE, PM_Shadowed, TRUE, PM_Center, TRUE, TAG_DONE),\
- PM_Item, PM_MakeItem(PM_WideTitleBar, TRUE, TAG_DONE)
- #define PMMenuID(t) PM_MakeMenu(\
- PM_Item, PM_MakeItem(PM_Hidden, TRUE, TAG_DONE),\
- PM_Item, PM_MakeItem(PM_TitleID, t, PM_NoSelect, TRUE, PM_ShinePen, TRUE, PM_Shadowed, TRUE, PM_Center, TRUE, TAG_DONE),\
- PM_Item, PM_MakeItem(PM_WideTitleBar, TRUE, TAG_DONE)
- #define PMSubMenu(t) PM_Sub, PM_MakeMenu(PM_Item, PM_MakeItem(PM_Title, t, PM_NoSelect, TRUE, PM_ShinePen, TRUE, TAG_DONE),\
- PM_Item, PM_MakeItem(PM_WideTitleBar, TRUE, TAG_DONE)
- #define PMSimpleSub PM_Sub, PM_MakeMenu(PM_Dummy, 0
- #define PMItem(t) PM_Item, PM_MakeItem(PM_Title, t
- #define PMItemID(t) PM_Item, PM_MakeItem(PM_TitleID, t
- #define PMInfo(t) PM_Item, PM_MakeItem(PM_Title, t, PM_NoSelect, TRUE, PM_ShinePen, TRUE
- #define PMColBox(c) PM_Item, PM_MakeItem(PM_ColourBox, c
- #define PMBar PM_Item, PM_MakeItem(PM_TitleBar, TRUE
- #define PMMenuTitle(t) PM_Item, PM_MakeItem(PM_Title, t, PM_NoSelect, TRUE, PM_ShinePen, TRUE, PM_Shadowed, TRUE, PM_Center, TRUE, TAG_DONE),\
- PM_Item, PM_MakeItem(PM_WideTitleBar, TRUE, TAG_DONE)
- #define PMHoriz PM_Item, PM_MakeItem(PM_NoSelect, TRUE, PM_LayoutMode, PML_Horizontal
- #define PMVert PM_Item, PM_MakeItem(PM_NoSelect, TRUE, PM_LayoutMode, PML_Vertical
- #define PMMembers PM_Members, PM_MakeMenu(PM_Dummy, 0
-
- #define PMExcl PM_Exclude, PM_MakeIDList(
- #define ExID(id) PM_ExcludeID, id
- #define InID(id) PM_IncludeID, id
- #define RefID(id) PM_ReflectID, id
- #define InvID(id) PM_InverseID, id
-
- #define PMCheckItem(t,id) PM_Item, PM_MakeItem(PM_Title, t, PM_ID, id, PM_Checkit, TRUE
-
- #define PMEnd TAG_DONE)
-
- #ifndef End
- #define End TAG_DONE)
- #endif
-
- #define PMERR (-5L)
-
- /* For compatibility with old sources - DO NOT USE */
- #define PMTitleBar PMBar
- #define PMNarrowBar PMBar
- #define PMNarrowTitleBar PMBar
-
- /*
- // Library base
- */
-
- #ifndef PM_NOBASE
-
- struct PopupMenuBase {
- struct Library pmb_Library;
- ULONG pmb_SegList;
- ULONG pmb_Flags;
- struct Library *pmb_ExecBase; /* Theese library */
- struct Library *pmb_UtilityBase; /* pointers are */
- struct Library *pmb_IntuitionBase; /* valid as long */
- struct Library *pmb_GfxBase; /* as pm lib */
- struct Library *pmb_DOSBase; /* is open. */
- BOOL pmb_NewPrefs; /* Reload prefs. */
- struct Library *pmb_CxBase; /* commodities. */
- };
-
- #endif
-
- #define POPUPMENU_VERSION 9L
- #define POPUPMENU_NAME "popupmenu.library"
- #define OPEN_PM_LIB (PopupMenuBase=(struct PopupMenuBase *)\
- OpenLibrary(POPUPMENU_NAME, POPUPMENU_VERSION))
- #define CLOSE_PM_LIB if(PopupMenuBase) CloseLibrary((struct Library *)PopupMenuBase);
-
- /*
- // PopupMenu structure
- //
- // WARNING!
- // This structure may change in future versions.
- */
-
- #ifndef PMPRIV_H
-
- struct PopupMenu { /* Size: 0x1E - 0x3C */
- struct PopupMenu *Next; /* 0 Next menu in the list, NULL terminated */
- struct PopupMenu *Sub; /* 4 SubMenu or Group */
- union {
- STRPTR Title; /* 8 Title */
- ULONG TitleID; /* 8 Locale string ID */
- Object *Boopsi; /* 8 Boopsi object */
- };
- ULONG Flags; /* C Private flags */
- ULONG ID; /* 10 Item ID */
- APTR UserData; /* 14 UserData */
- WORD Left; /* 18 Left pos of this item, private! */
- WORD Top; /* 1A Top pos of this item, private! */
- UWORD Width; /* 1C Width of this item, private! */
- UWORD Height; /* 1E Height of this item, private! */
-
- /* NOTE: */
- /* The fields below exist only when they are required ! */
-
- UWORD ExtFlags;
- UBYTE Layout;
- UBYTE ColBox;
- struct PM_IDLst *Exclude; /* 20 Exclude/Included/Reflected items */
- BOOL *AutoSetPtr; /* 24 Ptr to BOOL containing current state */
- struct Image *Images[2]; /* 28 Images/Icons (0 - unselected, 1 - sel */
- UBYTE Masks[2]; /* 1C Image/Icon blit masks */
- UBYTE CommKey; /* 1E Command Key */
- UBYTE Weight; /* 1F Weight */
- ULONG TextPen; /* 20 Pen number for item's text */
- struct Hook *SubConstruct; /* 24 SubMenu Constructor hook */
- struct Hook *SubDestruct; /* 28 SubMenu Destructor hook */
- };
-
- #endif
-
- #endif
-