home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 500-599 / ff562.lza / Intuisup / Gadgets / source.lzh / gadgets_test.c next >
C/C++ Source or Header  |  1991-10-20  |  20KB  |  598 lines

  1.         /*************************************
  2.          *                                   *
  3.          *            Gadgets v2.0           *
  4.          *   by Torsten Jürgeleit in 05/91   *
  5.          *                                   *
  6.          *            Test program           *
  7.          *                                   *
  8.          *************************************/
  9.  
  10.     /* Includes */
  11.  
  12. #include <exec/types.h>
  13. #include <exec/memory.h>
  14. #include <graphics/gfxbase.h>
  15. #include <graphics/text.h>
  16. #include <intuition/intuition.h>
  17. #include <functions.h>
  18. #include "/render/render.h"
  19. #include "/texts/texts.h"
  20. #include "gadgets.h"
  21.  
  22.     /* Defines */
  23.  
  24. #define WINDOW_WIDTH        600
  25. #define WINDOW_HEIGHT        200
  26. #define WINDOW_TITLE        (UBYTE *)" Gadgets test "
  27. #define WINDOW_IDCMP        (CLOSEWINDOW | GADGET_IDCMP_FLAGS_ALL)
  28.  
  29. #define RENDER_INFO_FLAGS    (USHORT)(RENDER_INFO_FLAG_INNER_WINDOW | RENDER_INFO_FLAG_BACK_FILL)
  30. #define OPEN_WINDOW_FLAGS    OPEN_WINDOW_FLAG_CENTER_WINDOW
  31.  
  32. #define MESSAGE_LEFT_EDGE    0
  33. #define MESSAGE_TOP_EDGE    (WINDOW_HEIGHT - MESSAGE_HEIGHT - 10)
  34. #define MESSAGE_WIDTH        WINDOW_WIDTH
  35. #define MESSAGE_HEIGHT        8
  36. #define MESSAGE_TEXT1        "Gadget %d text %s"
  37. #define MESSAGE_TEXT2        "Gadget %d value %ld"
  38. #define MESSAGE_TEXT_ATTR    &topaz80_attr
  39.  
  40.     /* Globals */
  41.  
  42. struct IntuitionBase  *IntuitionBase;
  43. struct GfxBase        *GfxBase;
  44. APTR LayersBase;
  45.  
  46.     /* Statics */
  47.  
  48. STATIC struct NewWindow  test_new_window = { 0, 0, WINDOW_WIDTH,
  49.    WINDOW_HEIGHT, 0, 1, WINDOW_IDCMP, WINDOWCLOSE | WINDOWDRAG |
  50.    WINDOWDEPTH | SMART_REFRESH | NOCAREREFRESH | RMBTRAP | ACTIVATE, NULL,
  51.    NULL, WINDOW_TITLE, NULL, NULL, 0, 0, 0, 0, WBENCHSCREEN };
  52. STATIC struct TextAttr  topaz60_attr = { (STRPTR)"topaz.font", TOPAZ_SIXTY,
  53.                            FS_NORMAL, FPF_ROMFONT },
  54.             topaz80_attr = { (STRPTR)"topaz.font", TOPAZ_EIGHTY,
  55.                            FS_NORMAL, FPF_ROMFONT };
  56.     /* Defines for test gadgets */
  57.  
  58. #define TEST_GADGET_BUTTON        0
  59. #define TEST_GADGET_BUTTON_IMAGE    1
  60. #define TEST_GADGET_CHECK        2
  61. #define TEST_GADGET_MX            3
  62. #define TEST_GADGET_STRING        4
  63. #define TEST_GADGET_INTEGER        5
  64. #define TEST_GADGET_SLIDER_HORIZ    6
  65. #define TEST_GADGET_SLIDER_VERT        7
  66. #define TEST_GADGET_SCROLLER_HORIZ    8
  67. #define TEST_GADGET_SCROLLER_VERT    9
  68. #define TEST_GADGET_CYCLE        10
  69. #define TEST_GADGET_COUNT        11
  70. #define TEST_GADGET_LISTVIEW        12
  71. #define TEST_GADGET_PALETTE        13
  72.  
  73. #define TEST_GADGET1_TYPE        GADGET_DATA_TYPE_BUTTON
  74. #define TEST_GADGET1_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_TEXT_COLOR2)
  75. #define TEST_GADGET1_LEFT_EDGE        20
  76. #define TEST_GADGET1_TOP_EDGE        10
  77. #define TEST_GADGET1_WIDTH        ((6 + 2) * 10)
  78. #define TEST_GADGET1_HEIGHT        19
  79. #define TEST_GADGET1_TEXT        "_Button"
  80. #define TEST_GADGET1_TEXT_ATTR        &topaz60_attr
  81.  
  82. #define TEST_GADGET2_TYPE        GADGET_DATA_TYPE_BUTTON
  83. #define TEST_GADGET2_FLAGS        (GADGET_DATA_FLAG_BUTTON_TOGGLE | GADGET_DATA_FLAG_BUTTON_IMAGE | GADGET_DATA_FLAG_NO_BORDER | GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_TEXT_RIGHT | GADGET_DATA_FLAG_TEXT_COLOR2)
  84. #define TEST_GADGET2_LEFT_EDGE        120
  85. #define TEST_GADGET2_TOP_EDGE        15
  86. #define TEST_GADGET2_WIDTH        16
  87. #define TEST_GADGET2_HEIGHT        8
  88. #define TEST_GADGET2_TEXT        "_Image"
  89. #define TEST_GADGET2_TEXT_ATTR        &topaz60_attr
  90. #define TEST_GADGET2_NORMAL_RENDER    NULL    /* (LONG)&image1 */
  91. #define TEST_GADGET2_SELECT_RENDER    (BYTE *)&image2
  92.  
  93. #define TEST_GADGET3_TYPE        GADGET_DATA_TYPE_CHECK
  94. #define TEST_GADGET3_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_TEXT_RIGHT)
  95. #define TEST_GADGET3_LEFT_EDGE        20
  96. #define TEST_GADGET3_TOP_EDGE        35
  97. #define TEST_GADGET3_WIDTH        0
  98. #define TEST_GADGET3_HEIGHT        0
  99. #define TEST_GADGET3_TEXT        "_Check gadget"
  100. #define TEST_GADGET3_TEXT_ATTR        &topaz60_attr
  101. #define TEST_GADGET3_CHECK_STATE    1
  102.  
  103. #define TEST_GADGET4_TYPE        GADGET_DATA_TYPE_MX
  104. #define TEST_GADGET4_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_TEXT_LEFT | GADGET_DATA_FLAG_TEXT_COLOR2)
  105. #define TEST_GADGET4_LEFT_EDGE        20
  106. #define TEST_GADGET4_TOP_EDGE        65
  107. #define TEST_GADGET4_WIDTH        0
  108. #define TEST_GADGET4_HEIGHT        0
  109. #define TEST_GADGET4_TEXT        "Mutual e_xclude gadget"
  110. #define TEST_GADGET4_TEXT_ATTR        &topaz60_attr
  111. #define TEST_GADGET4_SPACING        2
  112. #define TEST_GADGET4_ACTIVE        1
  113. #define TEST_GADGET4_TEXT_ARRAY        &mx_array[0]
  114.  
  115. #define TEST_GADGET5_TYPE        GADGET_DATA_TYPE_STRING
  116. #define TEST_GADGET5_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_INPUT_AUTO_ACTIVATE | GADGET_DATA_FLAG_TEXT_RIGHT)
  117. #define TEST_GADGET5_LEFT_EDGE        20
  118. #define TEST_GADGET5_TOP_EDGE        112
  119. #define TEST_GADGET5_WIDTH        68
  120. #define TEST_GADGET5_HEIGHT        0
  121. #define TEST_GADGET5_TEXT        "_String gadget"
  122. #define TEST_GADGET5_TEXT_ATTR        &topaz60_attr
  123. #define TEST_GADGET5_INPUT_LEN        10
  124. #define TEST_GADGET5_AUTO_ACTIVATE    ((LONG)TEST_GADGET_INTEGER << 16 | TEST_GADGET_INTEGER)
  125. #define TEST_GADGET5_INPUT_DEFAULT    (BYTE *)"Test"
  126.  
  127. #define TEST_GADGET6_TYPE        GADGET_DATA_TYPE_INTEGER
  128. #define TEST_GADGET6_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_INPUT_AUTO_ACTIVATE | GADGET_DATA_FLAG_TEXT_LEFT | GADGET_DATA_FLAG_TEXT_COLOR2)
  129. #define TEST_GADGET6_LEFT_EDGE        (20 + 14 * 10 + 8)
  130. #define TEST_GADGET6_TOP_EDGE        130
  131. #define TEST_GADGET6_WIDTH        68
  132. #define TEST_GADGET6_HEIGHT        0
  133. #define TEST_GADGET6_TEXT        "I_nteger gadget"
  134. #define TEST_GADGET6_TEXT_ATTR        &topaz60_attr
  135. #define TEST_GADGET6_INPUT_LEN        10
  136. #define TEST_GADGET6_AUTO_ACTIVATE    ((LONG)TEST_GADGET_STRING << 16 | TEST_GADGET_STRING)
  137. #define TEST_GADGET6_INPUT_DEFAULT    (BYTE *)123
  138.  
  139. #define TEST_GADGET7_TYPE        GADGET_DATA_TYPE_SLIDER
  140. #define TEST_GADGET7_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_TEXT_RIGHT)
  141. #define TEST_GADGET7_LEFT_EDGE        20
  142. #define TEST_GADGET7_TOP_EDGE        150
  143. #define TEST_GADGET7_WIDTH        100
  144. #define TEST_GADGET7_HEIGHT        9
  145. #define TEST_GADGET7_TEXT        "S_lider gadget"
  146. #define TEST_GADGET7_TEXT_ATTR        &topaz60_attr
  147. #define TEST_GADGET7_MIN        -10
  148. #define TEST_GADGET7_MAX        10
  149. #define TEST_GADGET7_LEVEL        0
  150.  
  151. #define TEST_GADGET8_TYPE        GADGET_DATA_TYPE_SLIDER
  152. #define TEST_GADGET8_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_ORIENTATION_VERT | GADGET_DATA_FLAG_TEXT_BELOW)
  153. #define TEST_GADGET8_LEFT_EDGE        390
  154. #define TEST_GADGET8_TOP_EDGE        10
  155. #define TEST_GADGET8_WIDTH        18
  156. #define TEST_GADGET8_HEIGHT        50
  157. #define TEST_GADGET8_TEXT        "Sli_der gadget"
  158. #define TEST_GADGET8_TEXT_ATTR        &topaz60_attr
  159. #define TEST_GADGET8_MIN        -10
  160. #define TEST_GADGET8_MAX        10
  161. #define TEST_GADGET8_LEVEL        0
  162.  
  163. #define TEST_GADGET9_TYPE        GADGET_DATA_TYPE_SCROLLER
  164. #define TEST_GADGET9_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_TEXT_LEFT | GADGET_DATA_FLAG_TEXT_COLOR2)
  165. #define TEST_GADGET9_LEFT_EDGE        (20 + 15 * 10 + 8)
  166. #define TEST_GADGET9_TOP_EDGE        165
  167. #define TEST_GADGET9_WIDTH        100
  168. #define TEST_GADGET9_HEIGHT        0
  169. #define TEST_GADGET9_TEXT        "Scr_oller gadget"
  170. #define TEST_GADGET9_TEXT_ATTR        &topaz60_attr
  171. #define TEST_GADGET9_VISIBLE        4
  172. #define TEST_GADGET9_TOTAL        20
  173. #define TEST_GADGET9_TOP        (BYTE *)10
  174.  
  175. #define TEST_GADGET10_TYPE        GADGET_DATA_TYPE_SCROLLER
  176. #define TEST_GADGET10_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_ORIENTATION_VERT | GADGET_DATA_FLAG_TEXT_ABOVE)
  177. #define TEST_GADGET10_LEFT_EDGE        490
  178. #define TEST_GADGET10_TOP_EDGE        20
  179. #define TEST_GADGET10_WIDTH        0
  180. #define TEST_GADGET10_HEIGHT        50
  181. #define TEST_GADGET10_TEXT        "Sc_roller gadget"
  182. #define TEST_GADGET10_TEXT_ATTR        &topaz60_attr
  183. #define TEST_GADGET10_VISIBLE        4
  184. #define TEST_GADGET10_TOTAL        20
  185. #define TEST_GADGET10_TOP        (BYTE *)10
  186.  
  187. #define TEST_GADGET11_TYPE        GADGET_DATA_TYPE_CYCLE
  188. #define TEST_GADGET11_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_TEXT_RIGHT | GADGET_DATA_FLAG_TEXT_COLOR2)
  189. #define TEST_GADGET11_LEFT_EDGE        265
  190. #define TEST_GADGET11_TOP_EDGE        80
  191. #define TEST_GADGET11_WIDTH        160
  192. #define TEST_GADGET11_HEIGHT        19
  193. #define TEST_GADGET11_TEXT        "C_ycle gadget"
  194. #define TEST_GADGET11_TEXT_ATTR        &topaz60_attr
  195. #define TEST_GADGET11_ACTIVE        2
  196. #define TEST_GADGET11_TEXT_ARRAY    &text_array[0]
  197.  
  198. #define TEST_GADGET12_TYPE        GADGET_DATA_TYPE_COUNT
  199. #define TEST_GADGET12_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_TEXT_RIGHT)
  200. #define TEST_GADGET12_LEFT_EDGE        325
  201. #define TEST_GADGET12_TOP_EDGE        110
  202. #define TEST_GADGET12_WIDTH        80
  203. #define TEST_GADGET12_HEIGHT        12
  204. #define TEST_GADGET12_TEXT        "Co_unt gadget"
  205. #define TEST_GADGET12_TEXT_ATTR        &topaz80_attr
  206. #define TEST_GADGET12_MIN        100
  207. #define TEST_GADGET12_MAX        1000
  208. #define TEST_GADGET12_VALUE        (BYTE *)600
  209.  
  210. #define TEST_GADGET13_TYPE        GADGET_DATA_TYPE_LISTVIEW
  211. #define TEST_GADGET13_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_TEXT_COLOR2)
  212. #define TEST_GADGET13_LEFT_EDGE        370
  213. #define TEST_GADGET13_TOP_EDGE        144
  214. #define TEST_GADGET13_WIDTH        104
  215. #define TEST_GADGET13_HEIGHT        35
  216. #define TEST_GADGET13_TEXT        "List _view gadget"
  217. #define TEST_GADGET13_TEXT_ATTR        &topaz60_attr
  218. #define TEST_GADGET13_SPACING        0
  219. #define TEST_GADGET13_TOP        1
  220. #define TEST_GADGET13_LIST        (BYTE *)&test_list
  221.  
  222. #define TEST_GADGET14_TYPE        GADGET_DATA_TYPE_PALETTE
  223. #define TEST_GADGET14_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_TEXT_COLOR2)
  224. #define TEST_GADGET14_LEFT_EDGE        220
  225. #define TEST_GADGET14_TOP_EDGE        23
  226. #define TEST_GADGET14_WIDTH        150
  227. #define TEST_GADGET14_HEIGHT        25
  228. #define TEST_GADGET14_TEXT        "_Palette gadget"
  229. #define TEST_GADGET14_TEXT_ATTR        &topaz60_attr
  230. #define TEST_GADGET14_DEPTH        2
  231. #define TEST_GADGET14_COLOR_OFFSET    0
  232. #define TEST_GADGET14_ACTIVE_COLOR    (BYTE *)0
  233.  
  234.     /* Statics for test gadgets */
  235.  
  236. STATIC UWORD image1_data[] = {
  237.     0xffff, 0x8000, 0xbff0, 0xa00c, 0xa00c, 0xbff0, 0x8000, 0x8000,
  238.     0x0000, 0x0001, 0x0005, 0x1ff1, 0x1ff1, 0x0005, 0x0001, 0x7fff
  239. };
  240. STATIC struct Image  image1 = { 0, 0, 16, 8, 2, &image1_data[0], 3, 0, NULL };
  241. STATIC UWORD image2_data[] = {
  242.     0x0000, 0x000f, 0x3fff, 0x23fd, 0x3fcd, 0x7ff1, 0x7001, 0x7fff,
  243.     0xffff, 0x800e, 0x807e, 0x9ff8, 0x9ff0, 0xfe04, 0xf000, 0x8000
  244. };
  245. STATIC struct Image  image2 = { 0, 0, 16, 8, 2, &image2_data[0], 3, 0, NULL };
  246. STATIC BYTE *mx_array[] = {
  247.     "Fast File System", "Old File System", "Custom FileSystem", NULL
  248. };
  249. STATIC BYTE *text_array[] = {
  250.     "Amiga", "Workbench", "AmigaDOS", "Multitasking", "CLI", "ARexx",
  251.     "TeX", "Unix", NULL
  252. };
  253. STATIC struct List  test_list;
  254. STATIC struct GadgetData  test_gadget_data[] = {
  255.    {
  256.     TEST_GADGET1_TYPE,        /* gd_Type */
  257.     TEST_GADGET1_FLAGS,        /* gd_Flags */
  258.     TEST_GADGET1_LEFT_EDGE,        /* gd_LeftEdge */
  259.     TEST_GADGET1_TOP_EDGE,        /* gd_TopEdge */
  260.     TEST_GADGET1_WIDTH,        /* gd_Width */
  261.     TEST_GADGET1_HEIGHT,        /* gd_Height */
  262.     TEST_GADGET1_TEXT,        /* *gd_Text */
  263.     TEST_GADGET1_TEXT_ATTR,        /* *gd_TextAttr */
  264.     { 0, 0, 0 }
  265.    }, {
  266.     TEST_GADGET2_TYPE,        /* gd_Type */
  267.     TEST_GADGET2_FLAGS,        /* gd_Flags */
  268.     TEST_GADGET2_LEFT_EDGE,        /* gd_LeftEdge */
  269.     TEST_GADGET2_TOP_EDGE,        /* gd_TopEdge */
  270.     TEST_GADGET2_WIDTH,        /* gd_Width */
  271.     TEST_GADGET2_HEIGHT,        /* gd_Height */
  272.     TEST_GADGET2_TEXT,        /* *gd_Text */
  273.     TEST_GADGET2_TEXT_ATTR,        /* *gd_TextAttr */
  274.     { 0,
  275.     TEST_GADGET2_NORMAL_RENDER,    /* gd_ButtonNormalRender */
  276.     TEST_GADGET2_SELECT_RENDER    /* gd_ButtonSelectRender */
  277.     }
  278.    }, {
  279.     TEST_GADGET3_TYPE,        /* gd_Type */
  280.     TEST_GADGET3_FLAGS,        /* gd_Flags */
  281.     TEST_GADGET3_LEFT_EDGE,        /* gd_LeftEdge */
  282.     TEST_GADGET3_TOP_EDGE,        /* gd_TopEdge */
  283.     TEST_GADGET3_WIDTH,        /* gd_Width */
  284.     TEST_GADGET3_HEIGHT,        /* gd_Height */
  285.     TEST_GADGET3_TEXT,        /* *gd_Text */
  286.     TEST_GADGET3_TEXT_ATTR,        /* *gd_TextAttr */
  287.     {
  288.     TEST_GADGET3_CHECK_STATE,    /* gd_CheckState */
  289.     0, 0 }
  290.    }, {
  291.     TEST_GADGET4_TYPE,        /* gd_Type */
  292.     TEST_GADGET4_FLAGS,        /* gd_Flags */
  293.     TEST_GADGET4_LEFT_EDGE,        /* gd_LeftEdge */
  294.     TEST_GADGET4_TOP_EDGE,        /* gd_TopEdge */
  295.     TEST_GADGET4_WIDTH,        /* gd_Width */
  296.     TEST_GADGET4_HEIGHT,        /* gd_Height */
  297.     TEST_GADGET4_TEXT,        /* *gd_Text */
  298.     TEST_GADGET4_TEXT_ATTR,        /* *gd_TextAttr */
  299.     {
  300.     TEST_GADGET4_SPACING,        /* gd_MXSpacing */
  301.     TEST_GADGET4_ACTIVE,        /* gd_MXActiveEntry */
  302.     TEST_GADGET4_TEXT_ARRAY        /* gd_MXTextArray */
  303.     }
  304.    }, {
  305.     TEST_GADGET5_TYPE,        /* gd_Type */
  306.     TEST_GADGET5_FLAGS,        /* gd_Flags */
  307.     TEST_GADGET5_LEFT_EDGE,        /* gd_LeftEdge */
  308.     TEST_GADGET5_TOP_EDGE,        /* gd_TopEdge */
  309.     TEST_GADGET5_WIDTH,        /* gd_Width */
  310.     TEST_GADGET5_HEIGHT,        /* gd_Height */
  311.     TEST_GADGET5_TEXT,        /* *gd_Text */
  312.     TEST_GADGET5_TEXT_ATTR,        /* *gd_TextAttr */
  313.     {
  314.     TEST_GADGET5_INPUT_LEN,        /* gd_InputLen */
  315.     TEST_GADGET5_AUTO_ACTIVATE,    /* gd_InputActivatePrev/Next */
  316.     TEST_GADGET5_INPUT_DEFAULT    /* gd_InputDefault */
  317.     }
  318.    }, {
  319.     TEST_GADGET6_TYPE,        /* gd_Type */
  320.     TEST_GADGET6_FLAGS,        /* gd_Flags */
  321.     TEST_GADGET6_LEFT_EDGE,        /* gd_LeftEdge */
  322.     TEST_GADGET6_TOP_EDGE,        /* gd_TopEdge */
  323.     TEST_GADGET6_WIDTH,        /* gd_Width */
  324.     TEST_GADGET6_HEIGHT,        /* gd_Height */
  325.     TEST_GADGET6_TEXT,        /* *gd_Text */
  326.     TEST_GADGET6_TEXT_ATTR,        /* *gd_TextAttr */
  327.     {
  328.     TEST_GADGET6_INPUT_LEN,        /* gd_InputLen */
  329.     TEST_GADGET6_AUTO_ACTIVATE,    /* gd_InputActivatePrev/Next */
  330.     TEST_GADGET6_INPUT_DEFAULT    /* gd_InputDefault */
  331.     }
  332.    }, {
  333.     TEST_GADGET7_TYPE,        /* gd_Type */
  334.     TEST_GADGET7_FLAGS,        /* gd_Flags */
  335.     TEST_GADGET7_LEFT_EDGE,        /* gd_LeftEdge */
  336.     TEST_GADGET7_TOP_EDGE,        /* gd_TopEdge */
  337.     TEST_GADGET7_WIDTH,        /* gd_Width */
  338.     TEST_GADGET7_HEIGHT,        /* gd_Height */
  339.     TEST_GADGET7_TEXT,        /* *gd_Text */
  340.     TEST_GADGET7_TEXT_ATTR,        /* *gd_TextAttr */
  341.     {
  342.     TEST_GADGET7_MIN,        /* gd_SliderMin */
  343.     TEST_GADGET7_MAX,        /* gd_SliderMax */
  344.     TEST_GADGET7_LEVEL        /* gd_SliderLevel */
  345.     }
  346.    }, {
  347.     TEST_GADGET8_TYPE,        /* gd_Type */
  348.     TEST_GADGET8_FLAGS,        /* gd_Flags */
  349.     TEST_GADGET8_LEFT_EDGE,        /* gd_LeftEdge */
  350.     TEST_GADGET8_TOP_EDGE,        /* gd_TopEdge */
  351.     TEST_GADGET8_WIDTH,        /* gd_Width */
  352.     TEST_GADGET8_HEIGHT,        /* gd_Height */
  353.     TEST_GADGET8_TEXT,        /* *gd_Text */
  354.     TEST_GADGET8_TEXT_ATTR,        /* *gd_TextAttr */
  355.     {
  356.     TEST_GADGET8_MIN,        /* gd_SliderMin */
  357.     TEST_GADGET8_MAX,        /* gd_SliderMax */
  358.     TEST_GADGET8_LEVEL        /* gd_SliderLevel */
  359.     }
  360.    }, {
  361.     TEST_GADGET9_TYPE,        /* gd_Type */
  362.     TEST_GADGET9_FLAGS,        /* gd_Flags */
  363.     TEST_GADGET9_LEFT_EDGE,        /* gd_LeftEdge */
  364.     TEST_GADGET9_TOP_EDGE,        /* gd_TopEdge */
  365.     TEST_GADGET9_WIDTH,        /* gd_Width */
  366.     TEST_GADGET9_HEIGHT,        /* gd_Height */
  367.     TEST_GADGET9_TEXT,        /* *gd_Text */
  368.     TEST_GADGET9_TEXT_ATTR,        /* *gd_TextAttr */
  369.     {
  370.     TEST_GADGET9_VISIBLE,        /* gd_ScrollerVisible */
  371.     TEST_GADGET9_TOTAL,        /* gd_ScrollerTotal */
  372.     TEST_GADGET9_TOP        /* gd_ScrollerTop */
  373.     }
  374.    }, {
  375.     TEST_GADGET10_TYPE,        /* gd_Type */
  376.     TEST_GADGET10_FLAGS,        /* gd_Flags */
  377.     TEST_GADGET10_LEFT_EDGE,    /* gd_LeftEdge */
  378.     TEST_GADGET10_TOP_EDGE,        /* gd_TopEdge */
  379.     TEST_GADGET10_WIDTH,        /* gd_Width */
  380.     TEST_GADGET10_HEIGHT,        /* gd_Height */
  381.     TEST_GADGET10_TEXT,        /* *gd_Text */
  382.     TEST_GADGET10_TEXT_ATTR,    /* *gd_TextAttr */
  383.     {
  384.     TEST_GADGET10_VISIBLE,        /* gd_ScrollerVisible */
  385.     TEST_GADGET10_TOTAL,        /* gd_ScrollerTotal */
  386.     TEST_GADGET10_TOP        /* gd_ScrollerTop */
  387.     }
  388.    }, {
  389.     TEST_GADGET11_TYPE,        /* gd_Type */
  390.     TEST_GADGET11_FLAGS,        /* gd_Flags */
  391.     TEST_GADGET11_LEFT_EDGE,    /* gd_LeftEdge */
  392.     TEST_GADGET11_TOP_EDGE,        /* gd_TopEdge */
  393.     TEST_GADGET11_WIDTH,        /* gd_Width */
  394.     TEST_GADGET11_HEIGHT,        /* gd_Height */
  395.     TEST_GADGET11_TEXT,        /* *gd_Text */
  396.     TEST_GADGET11_TEXT_ATTR,    /* *gd_TextAttr */
  397.     {
  398.     0,                /* gd_CyclePad */
  399.     TEST_GADGET11_ACTIVE,        /* gd_CycleActive */
  400.     TEST_GADGET11_TEXT_ARRAY    /* gd_CycleTextArray */
  401.     }
  402.    }, {
  403.     TEST_GADGET12_TYPE,        /* gd_Type */
  404.     TEST_GADGET12_FLAGS,        /* gd_Flags */
  405.     TEST_GADGET12_LEFT_EDGE,    /* gd_LeftEdge */
  406.     TEST_GADGET12_TOP_EDGE,        /* gd_TopEdge */
  407.     TEST_GADGET12_WIDTH,        /* gd_Width */
  408.     TEST_GADGET12_HEIGHT,        /* gd_Height */
  409.     TEST_GADGET12_TEXT,        /* *gd_Text */
  410.     TEST_GADGET12_TEXT_ATTR,    /* *gd_TextAttr */
  411.     {
  412.     TEST_GADGET12_MIN,        /* gd_CountMin */
  413.     TEST_GADGET12_MAX,        /* gd_CountMax */
  414.     TEST_GADGET12_VALUE        /* gd_CountValue */
  415.     }
  416.    }, {
  417.     TEST_GADGET13_TYPE,        /* gd_Type */
  418.     TEST_GADGET13_FLAGS,        /* gd_Flags */
  419.     TEST_GADGET13_LEFT_EDGE,    /* gd_LeftEdge */
  420.     TEST_GADGET13_TOP_EDGE,        /* gd_TopEdge */
  421.     TEST_GADGET13_WIDTH,        /* gd_Width */
  422.     TEST_GADGET13_HEIGHT,        /* gd_Height */
  423.     TEST_GADGET13_TEXT,        /* *gd_Text */
  424.     TEST_GADGET13_TEXT_ATTR,    /* *gd_TextAttr */
  425.     {
  426.     TEST_GADGET13_SPACING,        /* gd_ListViewSpacing */
  427.     TEST_GADGET13_TOP,        /* gd_ListViewTop */
  428.     TEST_GADGET13_LIST        /* gd_ListViewList */
  429.     }
  430.    }, {
  431.     TEST_GADGET14_TYPE,        /* gd_Type */
  432.     TEST_GADGET14_FLAGS,        /* gd_Flags */
  433.     TEST_GADGET14_LEFT_EDGE,    /* gd_LeftEdge */
  434.     TEST_GADGET14_TOP_EDGE,        /* gd_TopEdge */
  435.     TEST_GADGET14_WIDTH,        /* gd_Width */
  436.     TEST_GADGET14_HEIGHT,        /* gd_Height */
  437.     TEST_GADGET14_TEXT,        /* *gd_Text */
  438.     TEST_GADGET14_TEXT_ATTR,    /* *gd_TextAttr */
  439.     {
  440.     TEST_GADGET14_DEPTH,        /* gd_PaletteDepth */
  441.     TEST_GADGET14_COLOR_OFFSET,    /* gd_PaletteColorOffset */
  442.     TEST_GADGET14_ACTIVE_COLOR    /* gd_PaletteActiveColor */
  443.     }
  444.    }, {
  445.     INTUISUP_DATA_END        /* end of gadget data array */
  446.    }
  447. };
  448.     /* Prototypes */
  449.  
  450. VOID test_action(struct RenderInfo  *ri, struct Window  *win,
  451.                             struct GadgetList  *gl);
  452. BOOL build_test_list(VOID);
  453. VOID free_test_list(VOID);
  454.  
  455.     /* Gadgets test */
  456.  
  457.    LONG
  458. main(VOID)
  459. {
  460.    struct RenderInfo  *ri;
  461.    struct Window      *win;
  462.    struct GadgetList  *gl;
  463.  
  464.    MWInit((BPTR)NULL, (LONG)MWF_NOATRASH);
  465.    if (IntuitionBase = OpenLibrary("intuition.library", 0L)) {
  466.       if (GfxBase = OpenLibrary("graphics.library", 0L)) {
  467.      if (LayersBase = OpenLibrary("layers.library", 0L)) {
  468.         if (build_test_list() == TRUE) {
  469.            if (ri = get_render_info(NULL, RENDER_INFO_FLAGS)) {
  470.           if (win = open_window(ri, &test_new_window,
  471.                                OPEN_WINDOW_FLAGS)) {
  472.              test_gadget_data[TEST_GADGET_BUTTON_IMAGE].gd_SpecialData.gd_ButtonData.gd_ButtonNormalRender = &image1;
  473.              if (gl = create_gadgets(ri, &test_gadget_data[0], 0,
  474.                                        0)) {
  475.             display_gadgets(win, gl);
  476.             test_action(ri, win, gl);
  477.             remove_gadgets(gl);
  478.             free_gadgets(gl);
  479.              }
  480.              CloseWindow(win);
  481.           }
  482.           free_render_info(ri);
  483.            }
  484.            free_test_list();
  485.         }
  486.         CloseLibrary(LayersBase);
  487.      }
  488.      CloseLibrary(GfxBase);
  489.       }
  490.       CloseLibrary(IntuitionBase);
  491.    }
  492.    MWTerm();
  493.    return(0L);
  494. }
  495.     /* Perform IDCMP action */
  496.  
  497.    VOID
  498. test_action(struct RenderInfo  *ri, struct Window  *win,
  499.                              struct GadgetList  *gl)
  500. {
  501.    struct RastPort      *rp = win->RPort;
  502.    struct MsgPort       *up = win->UserPort;
  503.    struct IntuiMessage  *msg;
  504.    BYTE *format, buffer[80];
  505.    BOOL input = TRUE, keepon = TRUE;
  506.  
  507.    /* waiting for close window event */
  508.    do {
  509.       WaitPort(up);
  510.       while (msg = get_msg(up)) {
  511.      switch (msg->Class) {
  512.         case CLOSEWINDOW :
  513.            keepon = FALSE;
  514.            break;
  515.         case ISUP_ID :
  516.            clear_render_window(ri, win, MESSAGE_LEFT_EDGE,
  517.             MESSAGE_TOP_EDGE, MESSAGE_LEFT_EDGE + MESSAGE_WIDTH - 1,
  518.                      MESSAGE_TOP_EDGE + MESSAGE_HEIGHT - 1);
  519.            if (msg->Code == TEST_GADGET_STRING) {
  520.           format = MESSAGE_TEXT1;
  521.            } else {
  522.           format = MESSAGE_TEXT2;
  523.            }
  524.            sprintf(&buffer[0], format, msg->Code, msg->IAddress);
  525.            print_text(ri, win, &buffer[0], 0, MESSAGE_TOP_EDGE,
  526.                 TEXT_DATA_TYPE_TEXT, TEXT_DATA_FLAG_CENTER |
  527.                   TEXT_DATA_FLAG_COLOR2, MESSAGE_TEXT_ATTR);
  528.            /* change gadgets */
  529.            switch (msg->Code) {
  530.           case TEST_GADGET_CHECK :
  531.              if (msg->IAddress) {
  532.             set_gadget_attributes(gl, TEST_GADGET_LISTVIEW, 0L,
  533.                 USE_CURRENT_VALUE, (ULONG)TEST_GADGET13_TOP,
  534.                         (VOID *)TEST_GADGET13_LIST);
  535.              } else {
  536.             set_gadget_attributes(gl, TEST_GADGET_LISTVIEW,
  537.                    GADGET_DATA_FLAG_DISABLED, USE_CURRENT_VALUE,
  538.                        USE_CURRENT_VALUE, (VOID *)NULL);
  539.              }
  540.              MWCheck();
  541.              break;
  542.           case TEST_GADGET_BUTTON :
  543.              if (input == FALSE) {
  544.             set_gadget_attributes(gl, TEST_GADGET_INTEGER, 0L,
  545.                        USE_CURRENT_VALUE, USE_CURRENT_VALUE,
  546.                          (VOID *)USE_CURRENT_VALUE);
  547.             input = TRUE;
  548.              } else {
  549.             set_gadget_attributes(gl, TEST_GADGET_INTEGER,
  550.                    GADGET_DATA_FLAG_DISABLED, USE_CURRENT_VALUE,
  551.                   USE_CURRENT_VALUE, (VOID *)USE_CURRENT_VALUE);
  552.             input = FALSE;
  553.              }
  554.              break;
  555.            }
  556.            break;
  557.      }
  558.      reply_msg(msg);
  559.       }
  560.    } while (keepon == TRUE);
  561. }
  562.     /* Build test list */
  563.  
  564.    BOOL
  565. build_test_list(VOID)
  566. {
  567.    struct List  *list = &test_list;
  568.    struct Node  *node;
  569.    BYTE **text = &text_array[0];
  570.    BOOL success = TRUE;
  571.  
  572.    NewList(list);
  573.    while (*text) {
  574.       if (node = AllocMem((LONG)sizeof(struct Node), (LONG)MEMF_PUBLIC |
  575.                                   MEMF_CLEAR)) {
  576.      node->ln_Name = *text++;
  577.      AddTail(list, node);
  578.       } else {
  579.      free_test_list();
  580.      success = FALSE;
  581.      break;
  582.       }
  583.    }
  584.    return(success);
  585. }
  586.     /* Free test list */
  587.  
  588.    VOID
  589. free_test_list(VOID)
  590. {
  591.    struct List  *list = &test_list;
  592.    struct Node  *node;
  593.  
  594.    while (node = RemHead(list)) {
  595.       FreeMem(node, (LONG)sizeof(struct Node));
  596.    }
  597. }
  598.