IFND LIBRARIES_GADTOOLS_I
LIBRARIES_GADTOOLS_I    SET     1
**
**      $Filename: libraries/gadtools.i $
**      $Release: 2.04 Includes, V37.4 $
**      $Revision: 36.13 $
**      $Date: 91/10/09 $
**
**      gadtools.library definitions
**
**      (C) Copyright 1989-1999 Amiga, Inc.
**      All Rights Reserved.
**
*------------------------------------------------------------------------*
        IFND EXEC_TYPES_I
        INCLUDE 'exec/types.i'
        ENDC
        IFND UTILITY_TAGITEM_I
        INCLUDE 'utility/tagitem.i'
        ENDC
        IFND INTUITION_INTUITION_I
        INCLUDE 'intuition/intuition.i'
        ENDC
*------------------------------------------------------------------------*
*       The kinds (almost classes) of gadgets in the toolkit.  Use these
*       identifiers when calling CreateGadgetA()
GENERIC_KIND    EQU     0
BUTTON_KIND     EQU     1
CHECKBOX_KIND   EQU     2
INTEGER_KIND    EQU     3
LISTVIEW_KIND   EQU     4
MX_KIND         EQU     5
NUMBER_KIND     EQU     6
CYCLE_KIND      EQU     7
PALETTE_KIND    EQU     8
SCROLLER_KIND   EQU     9
* Kind number 10 is reserved
SLIDER_KIND     EQU     11
STRING_KIND     EQU     12
TEXT_KIND       EQU     13
NUM_KINDS       EQU     14
*------------------------------------------------------------------------*
*  These two definitions are obsolete, but are here for backwards
*  compatibility.  You never need to worry about these:
GADTOOLBIT      EQU     $8000
*  Use this mask to isolate the user part: *
GADTOOLMASK     EQU     ~GADTOOLBIT
*------------------------------------------------------------------------*
*  'Or' the appropriate set together for your Window IDCMPFlags: *
ARROWIDCMP      EQU     GADGETUP!GADGETDOWN!INTUITICKS!MOUSEBUTTONS
BUTTONIDCMP     EQU     GADGETUP
CHECKBOXIDCMP   EQU     GADGETUP
INTEGERIDCMP    EQU     GADGETUP
LISTVIEWIDCMP   EQU     GADGETUP!GADGETDOWN!MOUSEMOVE!ARROWIDCMP
MXIDCMP         EQU     GADGETDOWN
NUMBERIDCMP     EQU     0
CYCLEIDCMP      EQU     GADGETUP
PALETTEIDCMP    EQU     GADGETUP
*  Use ARROWIDCMP!SCROLLERIDCMP if your scrollers have arrows: *
SCROLLERIDCMP   EQU     GADGETUP!GADGETDOWN!MOUSEMOVE
SLIDERIDCMP     EQU     GADGETUP!GADGETDOWN!MOUSEMOVE
STRINGIDCMP     EQU     GADGETUP
TEXTIDCMP       EQU     0
*------------------------------------------------------------------------*
*  Typical suggested spacing between "elements": *
INTERWIDTH      EQU     8
INTERHEIGHT     EQU     4
*------------------------------------------------------------------------*
*  Generic NewGadget used by several of the gadget classes: *
    STRUCTURE NewGadget,0
        WORD    gng_LeftEdge
        WORD    gng_TopEdge     ; gadget position
        WORD    gng_Width
        WORD    gng_Height      ;  gadget size
        APTR    gng_GadgetText  ; gadget label
        APTR    gng_TextAttr    ; desired font for gadget label
        UWORD   gng_GadgetID    ; gadget ID
        ULONG   gng_Flags       ; see below
        APTR    gng_VisualInfo  ; Set to retval of GetVisualInfo()
        APTR    gng_UserData    ; gadget UserData
        LABEL   gng_SIZEOF
*   ng_Flags control certain aspects of the gadget.  The first five control
*   the placement of the descriptive text.  All larger groups supply a
*   default:
PLACETEXT_LEFT  EQU     $0001   * Right-align text on left side
PLACETEXT_RIGHT EQU     $0002   * Left-align text on right side
PLACETEXT_ABOVE EQU     $0004   * Center text above
PLACETEXT_BELOW EQU     $0008   * Center text below
PLACETEXT_IN    EQU     $0010   * Center text on
NG_HIGHLABEL    EQU     $0020   * Highlight the label
*------------------------------------------------------------------------*
* Fill out an array of these and pass that to CreateMenus():
    STRUCTURE NewMenu,0
        UBYTE   gnm_Type                ; See below
        UBYTE   gnm_Pad                 ; alignment padding
        APTR    gnm_Label               ; Menu's label
        APTR    gnm_CommKey             ; MenuItem Command Key Equiv
        UWORD   gnm_Flags               ; Menu or MenuItem flags (see note)
        LONG    gnm_MutualExclude       ; MenuItem MutualExclude word
        APTR    gnm_UserData            ; For your own use, see note
        LABEL   gnm_SIZEOF
*  Each nm_Type should be one of these:
NM_TITLE        EQU     1
NM_ITEM         EQU     2
NM_SUB          EQU     3
NM_END          EQU     0
MENU_IMAGE      EQU     128
* For an image menu-item or sub-item, use one of these.  Set
* nm_Label to point at the Image structure you wish to use.
* NOTE: At present, you may only use conventional images.
* Custom images created from Intuition image-classes do not work.
IM_ITEM         EQU     NM_ITEM!MENU_IMAGE
IM_SUB          EQU     NM_SUB!MENU_IMAGE
*  If you set your label to NM_BARLABEL, you'll get a separator bar.
NM_BARLABEL     EQU     -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:
NM_MENUDISABLED EQU     MENUENABLED
NM_ITEMDISABLED EQU     ITEMENABLED
*   The following are pre-cleared (COMMSEQ, ITEMTEXT, and HIGHxxx are set
*   later as appropriate):
NM_FLAGMASK     EQU     ~(COMMSEQ!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. */
GTMENU_USERDATA MACRO
                move.l  mu_SIZEOF(\1),\2
                ENDM
GTMENUITEM_USERDATA     MACRO
                move.l  mi_SIZEOF(\1),\2
                ENDM
*  Here is an old one for compatibility.  Do not use in new code!
MENU_USERDATA   MACRO
                move.l  mi_SIZEOF(\1),\2
                ENDM
*  These return codes can be obtained through the GTMN_SecondaryError tag:
GTMENU_TRIMMED  EQU     $00000001       ; Too many menus, items, or subitems,
                                        ; menu has been trimmed down
GTMENU_INVALID  EQU     $00000002       ; Invalid NewMenu array
GTMENU_NOMEM    EQU     $00000003       ; Out of memory
*------------------------------------------------------------------------*
*  Tags for toolkit functions:
GT_TagBase      EQU     TAG_USER+$80000 ; Begin counting tags
GTVI_NewWindow  EQU     GT_TagBase+$01  ; NewWindow struct for GetVisualInfo
GTVI_NWTags     EQU     GT_TagBase+$02  ; NWTags for GetVisualInfo
GT_Private0     EQU     GT_TagBase+$03  ; (private)
GTCB_Checked    EQU     GT_TagBase+$04  ; State of checkbox
GTLV_Top        EQU     GT_TagBase+$05  ; Top visible one in listview
GTLV_Labels     EQU     GT_TagBase+$06  ; List to display in listview
GTLV_ReadOnly   EQU     GT_TagBase+$07  ; TRUE if listview is to be read-only
GTLV_ScrollWidth        EQU     GT_TagBase+$08  ; Width of scrollbar
GTMX_Labels     EQU     GT_TagBase+$09  ; NULL-terminated array of labels
GTMX_Active     EQU     GT_TagBase+$0A  ; Active one in mx gadget
GTTX_Text       EQU     GT_TagBase+$0B  ; Text to display
GTTX_CopyText   EQU     GT_TagBase+$0C  ; Copy text label instead of referencing it
GTNM_Number     EQU     GT_TagBase+$0D  ; Number to display
GTCY_Labels     EQU     GT_TagBase+$0E  ; NULL-terminated array of labels
GTCY_Active     EQU     GT_TagBase+$0F  ; The active one in the cycle gad
GTPA_Depth      EQU     GT_TagBase+$10  ; Number of bitplanes in palette
GTPA_Color      EQU     GT_TagBase+$11  ; Palette color
GTPA_ColorOffset        EQU     GT_TagBase+$12  ; First color to use in palette
GTPA_IndicatorWidth     EQU     GT_TagBase+$13  ; Width of current-color indicator
GTPA_IndicatorHeight    EQU     GT_TagBase+$14  ; Height of current-color indicator
GTSC_Top        EQU     GT_TagBase+$15  ; Top visible in scroller
GTSC_Total      EQU     GT_TagBase+$16  ; Total in scroller area
GTSC_Visible    EQU     GT_TagBase+$17  ; Number visible in scroller
GTSC_Overlap    EQU     GT_TagBase+$18  ; Unused
* GT_TagBase+$19 through GT_TagBase+$25 are reserved
GTSL_Min        EQU     GT_TagBase+$26  ; Slider min value
GTSL_Max        EQU     GT_TagBase+$27  ; Slider max value
GTSL_Level      EQU     GT_TagBase+$28  ; Slider level
GTSL_MaxLevelLen        EQU     GT_TagBase+$29  ; Max length of printed level
GTSL_LevelFormat        EQU     GT_TagBase+$2A  ; Format string for level
GTSL_LevelPlace EQU     GT_TagBase+$2B  ; Where level should be placed
GTSL_DispFunc   EQU     GT_TagBase+$2C  ; Callback for number calculation before display
GTST_String     EQU     GT_TagBase+$2D  ; String gadget's displayed string
GTST_MaxChars   EQU     GT_TagBase+$2E  ; Max length of string
GTIN_Number     EQU     GT_TagBase+$2F  ; Number in integer gadget
GTIN_MaxChars   EQU     GT_TagBase+$30  ; Max number of digits
GTMN_TextAttr   EQU     GT_TagBase+$31  ; MenuItem font TextAttr
GTMN_FrontPen   EQU     GT_TagBase+$32  ; MenuItem text pen color
GTBB_Recessed   EQU     GT_TagBase+$33  ; Make BevelBox recessed
GT_VisualInfo   EQU     GT_TagBase+$34  ; result of VisualInfo call
GTLV_ShowSelected       EQU     GT_TagBase+$35  ; show selected entry beneath listview,
                        ; set tag data = NULL for display-only, or pointer
                        ; to a string gadget you've created
GTLV_Selected   EQU     GT_TagBase+$36  ; Set ordinal number of selected entry in the list
GT_Reserved1    EQU     GT_TagBase+$38  ; Reserved for future use
GTTX_Border     EQU     GT_TagBase+$39  ; Put a border around Text-display gadgets
GTNM_Border     EQU     GT_TagBase+$3A  ; Put a border around Number-display gadgets
GTSC_Arrows     EQU     GT_TagBase+$3B  ; Specify size of arrows for scroller
GTMN_Menu       EQU     GT_TagBase+$3C  ; Pointer to Menu for use by
                        ; LayoutMenuItems()
GTMX_Spacing    EQU     GT_TagBase+$3D  ; 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.
GTMN_FullMenu   EQU     GT_TagBase+$3E  ; Asks CreateMenus() to
                ; validate that this is a complete menu structure
GTMN_SecondaryError     EQU     GT_TagBase+$3F  ; ti_Data is a pointer
                ; to a ULONG to receive error reports from CreateMenus()
GT_Underscore   EQU     GT_TagBase+$40  ; ti_Data points to the symbol
                ; that preceeds the character you'd like to underline in a
                ; gadget label
GTST_EditHook   EQU     GT_TagBase+$37  ; String EditHook
*  Old definition, now obsolete:
GT_Reserved0    EQU     GTST_EditHook
*------------------------------------------------------------------------*
* "NWay" is an old synonym for cycle gadgets
NWAY_KIND       EQU     CYCLE_KIND
NWAYIDCMP       EQU     CYCLEIDCMP
GTNW_Labels     EQU     GTCY_Labels
GTNW_Active     EQU     GTCY_Active
        ENDC