[Contents] [Index] [Help] [Retrace] [Browse <] [Browse >]

#ifndef LIBRARIES_GADTOOLS_H
#define LIBRARIES_GADTOOLS_H
/*
**      $VER: gadtools.h 39.9 (19.8.1992)
**      Includes Release 44.1
**
**      gadtools.library definitions
**
**      (C) Copyright 1989-1999 Amiga, Inc.
**      All Rights Reserved
*/

/*------------------------------------------------------------------------*/

#ifndef EXEC_TYPES_H
#include <exec/types.h>
#endif

#ifndef UTILITY_TAGITEM_H
#include <utility/tagitem.h>
#endif

#ifndef INTUITION_INTUITION_H
#include <intuition/intuition.h>
#endif

#ifndef INTUITION_GADGETCLASS_H
#include <intuition/gadgetclass.h>
#endif

/*------------------------------------------------------------------------*/

/* The kinds (almost classes) of gadgets that GadTools supports.
 * Use these identifiers when calling CreateGadgetA()
 */

#define GENERIC_KIND    0
#define BUTTON_KIND     1
#define CHECKBOX_KIND   2
#define INTEGER_KIND    3
#define LISTVIEW_KIND   4
#define MX_KIND         5
#define NUMBER_KIND     6
#define CYCLE_KIND      7
#define PALETTE_KIND    8
#define SCROLLER_KIND   9
/* Kind number 10 is reserved */
#define SLIDER_KIND     11
#define STRING_KIND     12
#define TEXT_KIND       13

#define NUM_KINDS       14

/*------------------------------------------------------------------------*/

/* 'Or' the appropriate set together for your Window IDCMPFlags: */

#define ARROWIDCMP      (IDCMP_GADGETUP | IDCMP_GADGETDOWN |\
        IDCMP_INTUITICKS | IDCMP_MOUSEBUTTONS)

#define BUTTONIDCMP     (IDCMP_GADGETUP)
#define CHECKBOXIDCMP   (IDCMP_GADGETUP)
#define INTEGERIDCMP    (IDCMP_GADGETUP)
#define LISTVIEWIDCMP   (IDCMP_GADGETUP | IDCMP_GADGETDOWN |\
        IDCMP_MOUSEMOVE | ARROWIDCMP)

#define MXIDCMP         (IDCMP_GADGETDOWN)
#define NUMBERIDCMP     (0L)
#define CYCLEIDCMP      (IDCMP_GADGETUP)
#define PALETTEIDCMP    (IDCMP_GADGETUP)

/* Use ARROWIDCMP|SCROLLERIDCMP if your scrollers have arrows: */
#define SCROLLERIDCMP   (IDCMP_GADGETUP | IDCMP_GADGETDOWN | IDCMP_MOUSEMOVE)
#define SLIDERIDCMP     (IDCMP_GADGETUP | IDCMP_GADGETDOWN | IDCMP_MOUSEMOVE)
#define STRINGIDCMP     (IDCMP_GADGETUP)

#define TEXTIDCMP       (0L)

/*------------------------------------------------------------------------*/

/* Generic NewGadget used by several of the gadget classes: */

struct NewGadget
{
    WORD ng_LeftEdge, ng_TopEdge;       /* gadget position */
    WORD ng_Width, ng_Height;           /* gadget size */
    UBYTE *ng_GadgetText;               /* gadget label */
    struct TextAttr *ng_TextAttr;       /* desired font for gadget label */
    UWORD ng_GadgetID;                  /* gadget ID */
    ULONG ng_Flags;                     /* see below */
    APTR ng_VisualInfo;                 /* Set to retval of GetVisualInfo() */
    APTR ng_UserData;                   /* gadget UserData */
};


/* ng_Flags control certain aspects of the gadget.  The first five control
 * the placement of the descriptive text.  Each gadget kind has its default,
 * which is usually PLACETEXT_LEFT.  Consult the autodocs for details.
 */

#define PLACETEXT_LEFT  0x0001  /* Right-align text on left side */
#define PLACETEXT_RIGHT 0x0002  /* Left-align text on right side */
#define PLACETEXT_ABOVE 0x0004  /* Center text above */
#define PLACETEXT_BELOW 0x0008  /* Center text below */
#define PLACETEXT_IN    0x0010  /* Center text on */

#define NG_HIGHLABEL    0x0020  /* Highlight the label */


/*------------------------------------------------------------------------*/

/* Fill out an array of these and pass that to CreateMenus(): */

struct NewMenu
{
    UBYTE nm_Type;              /* See below */
    /* Compiler inserts a PAD byte here */
    STRPTR nm_Label;            /* Menu's label */
    STRPTR nm_CommKey;          /* MenuItem Command Key Equiv */
    UWORD nm_Flags;             /* Menu or MenuItem flags (see note) */
    LONG nm_MutualExclude;      /* MenuItem MutualExclude word */
    APTR nm_UserData;           /* For your own use, see note */
};

/* Needed only by inside IM_ definitions below */
#define MENU_IMAGE      128

/* nm_Type determines what each NewMenu structure corresponds to.
 * for the NM_TITLE, NM_ITEM, and NM_SUB values, nm_Label should
 * be a text string to use for that menu title, item, or sub-item.
 * For IM_ITEM or IM_SUB, set nm_Label to point at the Image structure
 * you wish to use for this item or sub-item.
 * NOTE: At present, you may only use conventional images.
 * Custom images created from Intuition image-classes do not work.
 */
#define NM_TITLE        1       /* Menu header */
#define NM_ITEM         2       /* Textual menu item */
#define NM_SUB          3       /* Textual menu sub-item */

#define IM_ITEM         (NM_ITEM|MENU_IMAGE)    /* Graphical menu item */
#define IM_SUB          (NM_SUB|MENU_IMAGE)     /* Graphical menu sub-item */

/* The NewMenu array should be terminated with a NewMenu whose
 * nm_Type equals NM_END.
 */
#define NM_END          0       /* End of NewMenu array */

/* Starting with V39, GadTools will skip any NewMenu entries whose
 * nm_Type field has the NM_IGNORE bit set.
 */
#define NM_IGNORE       64


/* nm_Label should be a text string for textual items, a pointer
 * to an Image structure for graphical menu items, or the special
 * constant NM_BARLABEL, to get a separator bar.
 */
#define NM_BARLABEL     ((STRPTR)-1)

/* The nm_Flags field is used to fill out either the Menu->Flags or
 * MenuItem->Flags field.  Note that the sense of the MENUENABLED or
 * ITEMENABLED bit is inverted between this use and Intuition's use,
 * in other words, NewMenus are enabled by default.  The following
 * labels are provided to disable them:
 */
#define NM_MENUDISABLED MENUENABLED
#define NM_ITEMDISABLED ITEMENABLED

/* New for V39:  NM_COMMANDSTRING.  For a textual MenuItem or SubItem,
 * point nm_CommKey at an arbitrary string, and set the NM_COMMANDSTRING
 * flag.
 */
#define NM_COMMANDSTRING COMMSEQ

/* The following are pre-cleared (COMMSEQ, ITEMTEXT, and HIGHxxx are set
 * later as appropriate):
 * Under V39, the COMMSEQ flag bit is not cleared, since it now has
 * meaning.
 */
#define NM_FLAGMASK     (~(COMMSEQ | ITEMTEXT | HIGHFLAGS))
#define NM_FLAGMASK_V39 (~(ITEMTEXT | HIGHFLAGS))

/* You may choose among CHECKIT, MENUTOGGLE, and CHECKED.
 * Toggle-select menuitems are of type CHECKIT|MENUTOGGLE, along
 * with CHECKED if currently selected.  Mutually exclusive ones
 * are of type CHECKIT, and possibly CHECKED too.  The nm_MutualExclude
 * is a bit-wise representation of the items excluded by this one,
 * so in the simplest case (choose 1 among n), these flags would be
 * ~1, ~2, ~4, ~8, ~16, etc.  See the Intuition Menus chapter.
 */

/* A UserData pointer can be associated with each Menu and MenuItem structure.
 * The CreateMenus() call allocates space for a UserData after each
 * Menu or MenuItem (header, item or sub-item).  You should use the
 * GTMENU_USERDATA() or GTMENUITEM_USERDATA() macro to extract it.
 */

#define GTMENU_USERDATA(menu) (* ( (APTR *)(((struct Menu *)menu)+1) ) )
#define GTMENUITEM_USERDATA(menuitem) (* ( (APTR *)(((struct MenuItem *)menuitem)+1) ) )

/* Here is an old one for compatibility.  Do not use in new code! */
#define MENU_USERDATA(menuitem) (* ( (APTR *)(menuitem+1) ) )

/* These return codes can be obtained through the GTMN_SecondaryError tag */
#define GTMENU_TRIMMED  0x00000001      /* Too many menus, items, or subitems,
                                         * menu has been trimmed down
                                         */
#define GTMENU_INVALID  0x00000002      /* Invalid NewMenu array */
#define GTMENU_NOMEM    0x00000003      /* Out of memory */

/*------------------------------------------------------------------------*/

/* Starting with V39, checkboxes and mx gadgets can be scaled to your
 * specified gadget width/height.  Use the new GTCB_Scaled or GTMX_Scaled
 * tags, respectively.  Under V37, and by default in V39, the imagery
 * is of the following fixed size:
 */

/* MX gadget default dimensions: */
#define MX_WIDTH        17
#define MX_HEIGHT       9

/* Checkbox default dimensions: */
#define CHECKBOX_WIDTH  26
#define CHECKBOX_HEIGHT 11

/*------------------------------------------------------------------------*/

/* Tags for GadTools functions: */

#define GT_TagBase           TAG_USER + 0x80000

#define GTVI_NewWindow       GT_TagBase+1  /* Unused */
#define GTVI_NWTags          GT_TagBase+2  /* Unused */

#define GT_Private0          GT_TagBase+3  /* (private) */

#define GTCB_Checked         GT_TagBase+4  /* State of checkbox */

#define GTLV_Top             GT_TagBase+5  /* Top visible one in listview */
#define GTLV_Labels          GT_TagBase+6  /* List to display in listview */
#define GTLV_ReadOnly        GT_TagBase+7  /* TRUE if listview is to be
                                            * read-only
                                            */
#define GTLV_ScrollWidth     GT_TagBase+8  /* Width of scrollbar */

#define GTMX_Labels          GT_TagBase+9  /* NULL-terminated array of labels */
#define GTMX_Active          GT_TagBase+10 /* Active one in mx gadget */

#define GTTX_Text            GT_TagBase+11 /* Text to display */
#define GTTX_CopyText        GT_TagBase+12 /* Copy text label instead of
                                            * referencing it
                                            */

#define GTNM_Number          GT_TagBase+13 /* Number to display */

#define GTCY_Labels          GT_TagBase+14 /* NULL-terminated array of labels */
#define GTCY_Active          GT_TagBase+15 /* The active one in the cycle gad */

#define GTPA_Depth           GT_TagBase+16 /* Number of bitplanes in palette */
#define GTPA_Color           GT_TagBase+17 /* Palette color */
#define GTPA_ColorOffset     GT_TagBase+18 /* First color to use in palette */
#define GTPA_IndicatorWidth  GT_TagBase+19 /* Width of current-color indicator */
#define GTPA_IndicatorHeight GT_TagBase+20 /* Height of current-color indicator */

#define GTSC_Top             GT_TagBase+21 /* Top visible in scroller */
#define GTSC_Total           GT_TagBase+22 /* Total in scroller area */
#define GTSC_Visible         GT_TagBase+23 /* Number visible in scroller */
#define GTSC_Overlap         GT_TagBase+24 /* Unused */

/*  GT_TagBase+25 through GT_TagBase+37 are reserved */

#define GTSL_Min             GT_TagBase+38 /* Slider min value */
#define GTSL_Max             GT_TagBase+39 /* Slider max value */
#define GTSL_Level           GT_TagBase+40 /* Slider level */
#define GTSL_MaxLevelLen     GT_TagBase+41 /* Max length of printed level */
#define GTSL_LevelFormat     GT_TagBase+42 /* Format string for level */
#define GTSL_LevelPlace      GT_TagBase+43 /* Where level should be placed */
#define GTSL_DispFunc        GT_TagBase+44 /* Callback for number calculation
                                            * before display
                                            */

#define GTST_String          GT_TagBase+45 /* String gadget's displayed string */
#define GTST_MaxChars        GT_TagBase+46 /* Max length of string */

#define GTIN_Number          GT_TagBase+47 /* Number in integer gadget */
#define GTIN_MaxChars        GT_TagBase+48 /* Max number of digits */

#define GTMN_TextAttr        GT_TagBase+49 /* MenuItem font TextAttr */
#define GTMN_FrontPen        GT_TagBase+50 /* MenuItem text pen color */

#define GTBB_Recessed        GT_TagBase+51 /* Make BevelBox recessed */

#define GT_VisualInfo        GT_TagBase+52 /* result of VisualInfo call */

#define GTLV_ShowSelected    GT_TagBase+53 /* show selected entry beneath
                * listview, set tag data = NULL for display-only, or pointer
                * to a string gadget you've created
                */
#define GTLV_Selected        GT_TagBase+54 /* Set ordinal number of selected
                                            * entry in the list
                                            */
#define GT_Reserved1         GT_TagBase+56 /* Reserved for future use */

#define GTTX_Border          GT_TagBase+57 /* Put a border around
                                            * Text-display gadgets
                                            */
#define GTNM_Border          GT_TagBase+58 /* Put a border around
                                            * Number-display gadgets
                                            */

#define GTSC_Arrows          GT_TagBase+59 /* Specify size of arrows for
                                            * scroller
                                            */

#define GTMN_Menu            GT_TagBase+60 /* Pointer to Menu for use by
                                            * LayoutMenuItems()
                                            */
#define GTMX_Spacing         GT_TagBase+61 /* Added to font height to
                * figure spacing between mx choices.  Use this instead
                * of LAYOUTA_SPACING for mx gadgets.
                */

/* New to V37 GadTools.  Ignored by GadTools V36 */
#define GTMN_FullMenu        GT_TagBase+62 /* Asks CreateMenus() to
                * validate that this is a complete menu structure
                */
#define GTMN_SecondaryError  GT_TagBase+63 /* ti_Data is a pointer
                * to a ULONG to receive error reports from CreateMenus()
                */
#define GT_Underscore        GT_TagBase+64 /* ti_Data points to the symbol
                * that preceeds the character you'd like to underline in a
                * gadget label
                */
#define GTST_EditHook        GT_TagBase+55 /* String EditHook */
#define GTIN_EditHook        GTST_EditHook /* Same thing, different name,
                * just to round out INTEGER_KIND gadgets
                */

/* New to V39 GadTools.  Ignored by GadTools V36 and V37 */
#define GTMN_Checkmark       GT_TagBase+65 /* ti_Data is checkmark img to use */
#define GTMN_AmigaKey        GT_TagBase+66 /* ti_Data is Amiga-key img to use */
#define GTMN_NewLookMenus    GT_TagBase+67 /* ti_Data is boolean */

/* New to V39 GadTools.  Ignored by GadTools V36 and V37.
 * Set to TRUE if you want the checkbox or mx image scaled to
 * the gadget width/height you specify.  Defaults to FALSE,
 * for compatibility.
 */
#define GTCB_Scaled          GT_TagBase+68 /* ti_Data is boolean */
#define GTMX_Scaled          GT_TagBase+69 /* ti_Data is boolean */

#define GTPA_NumColors       GT_TagBase+70 /* Number of colors in palette */

#define GTMX_TitlePlace      GT_TagBase+71 /* Where to put the title */

#define GTTX_FrontPen        GT_TagBase+72 /* Text color in TEXT_KIND gad */
#define GTTX_BackPen         GT_TagBase+73 /* Bgrnd color in TEXT_KIND gad */
#define GTTX_Justification   GT_TagBase+74 /* See GTJ_#? constants */

#define GTNM_FrontPen        GT_TagBase+72 /* Text color in NUMBER_KIND gad */
#define GTNM_BackPen         GT_TagBase+73 /* Bgrnd color in NUMBER_KIND gad */
#define GTNM_Justification   GT_TagBase+74 /* See GTJ_#? constants */
#define GTNM_Format          GT_TagBase+75 /* Formatting string for number */
#define GTNM_MaxNumberLen    GT_TagBase+76 /* Maximum length of number */

#define GTBB_FrameType       GT_TagBase+77 /* defines what kind of boxes
                                            * DrawBevelBox() renders. See
                                            * the BBFT_#? constants for
                                            * possible values
                                            */

#define GTLV_MakeVisible     GT_TagBase+78 /* Make this item visible */
#define GTLV_ItemHeight      GT_TagBase+79 /* Height of an individual item */

#define GTSL_MaxPixelLen     GT_TagBase+80 /* Max pixel size of level display */
#define GTSL_Justification   GT_TagBase+81 /* how should the level be displayed */

#define GTPA_ColorTable      GT_TagBase+82 /* colors to use in palette */

#define GTLV_CallBack        GT_TagBase+83 /* general-purpose listview call back */
#define GTLV_MaxPen          GT_TagBase+84 /* maximum pen number used by call back */

#define GTTX_Clipped         GT_TagBase+85 /* make a TEXT_KIND clip text */
#define GTNM_Clipped         GT_TagBase+85 /* make a NUMBER_KIND clip text */

/* Old definition, now obsolete: */
#define GT_Reserved0         GTST_EditHook

/*------------------------------------------------------------------------*/

/* Justification types for GTTX_Justification and GTNM_Justification tags */
#define GTJ_LEFT   0
#define GTJ_RIGHT  1
#define GTJ_CENTER 2

/*------------------------------------------------------------------------*/

/* Bevel box frame types for GTBB_FrameType tag */
#define BBFT_BUTTON      1  /* Standard button gadget box */
#define BBFT_RIDGE       2  /* Standard string gadget box */
#define BBFT_ICONDROPBOX 3  /* Standard icon drop box     */

/*------------------------------------------------------------------------*/

/* Typical suggested spacing between "elements": */
#define INTERWIDTH      8
#define INTERHEIGHT     4

/*------------------------------------------------------------------------*/

/* "NWay" is an old synonym for cycle gadgets */
#define NWAY_KIND       CYCLE_KIND
#define NWAYIDCMP       CYCLEIDCMP
#define GTNW_Labels     GTCY_Labels
#define GTNW_Active     GTCY_Active

/*------------------------------------------------------------------------*/

/* These two definitions are obsolete, but are here for backwards
 * compatibility.  You never need to worry about these:
 */
#define GADTOOLBIT      (0x8000)
/* Use this mask to isolate the user part: */
#define GADTOOLMASK     (~GADTOOLBIT)

/*------------------------------------------------------------------------*/

/* These definitions are for the GTLV_CallBack tag */

/* The different types of messages that a listview callback hook can see */
#define LV_DRAW       0x202L    /* draw yourself, with state */

/* Possible return values from a callback hook */
#define LVCB_OK       0         /* callback understands this message type    */
#define LVCB_UNKNOWN  1         /* callback does not understand this message */

/* states for LVDrawMsg.lvdm_State */
#define LVR_NORMAL            0 /* the usual                 */
#define LVR_SELECTED          1 /* for selected gadgets      */
#define LVR_NORMALDISABLED    2         /* for disabled gadgets      */
#define LVR_SELECTEDDISABLED  8         /* disabled and selected     */

/* structure of LV_DRAW messages, object is a (struct Node *) */
struct LVDrawMsg
{
    ULONG             lvdm_MethodID;   /* LV_DRAW                   */
    struct RastPort  *lvdm_RastPort;   /* where to render to        */
    struct DrawInfo  *lvdm_DrawInfo;   /* useful to have around     */
    struct Rectangle  lvdm_Bounds;     /* limits of where to render */
    ULONG             lvdm_State;      /* how to render     */
};

/*------------------------------------------------------------------------*/

#endif /* LIBRARIES_GADTOOLS_H */