home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 4 / FreshFish_May-June1994.bin / bbs / cbm / os-include.lha / os-include / libraries / gadtools.h < prev    next >
C/C++ Source or Header  |  1993-10-15  |  17KB  |  453 lines

  1. #ifndef LIBRARIES_GADTOOLS_H
  2. #define LIBRARIES_GADTOOLS_H
  3. /*
  4. **    $VER: gadtools.h 39.9 (19.8.92)
  5. **    Includes Release 40.15
  6. **
  7. **    gadtools.library definitions
  8. **
  9. **    (C) Copyright 1989-1993 Commodore-Amiga, Inc.
  10. **    All Rights Reserved
  11. */
  12.  
  13. /*------------------------------------------------------------------------*/
  14.  
  15. #ifndef EXEC_TYPES_H
  16. #include <exec/types.h>
  17. #endif
  18.  
  19. #ifndef UTILITY_TAGITEM_H
  20. #include <utility/tagitem.h>
  21. #endif
  22.  
  23. #ifndef INTUITION_INTUITION_H
  24. #include <intuition/intuition.h>
  25. #endif
  26.  
  27. /*------------------------------------------------------------------------*/
  28.  
  29. /* The kinds (almost classes) of gadgets that GadTools supports.
  30.  * Use these identifiers when calling CreateGadgetA()
  31.  */
  32.  
  33. #define GENERIC_KIND    0
  34. #define BUTTON_KIND    1
  35. #define CHECKBOX_KIND    2
  36. #define INTEGER_KIND    3
  37. #define LISTVIEW_KIND    4
  38. #define MX_KIND        5
  39. #define NUMBER_KIND    6
  40. #define CYCLE_KIND    7
  41. #define PALETTE_KIND    8
  42. #define SCROLLER_KIND    9
  43. /* Kind number 10 is reserved */
  44. #define SLIDER_KIND    11
  45. #define STRING_KIND    12
  46. #define TEXT_KIND    13
  47.  
  48. #define NUM_KINDS    14
  49.  
  50. /*------------------------------------------------------------------------*/
  51.  
  52. /* 'Or' the appropriate set together for your Window IDCMPFlags: */
  53.  
  54. #define ARROWIDCMP    (IDCMP_GADGETUP | IDCMP_GADGETDOWN |\
  55.     IDCMP_INTUITICKS | IDCMP_MOUSEBUTTONS)
  56.  
  57. #define BUTTONIDCMP    (IDCMP_GADGETUP)
  58. #define CHECKBOXIDCMP    (IDCMP_GADGETUP)
  59. #define INTEGERIDCMP    (IDCMP_GADGETUP)
  60. #define LISTVIEWIDCMP    (IDCMP_GADGETUP | IDCMP_GADGETDOWN |\
  61.     IDCMP_MOUSEMOVE | ARROWIDCMP)
  62.  
  63. #define MXIDCMP        (IDCMP_GADGETDOWN)
  64. #define NUMBERIDCMP    (0L)
  65. #define CYCLEIDCMP    (IDCMP_GADGETUP)
  66. #define PALETTEIDCMP    (IDCMP_GADGETUP)
  67.  
  68. /* Use ARROWIDCMP|SCROLLERIDCMP if your scrollers have arrows: */
  69. #define SCROLLERIDCMP    (IDCMP_GADGETUP | IDCMP_GADGETDOWN | IDCMP_MOUSEMOVE)
  70. #define SLIDERIDCMP    (IDCMP_GADGETUP | IDCMP_GADGETDOWN | IDCMP_MOUSEMOVE)
  71. #define STRINGIDCMP    (IDCMP_GADGETUP)
  72.  
  73. #define TEXTIDCMP    (0L)
  74.  
  75. /*------------------------------------------------------------------------*/
  76.  
  77. /* Generic NewGadget used by several of the gadget classes: */
  78.  
  79. struct NewGadget
  80. {
  81.     WORD ng_LeftEdge, ng_TopEdge;    /* gadget position */
  82.     WORD ng_Width, ng_Height;        /* gadget size */
  83.     UBYTE *ng_GadgetText;        /* gadget label */
  84.     struct TextAttr *ng_TextAttr;    /* desired font for gadget label */
  85.     UWORD ng_GadgetID;            /* gadget ID */
  86.     ULONG ng_Flags;            /* see below */
  87.     APTR ng_VisualInfo;            /* Set to retval of GetVisualInfo() */
  88.     APTR ng_UserData;            /* gadget UserData */
  89. };
  90.  
  91.  
  92. /* ng_Flags control certain aspects of the gadget.  The first five control
  93.  * the placement of the descriptive text.  Each gadget kind has its default,
  94.  * which is usually PLACETEXT_LEFT.  Consult the autodocs for details.
  95.  */
  96.  
  97. #define PLACETEXT_LEFT    0x0001    /* Right-align text on left side */
  98. #define PLACETEXT_RIGHT    0x0002    /* Left-align text on right side */
  99. #define PLACETEXT_ABOVE    0x0004    /* Center text above */
  100. #define PLACETEXT_BELOW    0x0008    /* Center text below */
  101. #define PLACETEXT_IN    0x0010    /* Center text on */
  102.  
  103. #define NG_HIGHLABEL    0x0020    /* Highlight the label */
  104.  
  105.  
  106. /*------------------------------------------------------------------------*/
  107.  
  108. /* Fill out an array of these and pass that to CreateMenus(): */
  109.  
  110. struct NewMenu
  111. {
  112.     UBYTE nm_Type;        /* See below */
  113.     /* Compiler inserts a PAD byte here */
  114.     STRPTR nm_Label;        /* Menu's label */
  115.     STRPTR nm_CommKey;        /* MenuItem Command Key Equiv */
  116.     UWORD nm_Flags;        /* Menu or MenuItem flags (see note) */
  117.     LONG nm_MutualExclude;    /* MenuItem MutualExclude word */
  118.     APTR nm_UserData;        /* For your own use, see note */
  119. };
  120.  
  121. /* Needed only by inside IM_ definitions below */
  122. #define MENU_IMAGE    128
  123.  
  124. /* nm_Type determines what each NewMenu structure corresponds to.
  125.  * for the NM_TITLE, NM_ITEM, and NM_SUB values, nm_Label should
  126.  * be a text string to use for that menu title, item, or sub-item.
  127.  * For IM_ITEM or IM_SUB, set nm_Label to point at the Image structure
  128.  * you wish to use for this item or sub-item.
  129.  * NOTE: At present, you may only use conventional images.
  130.  * Custom images created from Intuition image-classes do not work.
  131.  */
  132. #define NM_TITLE    1    /* Menu header */
  133. #define NM_ITEM        2    /* Textual menu item */
  134. #define NM_SUB        3    /* Textual menu sub-item */
  135.  
  136. #define IM_ITEM        (NM_ITEM|MENU_IMAGE)    /* Graphical menu item */
  137. #define IM_SUB        (NM_SUB|MENU_IMAGE)    /* Graphical menu sub-item */
  138.  
  139. /* The NewMenu array should be terminated with a NewMenu whose
  140.  * nm_Type equals NM_END.
  141.  */
  142. #define NM_END        0    /* End of NewMenu array */
  143.  
  144. /* Starting with V39, GadTools will skip any NewMenu entries whose
  145.  * nm_Type field has the NM_IGNORE bit set.
  146.  */
  147. #define NM_IGNORE    64
  148.  
  149.  
  150. /* nm_Label should be a text string for textual items, a pointer
  151.  * to an Image structure for graphical menu items, or the special
  152.  * constant NM_BARLABEL, to get a separator bar.
  153.  */
  154. #define NM_BARLABEL    ((STRPTR)-1)
  155.  
  156. /* The nm_Flags field is used to fill out either the Menu->Flags or
  157.  * MenuItem->Flags field.  Note that the sense of the MENUENABLED or
  158.  * ITEMENABLED bit is inverted between this use and Intuition's use,
  159.  * in other words, NewMenus are enabled by default.  The following
  160.  * labels are provided to disable them:
  161.  */
  162. #define NM_MENUDISABLED    MENUENABLED
  163. #define NM_ITEMDISABLED    ITEMENABLED
  164.  
  165. /* New for V39:  NM_COMMANDSTRING.  For a textual MenuItem or SubItem,
  166.  * point nm_CommKey at an arbitrary string, and set the NM_COMMANDSTRING
  167.  * flag.
  168.  */
  169. #define NM_COMMANDSTRING COMMSEQ
  170.  
  171. /* The following are pre-cleared (COMMSEQ, ITEMTEXT, and HIGHxxx are set
  172.  * later as appropriate):
  173.  * Under V39, the COMMSEQ flag bit is not cleared, since it now has
  174.  * meaning.
  175.  */
  176. #define NM_FLAGMASK    (~(COMMSEQ | ITEMTEXT | HIGHFLAGS))
  177. #define NM_FLAGMASK_V39    (~(ITEMTEXT | HIGHFLAGS))
  178.  
  179. /* You may choose among CHECKIT, MENUTOGGLE, and CHECKED.
  180.  * Toggle-select menuitems are of type CHECKIT|MENUTOGGLE, along
  181.  * with CHECKED if currently selected.    Mutually exclusive ones
  182.  * are of type CHECKIT, and possibly CHECKED too.  The nm_MutualExclude
  183.  * is a bit-wise representation of the items excluded by this one,
  184.  * so in the simplest case (choose 1 among n), these flags would be
  185.  * ~1, ~2, ~4, ~8, ~16, etc.  See the Intuition Menus chapter.
  186.  */
  187.  
  188. /* A UserData pointer can be associated with each Menu and MenuItem structure.
  189.  * The CreateMenus() call allocates space for a UserData after each
  190.  * Menu or MenuItem (header, item or sub-item).  You should use the
  191.  * GTMENU_USERDATA() or GTMENUITEM_USERDATA() macro to extract it.
  192.  */
  193.  
  194. #define GTMENU_USERDATA(menu) (* ( (APTR *)(((struct Menu *)menu)+1) ) )
  195. #define GTMENUITEM_USERDATA(menuitem) (* ( (APTR *)(((struct MenuItem *)menuitem)+1) ) )
  196.  
  197. /* Here is an old one for compatibility.  Do not use in new code! */
  198. #define MENU_USERDATA(menuitem) (* ( (APTR *)(menuitem+1) ) )
  199.  
  200. /* These return codes can be obtained through the GTMN_SecondaryError tag */
  201. #define GTMENU_TRIMMED    0x00000001    /* Too many menus, items, or subitems,
  202.                      * menu has been trimmed down
  203.                      */
  204. #define GTMENU_INVALID    0x00000002    /* Invalid NewMenu array */
  205. #define GTMENU_NOMEM    0x00000003    /* Out of memory */
  206.  
  207. /*------------------------------------------------------------------------*/
  208.  
  209. /* Starting with V39, checkboxes and mx gadgets can be scaled to your
  210.  * specified gadget width/height.  Use the new GTCB_Scaled or GTMX_Scaled
  211.  * tags, respectively.    Under V37, and by default in V39, the imagery
  212.  * is of the following fixed size:
  213.  */
  214.  
  215. /* MX gadget default dimensions: */
  216. #define MX_WIDTH    17
  217. #define MX_HEIGHT    9
  218.  
  219. /* Checkbox default dimensions: */
  220. #define CHECKBOX_WIDTH    26
  221. #define CHECKBOX_HEIGHT    11
  222.  
  223. /*------------------------------------------------------------------------*/
  224.  
  225. /* Tags for GadTools functions: */
  226.  
  227. #define GT_TagBase         TAG_USER + 0x80000
  228.  
  229. #define GTVI_NewWindow         GT_TagBase+1  /* Unused */
  230. #define GTVI_NWTags         GT_TagBase+2  /* Unused */
  231.  
  232. #define GT_Private0         GT_TagBase+3  /* (private) */
  233.  
  234. #define GTCB_Checked         GT_TagBase+4  /* State of checkbox */
  235.  
  236. #define GTLV_Top         GT_TagBase+5  /* Top visible one in listview */
  237. #define GTLV_Labels         GT_TagBase+6  /* List to display in listview */
  238. #define GTLV_ReadOnly         GT_TagBase+7  /* TRUE if listview is to be
  239.                         *