home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 581a.lha / IntuitionSupLibrary_v2.0 / Menus / source.lzh / menus_test.c < prev    next >
C/C++ Source or Header  |  1991-10-19  |  5KB  |  181 lines

  1.         /*************************************
  2.          *                                   *
  3.          *             Menus v2.0            *
  4.          *   by Torsten Jürgeleit in 08/91   *
  5.          *                                   *
  6.          *            Test program           *
  7.          *                                   *
  8.          *************************************/
  9.  
  10.     /* Includes */
  11.  
  12. #include <exec/types.h>
  13. #include <graphics/gfxbase.h>
  14. #include <graphics/text.h>
  15. #include <intuition/intuitionbase.h>
  16. #include <intuition/intuition.h>
  17. #include <functions.h>
  18. #include "/render/render.h"
  19. #include "/texts/texts.h"
  20. #include "menus.h"
  21.  
  22.     /* Defines */
  23.  
  24. #define WINDOW_WIDTH        600
  25. #define WINDOW_HEIGHT        200
  26. #define WINDOW_TITLE        (UBYTE *)" Menus test "
  27.  
  28. #define RENDER_INFO_FLAGS    (USHORT)(RENDER_INFO_FLAG_INNER_WINDOW | RENDER_INFO_FLAG_BACK_FILL)
  29. #define OPEN_WINDOW_FLAGS    (USHORT)(OPEN_WINDOW_FLAG_CENTER_WINDOW | OPEN_WINDOW_FLAG_RENDER_PENS)
  30.  
  31. #define MESSAGE1_TEXT        "Select menu item"
  32. #define MESSAGE1_TOP_EDGE    60
  33. #define MESSAGE1_TEXT_ATTR    &topaz60_attr
  34.  
  35. #define MESSAGE2_TEXT        "Menu no. %d menu item no. %d sub item no. %d selected"
  36. #define MESSAGE2_TOP_EDGE    120
  37. #define MESSAGE2_TEXT_ATTR    &topaz80_attr
  38.  
  39.     /* Globals */
  40.  
  41. struct IntuitionBase  *IntuitionBase;
  42. struct GfxBase        *GfxBase;
  43.  
  44.     /* Statics */
  45.  
  46. STATIC struct NewWindow  test_new_window = { 0, 0, WINDOW_WIDTH,
  47.    WINDOW_HEIGHT, 0, 1, CLOSEWINDOW | MENUPICK, WINDOWCLOSE | WINDOWDRAG |
  48.    WINDOWDEPTH | SMART_REFRESH | NOCAREREFRESH | ACTIVATE, NULL, NULL,
  49.    WINDOW_TITLE, NULL, NULL, 0, 0, 0, 0, WBENCHSCREEN };
  50. STATIC struct TextAttr  topaz80_attr = { (STRPTR)"topaz.font", TOPAZ_EIGHTY,
  51.                            FS_NORMAL, FPF_ROMFONT },
  52.             topaz60_attr = { (STRPTR)"topaz.font", TOPAZ_SIXTY,
  53.                            FS_NORMAL, FPF_ROMFONT };
  54.     /* Defines for test menus */
  55.  
  56. #define TEST_MENU_TEXT_ATTR    &topaz60_attr
  57.  
  58.     /* Statics for test menus */
  59.  
  60. STATIC struct MenuData  test_menu_data[] = {
  61.    {
  62.     MENU_DATA_TYPE_TITLE, 0, "Menu 0", NULL, 0
  63.    }, {
  64.        MENU_DATA_TYPE_ITEM, MENU_DATA_FLAG_ATTRIBUTE | MENU_DATA_FLAG_SELECTED, "Item 0.0", "0", ~(1L << 0)
  65.    }, {
  66.        MENU_DATA_TYPE_ITEM, MENU_DATA_FLAG_ATTRIBUTE, "Item 0.1", "1", ~(1L << 1)
  67.    }, {
  68.        MENU_DATA_TYPE_ITEM, MENU_DATA_FLAG_HIGH_BOX, "Item 0.2", NULL, 0
  69.    }, {
  70.           MENU_DATA_TYPE_SUBITEM, 0, "Item 0.2.0", "A", 0
  71.    }, {
  72.           MENU_DATA_TYPE_SUBITEM, 0, "Item 0.2.1", "B", 0
  73.    }, {
  74.        MENU_DATA_TYPE_ITEM, 0, "Item 0.3", NULL, 0
  75.    }, {
  76.     MENU_DATA_TYPE_TITLE, 0, "Menu 1", NULL, 0
  77.    }, {
  78.        MENU_DATA_TYPE_ITEM, MENU_DATA_FLAG_HIGH_BOX, "Item 1.0", "C", 0
  79.    }, {
  80.        MENU_DATA_TYPE_ITEM, MENU_DATA_FLAG_EMPTY_LINE, "Item 1.1", "D", 0
  81.    }, {
  82.        MENU_DATA_TYPE_ITEM, 0, "Item 1.2", NULL, 0
  83.    }, {
  84.           MENU_DATA_TYPE_SUBITEM, 0, "Item 1.2.0", "E", 0
  85.    }, {
  86.           MENU_DATA_TYPE_SUBITEM, 0, "Item 1.2.1", "F", 0
  87.    }, {
  88.        MENU_DATA_TYPE_ITEM, 0, "Item 1.3", NULL, 0
  89.    }, {
  90.           MENU_DATA_TYPE_SUBITEM, 0, "Item 1.3.0", "G", 0
  91.    }, {
  92.           MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_EMPTY_LINE, "Item 1.3.1", "H", 0
  93.    }, {
  94.        MENU_DATA_TYPE_ITEM, 0, "Item 1.4", "I", 0
  95.    }, {
  96.     INTUISUP_DATA_END        /* mark end of menu data */
  97.    }
  98. };
  99.     /* Prototypes */
  100.  
  101. VOID test_action(struct RenderInfo  *ri, struct Window  *win,
  102.                               struct MenuList  *ml);
  103.     /* Pragmas */
  104.  
  105. #pragma regcall(test_action(a0,a1,a2))
  106.  
  107.     /* Menus test */
  108.  
  109.    LONG
  110. main(VOID)
  111. {
  112.    struct RenderInfo  *ri;
  113.    struct Window      *win;
  114.    struct MenuList    *ml;
  115.  
  116.    if (IntuitionBase = OpenLibrary("intuition.library", 0L)) {
  117.       if (GfxBase = OpenLibrary("graphics.library", 0L)) {
  118.      if (ri = get_render_info(NULL, RENDER_INFO_FLAGS)) {
  119.         if (win = open_window(ri, &test_new_window, OPEN_WINDOW_FLAGS)) {
  120.            print_text(ri, win, MESSAGE1_TEXT, 0, MESSAGE1_TOP_EDGE,
  121.                  TEXT_DATA_TYPE_TEXT, TEXT_DATA_FLAG_CENTER,
  122.                                  MESSAGE2_TEXT_ATTR);
  123.            if (ml = create_menu(ri, win, &test_menu_data[0],
  124.                              TEST_MENU_TEXT_ATTR)) {
  125.           attach_menu(win, ml);
  126.           test_action(ri, win, ml);
  127.           remove_menu(ml);
  128.           free_menu(ml);
  129.            }
  130.            CloseWindow(win);
  131.         }
  132.         free_render_info(ri);
  133.      }
  134.      CloseLibrary(GfxBase);
  135.       }
  136.       CloseLibrary(IntuitionBase);
  137.    }
  138.    return(0L);
  139. }
  140.     /* Perform IDCMP action */
  141.  
  142.    VOID
  143. test_action(struct RenderInfo  *ri, struct Window  *win, struct MenuList  *ml)
  144. {
  145.    struct MsgPort       *up = win->UserPort;
  146.    struct IntuiMessage  *msg;
  147.    BYTE   buffer[80];
  148.    ULONG  class;
  149.    USHORT code;
  150.    BOOL   keepon = TRUE;
  151.  
  152.    do {
  153.       WaitPort(up);
  154.       while (msg = (struct IntuiMessage *)GetMsg(up)) {
  155.      class = msg->Class;
  156.      code  = msg->Code;
  157.      ReplyMsg((struct Message *)msg);
  158.      switch (class) {
  159.         case CLOSEWINDOW :
  160.            keepon = FALSE;
  161.            break;
  162.  
  163.         case MENUPICK :
  164.            while (code != MENUNULL) {
  165.           sprintf(&buffer[0], MESSAGE2_TEXT,
  166.                   (MENUNUM(code) != NOMENU ? MENUNUM(code) : 0),
  167.                   (ITEMNUM(code) != NOITEM ? ITEMNUM(code) : 0),
  168.                 (SUBNUM(code) != NOSUB ? SUBNUM(code) : 0));
  169.           clear_render_window(ri, win, 0, MESSAGE2_TOP_EDGE,
  170.                               WINDOW_WIDTH, 10);
  171.           print_text(ri, win, &buffer[0], 0, MESSAGE2_TOP_EDGE,
  172.                 TEXT_DATA_TYPE_TEXT, TEXT_DATA_FLAG_CENTER |
  173.                  TEXT_DATA_FLAG_COLOR2, MESSAGE2_TEXT_ATTR);
  174.           code = menu_item_address(ml, code)->NextSelect;
  175.            }
  176.            break;
  177.      }
  178.       }
  179.    } while (keepon == TRUE);
  180. }
  181.