home *** CD-ROM | disk | FTP | other *** search
/ Power GUI Programming with VisualAge C++ / powergui.iso / trialva / ibmcppw / include / imenu.hpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-02-22  |  9.9 KB  |  301 lines

  1. #ifndef _IMENU_
  2. #define _IMENU_
  3. /*******************************************************************************
  4. * FILE NAME: imenu.hpp                                                         *
  5. *                                                                              *
  6. * DESCRIPTION:                                                                 *
  7. *   Declaration of the classes:                                                *
  8. *     IMenu                                                                    *
  9. *     IMenu::Cursor                                                            *
  10. *                                                                              *
  11. * COPYRIGHT:                                                                   *
  12. *   IBM Open Class Library                                                     *
  13. *   (C) Copyright International Business Machines Corporation 1992, 1996       *
  14. *   Licensed Material - Program-Property of IBM - All Rights Reserved.         *
  15. *   US Government Users Restricted Rights - Use, duplication, or disclosure    *
  16. *   restricted by GSA ADP Schedule Contract with IBM Corp.                     *
  17. *                                                                              *
  18. *******************************************************************************/
  19. #include <iwindow.hpp>
  20. #include <iframe.hpp>
  21.  
  22. class IMenuItem;
  23. class IColor;
  24. class IResourceId;
  25. class IMenuData;
  26. class IMenuCursorData;
  27. struct _WidgetRec;
  28.  
  29. #pragma pack(4)
  30.  
  31. class IMenu : public IWindow {
  32. typedef IWindow
  33.   Inherited;
  34. public:
  35. /*------------------------------- Constructors -------------------------------*/
  36.   IMenu ( const IMenuHandle& menuHandle );
  37.  
  38. virtual
  39.  ~IMenu ( );
  40.  
  41. /*---------------------------------- Styles ----------------------------------*/
  42. INESTEDBITFLAGCLASSDEF1(Style, IMenu, IWindow);
  43.  
  44. static const Style
  45.   IC_IMPORTU classDefaultStyle,
  46.   IC_IMPORTU noStyle;
  47.  
  48. static Style
  49.   defaultStyle      ( );
  50.  
  51. static void
  52.   setDefaultStyle   ( const Style&    aStyle );
  53.  
  54. virtual unsigned long
  55.   convertToGUIStyle ( const IBitFlag& style,
  56.                       Boolean         extendedOnly = false ) const;
  57.  
  58. /*------------------------------- Adding Items -------------------------------*/
  59. virtual IMenu
  60.  &addItem      ( IMenuItem&           menuItem,
  61.                  unsigned long        intoSubmenuId = 0),
  62.  &addText      ( unsigned long        newItemId,
  63.                  const char*          itemText,
  64.                  unsigned long        intoSubmenuId = 0),
  65.  &addText      ( unsigned long        newItemId,
  66.                  const IResourceId&   textResId,
  67.                  unsigned long        intoSubmenuId = 0),
  68.  &addBitmap    ( unsigned long        newItemId,
  69.                  const IBitmapHandle& itemBitmap,
  70.                  unsigned long        intoSubmenuId = 0),
  71.  &addBitmap    ( unsigned long        newItemId,
  72.                  const IResourceId&   bitmapResId,
  73.                  unsigned long        intoSubmenuId = 0),
  74.  &addBitmap    ( unsigned long        newItemId,
  75.                  unsigned long        bitmapResId,
  76.                  unsigned long        intoSubmenuId = 0),
  77.  &addSeparator ( unsigned long        newItemId,
  78.                  unsigned long        intoSubmenuId),
  79.  &addSeparator ( unsigned long        intoSubmenuId = 0 ),
  80.  &addSubmenu   ( unsigned long        itemId ),
  81.  &addSubmenu   ( unsigned long        itemId,
  82.                  const IResourceId&   submenuResId );
  83.  
  84. /*----------------------------- Replacing Items ------------------------------*/
  85. virtual IMenu
  86.  &setItem    ( const IMenuItem&     menuItem ),
  87.  &setText    ( unsigned long        menuItemId,
  88.                const char*          newText     ),
  89.  &setText    ( unsigned long        menuItemId,
  90.                const IResourceId&   newTextResId ),
  91.  &setBitmap  ( unsigned long        menuItemId,
  92.                const IBitmapHandle& bitmapHandle ),
  93.  &setBitmap  ( unsigned long        menuItemId,
  94.                const IResourceId&   newBitmapResId ),
  95.  &setBitmap  ( unsigned long        menuItemId,
  96.                unsigned long        newBitmapResId ),
  97.  &setSubmenu ( unsigned long        itemId,
  98.                const IResourceId&   submenuResId );
  99.  
  100. /*------------------------------ Removing Items ------------------------------*/
  101. virtual IMenu
  102.  &deleteItem    ( unsigned long itemId ),
  103.  &removeSubmenu ( unsigned long itemWithSubmenuId );
  104.  
  105. /*-------------------------------- Selection ---------------------------------*/
  106. virtual IMenu
  107.  &checkItem     ( unsigned long itemId,
  108.                   Boolean       check  = true ),
  109.  &uncheckItem   ( unsigned long itemId ),
  110.  &enableItem    ( unsigned long itemId,
  111.                   Boolean       enable = true ),
  112.  &disableItem   ( unsigned long itemId ),
  113.  &selectItem    ( unsigned long itemId );
  114.  
  115. Boolean
  116.   isItemChecked ( unsigned long itemId ) const,
  117.   isItemEnabled ( unsigned long itemId ) const;
  118.  
  119. /*----------------------------- Item Properties ------------------------------*/
  120. IMenuItem
  121.   menuItem      ( unsigned long itemId ) const;
  122. IRectangle
  123.   itemRect      ( unsigned long itemId ) const;
  124. unsigned long
  125.   numberOfItems ( unsigned long forSubmenuId = 0 ) const;
  126.  
  127. /*----------------------------- Overrides ------------------------------------*/
  128. virtual Boolean
  129.   isValid            ( ) const,
  130.   isFrameWindow      ( ) const;
  131. virtual IWindow
  132.  *owner              ( ) const;
  133. virtual IMenu
  134.  &enableUpdate       ( Boolean           enableWindow = true ),
  135.  &disableUpdate      ( ),
  136.  &refresh            ( RefreshType       type=paintAll ),
  137.  &refresh            ( const IRectangle& invalidRectangle,
  138.                        Boolean           immediate=false );
  139. virtual unsigned long
  140.   id                 ( ) const;
  141.  
  142. virtual IMenuHandle
  143.   menuHandle    ( ) const;
  144.  
  145. virtual IMenu
  146.  &setConditionalCascade    ( unsigned long itemWithSubmenuId,
  147.                              unsigned long defaultItemId ),
  148.  &removeConditionalCascade ( unsigned long itemWithSubmenuId );
  149.  
  150. /*----------------------------- Menu Item Help -------------------------------*/
  151. virtual IMenu
  152.  &setItemHelpId       ( unsigned long  menuItemId,
  153.                         unsigned long  helpTopicId );
  154. unsigned long
  155.   itemHelpId          ( unsigned long  menuItemId ) const;
  156.  
  157. /*---------------------------------- Color -----------------------------------*/
  158. #ifndef IC_WIN_FLAGNOP
  159. virtual IColor
  160.   foregroundColor         ( ) const,
  161.   backgroundColor         ( ) const;
  162. #endif // !IC_WIN_FLAGNOP
  163.  
  164. #ifndef IC_MOTIFWIN_FLAGNOP
  165. virtual IColor
  166.   disabledForegroundColor ( ) const,
  167.   disabledBackgroundColor ( ) const,
  168.   hiliteForegroundColor   ( ) const,
  169.   hiliteBackgroundColor   ( ) const;
  170. #endif // !IC_MOTIFWIN_FLAGNOP
  171.  
  172. #ifndef IC_WIN_FLAGNOP
  173. virtual IMenu
  174.   &setForegroundColor         ( const IColor& color ),
  175.   &setBackgroundColor         ( const IColor& color );
  176. #endif // !IC_WIN_FLAGNOP
  177.  
  178. #ifndef IC_MOTIFWIN_FLAGNOP
  179. virtual IMenu
  180.   &setDisabledForegroundColor ( const IColor& color ),
  181.   &setDisabledBackgroundColor ( const IColor& color ),
  182.   &setHiliteForegroundColor   ( const IColor& color ),
  183.   &setHiliteBackgroundColor   ( const IColor& color );
  184.  
  185. virtual IMenu
  186.   &resetForegroundColor         ( ),
  187.   &resetBackgroundColor         ( ),
  188.   &resetDisabledForegroundColor ( ),
  189.   &resetDisabledBackgroundColor ( ),
  190.   &resetHiliteForegroundColor   ( ),
  191.   &resetHiliteBackgroundColor   ( );
  192. #endif // IC_MOTIFWIN_FLAGNOP
  193.  
  194. class Cursor : public IVBase {
  195. public :
  196. /*---------------------------- Constructors -----------------------------*/
  197.   Cursor ( const IMenu& menu,
  198.            unsigned long forSubmenuId = 0 );
  199.  
  200. virtual
  201.  ~Cursor ( );
  202.  
  203. /*--------------------------- Cursor Movement ---------------------------*/
  204. virtual Boolean
  205.   setToFirst    ( ),
  206.   setToNext     ( ),
  207.   setToPrevious ( ),
  208.   setToLast     ( );
  209.  
  210. /*-------------------------- Cursor Validation --------------------------*/
  211. virtual Boolean
  212.   isValid    ( ) const;
  213. virtual void
  214.   invalidate ( );
  215.  
  216. private:
  217. /*--------------------------- Hidden Members ----------------------------*/
  218.   Cursor ( const Cursor& cursor );
  219.  
  220. /*------------------------------- Private -------------------------------*/
  221. friend class IMenu;
  222.  
  223. long
  224.   lCurrent;
  225. unsigned long
  226.   ulSubmenu;
  227. IMenu
  228.  *pMenu;
  229.  
  230. IMenuCursorData
  231.  *fCursorData;
  232. }; // IMenu::Cursor
  233.  
  234. /*--------------------------- Cursored Operations ----------------------------*/
  235. virtual IMenuItem
  236.   elementAt       ( const Cursor& cursor ) const;
  237.  
  238. virtual IMenu
  239.  &deleteAt        ( Cursor&       cursor ),
  240.  &removeSubmenuAt ( Cursor&       cursor ),
  241.  
  242.  &add             ( IMenuItem&    menuItem,
  243.                     Cursor&       cursor ),
  244.  &addAsNext       ( IMenuItem&    menuItem,
  245.                     Cursor&       cursor );
  246.  
  247. Cursor
  248.   cursor          ( unsigned long itemId,
  249.                     unsigned long inSubmenuId = 0 ) const;
  250.  
  251. /*-------------------------- Observer Notification ---------------------------*/
  252. virtual IMenu
  253.  &enableNotification ( Boolean enable = true );
  254.  
  255. protected:
  256. /*------------------------------- Constructors -------------------------------*/
  257.   IMenu ( );
  258.  
  259. private:
  260. /*------------------------------ Hidden Members ------------------------------*/
  261.   IMenu      ( const IMenu& menu );
  262. IMenu
  263.  &operator = ( const IMenu& menu );
  264.  
  265. /*--------------------------------- Private ----------------------------------*/
  266. friend class IMenuBar;
  267. friend class IPopUpMenu;
  268. friend class ISubmenu;
  269. friend class ISystemMenu;
  270.  
  271. unsigned long
  272.   menuItemId     ( const Cursor&        cursor ) const;
  273. void
  274.   refCountBitmap ( const IBitmapHandle& handle );
  275. IMenuHandle
  276.   submenuHandle  ( unsigned long        submenuId ) const;
  277. IMenuHandle
  278.   fhMenu;
  279. IWindowHandle
  280.   fowner;
  281. IFrameWindow
  282.  *fmenuFrame;
  283.  
  284. static Style
  285.   currentDefaultStyle;
  286. void
  287.  *pBitmapList;
  288.  
  289. IMenuData
  290.  *fMenuData;
  291.  
  292. }; // IMenu
  293.  
  294. INESTEDBITFLAGCLASSFUNCS(Style, IMenu);
  295.  
  296. #pragma pack()
  297.  
  298.   #include <imenu.inl>
  299.  
  300. #endif  /* _IMENU_ */
  301.