home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD1.bin / useful / dev / c / cmanual / intuition / menus / example4.c < prev    next >
C/C++ Source or Header  |  1993-10-12  |  13KB  |  338 lines

  1. /***********************************************************/
  2. /*                                                         */
  3. /* Amiga C Encyclopedia (ACE) V3.0      Amiga C Club (ACC) */
  4. /* -------------------------------      ------------------ */
  5. /*                                                         */
  6. /* Book:    ACM Intuition               Amiga C Club       */
  7. /* Chapter: Menus                       Tulevagen 22       */
  8. /* File:    Example4.c                  181 41  LIDINGO    */
  9. /* Author:  Anders Bjerin               SWEDEN             */
  10. /* Date:    92-05-01                                       */
  11. /* Version: 1.10                                           */
  12. /*                                                         */
  13. /*   Copyright 1992, Anders Bjerin - Amiga C Club (ACC)    */
  14. /*                                                         */
  15. /* Registered members may use this program freely in their */
  16. /*     own commercial/noncommercial programs/articles.     */
  17. /*                                                         */
  18. /***********************************************************/
  19.  
  20. /* This program opens a normal window to which we connect a menu strip. */
  21. /* The menu will look like this:                                        */
  22. /*                                                                      */
  23. /* Status                                                               */
  24. /* --------------                                                       */
  25. /* | v Readmode | (ghosted)                                             */
  26. /* |   Editmode |                                                       */
  27. /* --------------                                                       */
  28. /*                                                                      */
  29. /* The Readmode item is selected and ghosted, and when the user selects */
  30. /* the Editmode item, it will become disabled (ghosted) while the read- */
  31. /* mode item will be enabled (not ghosted). This means that if the      */
  32. /* program is in "readmode", the user should only be able to chose the  */
  33. /* "editmode", and v.v.                                                 */ 
  34. /*                                                                      */
  35. /* The purpose with this program is to show how you can use the OnMenu  */
  36. /* and OffMenu functions inorder to make an "user-friendly interface".  */
  37.  
  38.  
  39.  
  40. #include <intuition/intuition.h>
  41.  
  42.  
  43.  
  44. struct IntuitionBase *IntuitionBase;
  45.  
  46.  
  47.  
  48. /*************************************************************************/
  49. /*                       E D I T M O D E   I T E M                       */
  50. /*************************************************************************/
  51.  
  52. /* The text for the editmode item: */
  53. struct IntuiText my_editmode_text=
  54. {
  55.   2,          /* FrontPen, black. */
  56.   0,          /* BackPen, not used since JAM1. */
  57.   JAM1,       /* DrawMode, do not change the background. */
  58.   CHECKWIDTH, /* LeftEdge, CHECKWIDTH amount of pixels out. */
  59.               /* This will leave enough space for the check mark. */
  60.   1,          /* TopEdge, 1 line down. */
  61.   NULL,       /* TextAttr, default font. */
  62.   "Editmode", /* IText, the string. */
  63.   NULL        /* NextItem, no link to other IntuiText structures. */
  64. };
  65.  
  66. /* The MenuItem structure for the editmode item: */
  67. struct MenuItem my_editmode_item=
  68. {
  69.   NULL,            /* NextItem, last item in the list. */
  70.   0,               /* LeftEdge, 0 pixels out. */
  71.   10,              /* TopEdge, 10 lines down. */
  72.   150,             /* Width, 150 pixels wide. */
  73.   10,              /* Height, 10 lines high. */
  74.   ITEMTEXT|        /* Flags, render this item with text. */
  75.   ITEMENABLED|     /*        this item will be enabled. */
  76.   CHECKIT|         /*        it is an attribute item. */
  77.   HIGHCOMP,        /*        complement the colours when highlihted. */
  78.   0xFFFFFFFD,      /* MutualExclude, mutualexclude all items except the */
  79.                    /*                second (this) one. */
  80.   (APTR) &my_editmode_text, /* ItemFill, pointer to the text. */
  81.   NULL,            /* SelectFill, nothing since we complement the col. */
  82.   0,               /* Command, not accessable from the keyboard. */
  83.   NULL,            /* SubItem, ignored by Intuition. */
  84.   MENUNULL,        /* NextSelect, no items selected. */
  85. };
  86.  
  87.  
  88.  
  89. /*************************************************************************/
  90. /*                       R E A D M O D E   I T E M                       */
  91. /*************************************************************************/
  92.  
  93. /* The text for the readmode item: */
  94. struct IntuiText my_readmode_text=
  95. {
  96.   2,          /* FrontPen, black. */
  97.   0,          /* BackPen, not used since JAM1. */
  98.   JAM1,       /* DrawMode, do not change the background. */
  99.   CHECKWIDTH, /* LeftEdge, CHECKWIDTH amount of pixels out. */
  100.               /* This will leave enough space for the check mark. */
  101.   1,          /* TopEdge, 1 line down. */
  102.   NULL,       /* TextAttr, default font. */
  103.   "Readmode", /* IText, the string. */
  104.   NULL        /* NextItem, no link to other IntuiText structures. */
  105. };
  106.  
  107. /* The MenuItem structure for the readmode item: */
  108. struct MenuItem my_readmode_item=
  109. {
  110.   &my_editmode_item, /* NextItem, pointer to the second (edit) item. */
  111.   0,                 /* LeftEdge, 0 pixels out. */
  112.   0,                 /* TopEdge, 0 lines down. */
  113.   150,               /* Width, 150 pixels wide. */
  114.   10,                /* Height, 10 lines high. */
  115.   ITEMTEXT|          /* Flags, render this item with text. */
  116.                      /*        this item will be disabled. */
  117.   CHECKIT|           /*        it is an attribute item. */
  118.   CHECKED|           /*        this item is initially selected. */
  119.   HIGHCOMP,          /*        complement the colours when highlihted. */
  120.   0xFFFFFFFE,        /* MutualExclude, mutualexclude all items except the */
  121.                      /*                first (this) one. */
  122.   (APTR) &my_readmode_text, /* ItemFill, pointer to the text. */
  123.   NULL,              /* SelectFill, nothing since we complement the col. */
  124.   0,                 /* Command, not accessable from the keyboard. */
  125.   NULL,              /* SubItem, ignored by Intuition. */
  126.   MENUNULL,          /* NextSelect, no items selected. */
  127. };
  128.  
  129.  
  130.  
  131. /*************************************************************************/
  132. /*                              M E N U                                  */
  133. /*************************************************************************/
  134.  
  135. /* The Menu structure for the first (and only) menu: */
  136. struct Menu my_menu=
  137. {
  138.   NULL,             /* NextMenu, no more menu structures. */
  139.   0,                /* LeftEdge, left corner. */
  140.   0,                /* TopEdge, for the moment ignored by Intuition. */
  141.   50,               /* Width, 50 pixels wide. */
  142.   0,                /* Height, for the moment ignored by Intuition. */
  143.   MENUENABLED,      /* Flags, this menu will be enabled. */
  144.   "Status",         /* MenuName, the string. */
  145.   &my_readmode_item /* FirstItem, pointer to the first item in the list. */
  146. };
  147.  
  148.  
  149.  
  150. /* Declare a pointer to a Window structure: */ 
  151. struct Window *my_window;
  152.  
  153. /* Declare and initialize your NewWindow structure: */
  154. struct NewWindow my_new_window=
  155. {
  156.   50,            /* LeftEdge    x position of the window. */
  157.   25,            /* TopEdge     y positio of the window. */
  158.   250,           /* Width       250 pixels wide. */
  159.   100,           /* Height      100 lines high. */
  160.   0,             /* DetailPen   Text should be drawn with colour reg. 0 */
  161.   1,             /* BlockPen    Blocks should be drawn with colour reg. 1 */
  162.   CLOSEWINDOW|   /* IDCMPFlags  The window will give us a message if the */
  163.                  /*             user has selected the Close window gad. */
  164.   MENUPICK,
  165.   SMART_REFRESH| /* Flags       Intuition should refresh the window. */
  166.   WINDOWCLOSE|   /*             Close Gadget. */
  167.   WINDOWDRAG|    /*             Drag gadget. */
  168.   WINDOWDEPTH|   /*             Depth arrange Gadgets. */
  169.   WINDOWSIZING|  /*             Sizing Gadget. */
  170.   ACTIVATE,      /*             The window should be Active when opened. */
  171.   NULL,          /* FirstGadget No Custom gadgets. */
  172.   NULL,          /* CheckMark   Use Intuitio