home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 581a.lha / IntuitionSupLibrary_v2.0 / Gadgets / source.lzh / gadgets.h < prev    next >
C/C++ Source or Header  |  1991-10-25  |  12KB  |  304 lines

  1.         /*************************************
  2.          *                                   *
  3.          *            Gadgets v2.0           *
  4.          *   by Torsten Jürgeleit in 05/91   *
  5.          *                                   *
  6.          *    Defines, structs and protos    *
  7.          *                                   *
  8.          *************************************/
  9.  
  10. #ifndef    GADGET_LIST_H
  11. #define    GADGET_LIST_H
  12.  
  13.     /* Defines for gadgets */
  14.  
  15. #define ISUP_ID        ((ULONG)'I' << 24 | (ULONG)'S' << 16 | 'U' << 8 | 'P')
  16.  
  17. #define GADGET_DATA_TYPE_BUTTON        1    /* button gadget */
  18. #define GADGET_DATA_TYPE_CHECK        2    /* check mark gadget */
  19. #define GADGET_DATA_TYPE_MX        3    /* mutual exclude gadget */
  20. #define GADGET_DATA_TYPE_STRING        4    /* string input gadget */
  21. #define GADGET_DATA_TYPE_INTEGER    5    /* integer input gadget */
  22. #define GADGET_DATA_TYPE_SLIDER        6    /* slider gadget */
  23. #define GADGET_DATA_TYPE_SCROLLER    7    /* scroller gadget */
  24. #define GADGET_DATA_TYPE_CYCLE        8    /* cycle gadget */
  25. #define GADGET_DATA_TYPE_COUNT        9    /* count gadget */
  26. #define GADGET_DATA_TYPE_LISTVIEW    10    /* list view gadget */
  27. #define GADGET_DATA_TYPE_PALETTE    11    /* palette gadget */
  28.  
  29. #define MAX_GADGET_DATA_TYPE        GADGET_DATA_TYPE_PALETTE
  30.  
  31. #define GADGET_DATA_FLAG_DISABLED        (1L << 0)    /* gadget disabled (ghosted) - default enabled */
  32. #define GADGET_DATA_FLAG_NO_BORDER        (1L << 1)    /* no gadget border - default with border */
  33. #define GADGET_DATA_FLAG_HIGH_COMP        (1L << 2)    /* highliting by complement - default by select border */
  34. #define GADGET_DATA_FLAG_ORIENTATION_VERT    (1L << 3)    /* vertical orientation - default horizontal */
  35. #define GADGET_DATA_FLAG_HOT_KEY        (1L << 4)    /* hot key given - default none */
  36. #define GADGET_DATA_FLAG_TEXT_LEFT        (1L << 5)    /* place text left of gadget */
  37. #define GADGET_DATA_FLAG_TEXT_RIGHT        (1L << 6)    /* place text right of gadget */
  38. #define GADGET_DATA_FLAG_TEXT_ABOVE        (1L << 7)    /* place text above of gadget */
  39. #define GADGET_DATA_FLAG_TEXT_BELOW        (1L << 8)    /* place text below of gadget */
  40. #define GADGET_DATA_FLAG_TEXT_COLOR2        (1L << 9)    /* use 2nd text render pen for gadget text */
  41. #define GADGET_DATA_FLAG_BUTTON_TOGGLE        (1L << 10)    /* button gadgets: toggle button - default no toggle */
  42. #define GADGET_DATA_FLAG_BUTTON_IMAGE        (1L << 11)    /* button gadgets: render image - default no image */
  43. #define GADGET_DATA_FLAG_INPUT_AUTO_ACTIVATE    (1L << 12)    /* input gadgets: acivate after GADGETUP next or previous input gadget */
  44. #define GADGET_DATA_FLAG_STRING_UNSIGNED_DEC    (1L << 13)    /* string gadgets: input default no pointer to string but an unsigned decimal number */
  45. #define GADGET_DATA_FLAG_STRING_SIGNED_DEC    (1L << 14)    /* string gadgets: input default no pointer to string but an signed decimal number */
  46. #define GADGET_DATA_FLAG_STRING_HEX        (1L << 15)    /* string gadgets: input default no pointer to string but an hex number */
  47. #define GADGET_DATA_FLAG_STRING_BIN        (1L << 16)    /* string gadgets: input default no pointer to string but an binary number */
  48. #define GADGET_DATA_FLAG_SCROLLER_NO_ARROWS    (1L << 17)    /* scroller gadget: no arrows - default with arrows */
  49. #define GADGET_DATA_FLAG_COUNT_SIGNED_DEC    (1L << 18)    /* count gadget: signed dec - default unsigned dec */
  50. #define GADGET_DATA_FLAG_LISTVIEW_READ_ONLY    (1L << 19)    /* list view gadget: read only - default selection enabled */
  51. #define GADGET_DATA_FLAG_PALETTE_NO_INDICATOR    (1L << 20)    /* palette gadget: no current color indicator - default with indicator */
  52. #define GADGET_DATA_FLAG_PALETTE_INDICATOR_TOP    (1L << 21)    /* palette gadget: place indicator at top - default at left */
  53.  
  54. #define GADGET_IDCMP_FLAGS_BUTTON    (GADGETUP | VANILLAKEY)
  55. #define GADGET_IDCMP_FLAGS_CHECK    (GADGETDOWN | VANILLAKEY)
  56. #define GADGET_IDCMP_FLAGS_MX        (GADGETDOWN | VANILLAKEY)
  57. #define GADGET_IDCMP_FLAGS_STRING    (GADGETUP | VANILLAKEY)
  58. #define GADGET_IDCMP_FLAGS_INTEGER    (GADGETUP | VANILLAKEY)
  59. #define GADGET_IDCMP_FLAGS_SLIDER    (GADGETUP | MOUSEMOVE | VANILLAKEY)
  60. #define GADGET_IDCMP_FLAGS_SCROLLER    (GADGETDOWN | GADGETUP | MOUSEMOVE | INTUITICKS | VANILLAKEY)
  61. #define GADGET_IDCMP_FLAGS_CYCLE    (GADGETUP | VANILLAKEY)
  62. #define GADGET_IDCMP_FLAGS_COUNT    (GADGETDOWN | GADGETUP | MOUSEMOVE | VANILLAKEY)
  63. #define GADGET_IDCMP_FLAGS_LISTVIEW    (GADGETDOWN | GADGETUP | MOUSEMOVE | INTUITICKS | VANILLAKEY)
  64. #define GADGET_IDCMP_FLAGS_PALETTE    (GADGETUP | VANILLAKEY)
  65. #define GADGET_IDCMP_FLAGS_ALL        (GADGETDOWN | GADGETUP | MOUSEMOVE | INTUITICKS | VANILLAKEY)
  66.  
  67. #define GADGET_LIST_FLAG_DISPLAYED    (1 << 0)    /* gadget list currently displayed */
  68.  
  69. #define EXTENDED_GADGET_TYPE_BUTTON        1
  70. #define EXTENDED_GADGET_TYPE_CHECK        2
  71. #define EXTENDED_GADGET_TYPE_MX            3
  72. #define EXTENDED_GADGET_TYPE_STRING        4
  73. #define EXTENDED_GADGET_TYPE_INTEGER        5
  74. #define EXTENDED_GADGET_TYPE_SLIDER_PROP    6
  75. #define EXTENDED_GADGET_TYPE_SCROLLER_PROP    7
  76. #define EXTENDED_GADGET_TYPE_SCROLLER_LEFT    8
  77. #define EXTENDED_GADGET_TYPE_SCROLLER_RIGHT    9
  78. #define EXTENDED_GADGET_TYPE_SCROLLER_UP    10
  79. #define EXTENDED_GADGET_TYPE_SCROLLER_DOWN    11
  80. #define EXTENDED_GADGET_TYPE_CYCLE        12
  81. #define EXTENDED_GADGET_TYPE_COUNT        13
  82. #define EXTENDED_GADGET_TYPE_LISTVIEW_PROP    14
  83. #define EXTENDED_GADGET_TYPE_LISTVIEW_UP    15
  84. #define EXTENDED_GADGET_TYPE_LISTVIEW_DOWN    16
  85. #define EXTENDED_GADGET_TYPE_LISTVIEW_ENTRY    17
  86. #define EXTENDED_GADGET_TYPE_PALETTE_INDICATOR    18
  87. #define EXTENDED_GADGET_TYPE_PALETTE_COLOR    19
  88.  
  89. #define EXTENDED_GADGET_FLAG_HOT_KEY        (1 << 0)
  90. #define EXTENDED_GADGET_FLAG_RENDER_BORDER    (1 << 1)
  91. #define EXTENDED_GADGET_FLAG_RENDER_IMAGE    (1 << 2)
  92. #define EXTENDED_GADGET_FLAG_NORMAL_IMAGE_COPY    (1 << 3)
  93. #define EXTENDED_GADGET_FLAG_SELECT_IMAGE_COPY    (1 << 4)
  94.  
  95. #define USE_CURRENT_VALUE    ~0L    /* used for set_gadget_attributes() to indicate data for which to use the current value */
  96.  
  97.     /* Defines for internal use only */
  98.  
  99. #define ARROW_AUTO_REPEAT_START_DELAY    3
  100.  
  101. #define MAX_COUNT_DELAY            5
  102. #define MAX_COUNT_STEP_SIZE        20
  103. #define MAX_COUNT_DISTANCE        (MAX_COUNT_DELAY * MAX_COUNT_STEP_SIZE)
  104. #define MIN_COUNT_DELAY_MICROS        30000L
  105.  
  106. #define MAX_DEC_NUM_DIGITS        10
  107. #define MAX_BIN_NUM_DIGITS        32
  108.  
  109.     /* Structures */
  110.  
  111. struct VisibleGadgetLists {
  112.     struct SignalSemaphore  vg_Semaphore;
  113.     struct MinList          vg_MinList;
  114.     USHORT    vg_Count;
  115. };
  116. struct GadgetList {
  117.     struct MinNode     gl_MinNode;   /* node to insert GadgetList into VisibleGadgetLists list */
  118.     struct RenderInfo  *gl_RenderInfo;
  119.     struct Window      *gl_Window;
  120.     struct GadgetData  *gl_Data;
  121.     USHORT    gl_DataEntries;
  122.     UBYTE    gl_Flags;
  123.     UBYTE    gl_AutoRepeatDelay;   /* delay counter for start of auto repeat for active arrow gadget */
  124.     BYTE    *gl_GadgetBuffer;
  125.     ULONG    gl_GadgetBufferSize;
  126.     BYTE    *gl_ImageBuffer;
  127.     ULONG    gl_ImageBufferSize;
  128.     struct ExtendedGadget  *gl_ActiveGadget;
  129.     struct ExtendedGadget  *gl_Gadgets[1];   /* array with gl_DataEntries ptr to extended gadgets */
  130. };
  131. struct GadgetData {
  132.     ULONG    gd_Type;
  133.     ULONG    gd_Flags;
  134.     USHORT    gd_LeftEdge;
  135.     USHORT    gd_TopEdge;
  136.     USHORT    gd_Width;
  137.     USHORT    gd_Height;
  138.     BYTE    *gd_Text;
  139.     struct TextAttr  *gd_TextAttr;
  140.     union    {
  141.         struct {    /* standard data struct */
  142.         LONG    gd_Data1;
  143.         LONG    gd_Data2;
  144.         VOID    *gd_Data3;
  145.         } gd_Data;
  146.         struct {    /* for button gadgets */
  147.         ULONG    gd_ButtonSelected;        /* selection state for toggle buttons - ZERO = unselected, non ZERO = selected */
  148.         struct Image  *gd_ButtonNormalRender;    /* normal render image */
  149.         struct Image  *gd_ButtonSelectRender;    /* select render image */
  150.         } gd_ButtonData;
  151.         struct {    /* for check gadgets */
  152.         ULONG    gd_CheckSelected;    /* selection state - ZERO = unselected, non ZERO = selected */
  153.         ULONG    gd_CheckPad1;
  154.         ULONG    gd_CheckPad2;
  155.         } gd_CheckData;
  156.         struct {    /* for mutual exclude gadgets */
  157.         ULONG    gd_MXSpacing;        /* pixel spacing between MX gadgets */
  158.         ULONG    gd_MXActiveEntry;    /* num of active entry from text array */
  159.         BYTE    **gd_MXTextArray;    /* ptr to MX text ptr array */
  160.         } gd_MXData;
  161.         struct {    /* for string and integer gadgets */
  162.         ULONG    gd_InputLen;        /* len of input buffer */
  163.         USHORT    gd_InputActivateNext;    /* num of next string/num gadget to activate */
  164.         USHORT    gd_InputActivatePrev;    /* num of previous string/num gadget to activate */
  165.         BYTE    *gd_InputDefault;    /* string: default text [syntax: "text"] */
  166.                         /* integer: default number [syntax: (VOID *)num] */
  167.         } gd_InputData;
  168.         struct {    /* for slider gadgets */
  169.         LONG    gd_SliderMin;        /* min level */
  170.         LONG    gd_SliderMax;        /* max level */
  171.         LONG    gd_SliderLevel;        /* current slider level */
  172.         } gd_SliderData;
  173.         struct {    /* for scroller gadgets */
  174.         ULONG    gd_ScrollerVisible;    /* visible entries */
  175.         ULONG    gd_ScrollerTotal;    /* total entries */
  176.         ULONG    gd_ScrollerTop;        /* current top entry */
  177.         } gd_ScrollerData;
  178.         struct {    /* for cycle gadget */
  179.         ULONG    gd_CyclePad;
  180.         ULONG    gd_CycleActive;        /* num of current cycle text ptr array entry */
  181.         BYTE    **gd_CycleTextArray;    /* ptr to cycle text ptr array */
  182.         } gd_CycleData;
  183.         struct {    /* for count gadget */
  184.         ULONG    gd_CountMin;        /* min value */
  185.         ULONG    gd_CountMax;        /* max value */
  186.         ULONG    gd_CountValue;    /* current count value */
  187.         } gd_CountData;
  188.         struct {    /* for list view gadget */
  189.         ULONG    gd_ListViewSpacing;    /* pixel spacing between list view entries */
  190.         ULONG    gd_ListViewTop;        /* current top entry */
  191.         struct List  *gd_ListViewList;    /* current list ptr */
  192.         } gd_ListViewData;
  193.         struct {    /* for palette gadget */
  194.         ULONG    gd_PaletteDepth;    /* num of bitplanes for palette */
  195.         ULONG    gd_PaletteColorOffset;    /* first color of palette */
  196.         ULONG    gd_PaletteActiveColor;    /* selected color */
  197.         } gd_PaletteData;
  198.     } gd_SpecialData;
  199. };
  200. struct MXData {
  201.     USHORT    mx_TextEntries;
  202.     USHORT    mx_ActiveEntry;
  203. };
  204. struct SliderData {
  205.     ULONG    sl_Flags;
  206.     LONG    sl_Min;
  207.     LONG    sl_Max;
  208.     LONG    sl_Level;
  209. };
  210. struct ScrollerData {
  211.     ULONG    sc_Flags;
  212.     ULONG    sc_Visible;
  213.     ULONG    sc_Total;
  214.     ULONG    sc_Top;
  215. };
  216. struct CycleData {
  217.     ULONG    cy_Flags;
  218.     SHORT    cy_LeftEdge;
  219.     SHORT    cy_TopEdge;
  220.     USHORT    cy_Width;
  221.     USHORT    cy_Height;
  222.     struct TextAttr  *cy_TextAttr;
  223.     BYTE    **cy_TextArray;
  224.     BYTE    *cy_ActiveText;
  225.     USHORT    cy_TextEntries;
  226.     USHORT    cy_ActiveEntry;
  227. };
  228. struct CountData {
  229.     ULONG    co_Flags;
  230.     SHORT    co_LeftEdge;
  231.     SHORT    co_TopEdge;
  232.     USHORT    co_Width;
  233.     USHORT    co_Height;
  234.     struct TextAttr  *co_TextAttr;
  235.     ULONG    co_Min;
  236.     ULONG    co_Max;
  237.     ULONG    co_Value;
  238. };
  239. struct ListViewData {
  240.     ULONG    lv_Flags;
  241.     SHORT    lv_LeftEdge;
  242.     SHORT    lv_TopEdge;
  243.     USHORT    lv_Width;
  244.     USHORT    lv_Height;
  245.     USHORT    lv_VisibleEntries;
  246.     USHORT    lv_EntryHeight;
  247.     struct TextAttr  *lv_TextAttr;
  248.     struct List      *lv_List;
  249.     struct Node      *lv_TopNode;
  250.     USHORT    lv_ListEntries;
  251.     USHORT    lv_TopEntry;
  252. };
  253. struct PaletteData {
  254.     ULONG    pd_Flags;
  255.     USHORT    pd_MaxColors;
  256.     USHORT    pd_ColorOffset;
  257.     ULONG    pd_ActiveColor;
  258. };
  259. struct ExtendedGadget {
  260.     struct Gadget  eg_Gadget;
  261.     USHORT    eg_BorderWidth;    /* needed by editor */
  262.     USHORT    eg_BorderHeight;   /* needed by editor */
  263.     UBYTE    eg_Type;       /* internal gadget type */
  264.     UBYTE    eg_Flags;       /* special flags, e.g render object type */
  265.     USHORT    eg_DataEntry;       /* ordinal number of entry in gl_Data array */
  266.     struct GadgetList  *eg_GadgetList;
  267.     SHORT    eg_TextLeftEdge;
  268.     SHORT    eg_TextTopEdge;
  269.     BYTE    *eg_Text;
  270.     USHORT    eg_Hotkey;    /* ASCII value of gadget hot key */
  271.     USHORT    eg_HotkeyPos;    /* pos of as hot key marked (underscore) char in gadget text */
  272.     APTR    eg_Render;    /* ptr to image or border - determined by eg_Flags */
  273.     struct ExtendedGadget  *eg_NextGadget;
  274. };
  275.     /* Global prototypes */
  276.  
  277. struct GadgetList  *create_gadgets(struct RenderInfo  *ri,
  278.               struct GadgetData  *gd, SHORT hoffset, SHORT voffset);
  279. VOID  free_gadgets(struct GadgetList  *gl);
  280. VOID  display_gadgets(struct Window  *win, struct GadgetList  *gl);
  281. VOID  refresh_gadgets(struct GadgetList  *gl);
  282. ULONG set_gadget_attributes(struct GadgetList  *gl, USHORT data_entry,
  283.             ULONG flags, ULONG data1, ULONG data2, VOID *data3);
  284. VOID  activate_input_gadget(struct GadgetList  *gl, USHORT data_entry);
  285. struct Gadget  *gadget_address(struct GadgetList  *gl, USHORT data_entry);
  286. VOID  remove_gadgets(struct GadgetList  *gl);
  287. struct IntuiMessage  *get_msg(struct MsgPort  *uport);
  288. VOID  reply_msg(struct IntuiMessage  *imsg);
  289.  
  290.     /* Global pragmas */
  291.  
  292. #pragma regcall(create_gadgets(a0,a1,d0,d1))
  293. #pragma regcall(free_gadgets(a0))
  294. #pragma regcall(display_gadgets(a0,a1))
  295. #pragma regcall(refresh_gadgets(a0))
  296. #pragma regcall(set_gadget_attributes(a0,d0,d1,d2,d3,a1))
  297. #pragma regcall(activate_input_gadget(a0,d0))
  298. #pragma regcall(gadget_address(a0,d0))
  299. #pragma regcall(remove_gadgets(a0))
  300. #pragma regcall(get_msg(a0))
  301. #pragma regcall(reply_msg(a0))
  302.  
  303. #endif
  304.