menuitem.h
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:13k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * menuitem.h
  3.  * 
  4.  * Menu Item class.
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  25.  * All Rights Reserved.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: menuitem.h,v $
  30.  * Revision 1.21  1999/03/10 03:49:52  robertj
  31.  * More documentation adjustments.
  32.  *
  33.  * Revision 1.20  1999/03/09 08:01:49  robertj
  34.  * Changed comments for doc++ support (more to come).
  35.  *
  36.  * Revision 1.19  1999/02/16 08:08:46  robertj
  37.  * MSVC 6.0 compatibility changes.
  38.  *
  39.  * Revision 1.18  1998/09/23 06:24:21  robertj
  40.  * Added open source copyright license.
  41.  *
  42.  * Revision 1.17  1995/03/14 12:41:47  robertj
  43.  * Updated documentation to use HTML codes.
  44.  *
  45.  * Revision 1.16  1995/02/19  04:11:21  robertj
  46.  * Changed mechanism for implementing menu item check groups.
  47.  * Added dynamically linked command processing.
  48.  *
  49.  * Revision 1.15  1995/01/03  09:36:16  robertj
  50.  * Documentation.
  51.  *
  52.  * Revision 1.14  1994/11/19  00:06:03  robertj
  53.  * Removed variable argument list binding for menus and controls.
  54.  *
  55.  * Revision 1.13  1994/10/30  11:46:50  robertj
  56.  * Changed mechanism for doing notification callback functions.
  57.  *
  58.  * Revision 1.12  1994/08/23  11:32:52  robertj
  59.  * Oops
  60.  *
  61.  * Revision 1.11  1994/08/22  00:46:48  robertj
  62.  * Added pragma fro GNU C++ compiler.
  63.  *
  64.  * Revision 1.10  1994/06/25  11:55:15  robertj
  65.  * Unix version synchronisation.
  66.  *
  67.  * Revision 1.9  1994/03/07  07:38:19  robertj
  68.  * Major enhancementsacross the board.
  69.  *
  70.  * Revision 1.8  1994/01/03  04:42:23  robertj
  71.  * Mass changes to common container classes and interactors etc etc etc.
  72.  *
  73.  * Revision 1.7  1993/12/16  06:20:57  robertj
  74.  * Changes to callback function definition due to GCC.
  75.  *
  76.  * Revision 1.6  1993/12/01  16:09:05  robertj
  77.  * Windows NT port.
  78.  *
  79.  * Revision 1.5  1993/10/16  20:33:20  robertj
  80.  * Added extra parameter to common contstructor code for Unix compatibility.
  81.  *
  82.  * Revision 1.4  1993/08/27  18:17:47  robertj
  83.  * Added group menu mutually exclusive checking.
  84.  *
  85.  * Revision 1.3  1993/08/21  01:50:33  robertj
  86.  * Made Clone() function optional, default will assert if called.
  87.  *
  88.  * Revision 1.2  1993/07/14  12:49:16  robertj
  89.  * Fixed RCS keywords.
  90.  *
  91.  */
  92. #define _PMENUITEM
  93. #ifdef __GNUC__
  94. #pragma interface
  95. #endif
  96. class PMenuItem;
  97. /**A class representing a menu item.
  98.    A menu item is a selectable command within a menu. The menu may carry with
  99.    it a callback function which is executed when the menu item is selected.
  100.    Also a menu item may have an {it accelerator} attached to it. This is a
  101.    Ref{PKeyCode} that represents a key that will execute the menu command
  102.    when pressed.
  103.    
  104.    All menu items have a unique identifier across all items in a particular
  105.    tree of menus, ie for a given Ref{PRootMenu} class instance. The system
  106.    will automatically guarentee this when menus are built manually. If they
  107.    come from resources, they PWLib resource compiler takes this responsibility.
  108.    If resources are generated in some other way then it is up to the
  109.    programmer.
  110.    
  111.    The menu name is processed for the special character '&' to place an
  112.    underline attribute on the next character. To place an '&' itself into the
  113.    string then two censecutive ampersands ("&&") must be used. The character
  114.    in the string marked with the ampersand is the letter that selects the menu
  115.    item when the menu selection operation is in progress, This is different
  116.    from the accelerator which may be pressed at any time to select the menu
  117.    item.
  118.    
  119.    A menu may also be {it enabled} or {it disabled}. A disabled menu is
  120.    visually distinct from an enabled menu item. This is also referred to as
  121.    "greying" the menu item.
  122.    A menu item may also have a {it check mark} next to it indicating a state
  123.    for the menu item. The exact appearance is platform dependent.
  124.  */
  125. class PMenuItem : public PMenuEntry
  126. {
  127.   PCLASSINFO(PMenuItem, PMenuEntry);
  128.   public:
  129.    /**Create a new menu items in the specified menu that has the specified 
  130.        name, accelerator key code and notification function.
  131.      */
  132.     PMenuItem(
  133.       PSubMenu & menu,        /// Menu into which the new entry is to be placed.
  134.       const PString & itemName, /// Name of the menu item.
  135.       PMenuEntry * before = NULL
  136.      /**Menu entry before which the entry is to be inserted. If this is NULL
  137.          then the menu entry is appended to the end of the menu.
  138.        */
  139.     );
  140.     PMenuItem(
  141.       PSubMenu & menu,        /// Menu into which the new entry is to be placed.
  142.       const PString & itemName, /// Name of the menu item.
  143.       const PNotifier & notify, /// Notification function when item selected.
  144.       BOOL notifyForStateUpdate = FALSE,
  145.      /**Notification function is to be called when a menu item requires its
  146.          enable or check state updated. If FALSE the notification function is
  147.          only called when the item is selected.
  148.        */
  149.       PMenuEntry * before = NULL
  150.      /**Menu entry before which the entry is to be inserted. If this is NULL
  151.          then the menu entry is appended to the end of the menu.
  152.        */
  153.     );
  154.     PMenuItem(
  155.       PSubMenu & menu,        /// Menu into which the new entry is to be placed.
  156.       const PString & itemName, /// Name of the menu item.
  157.       const PKeyCode & accel,   /// Key code for accelerator on menu function.
  158.       const PNotifier & notify, /// Notification function when item selected.
  159.       BOOL notifyForStateUpdate = FALSE,
  160.      /**Notification function is to be called when a menu item requires its
  161.          enable or check state updated. If FALSE the notification function is
  162.          only called when the item is selected.
  163.        */
  164.       PMenuEntry * before = NULL
  165.      /**Menu entry before which the entry is to be inserted. If this is NULL
  166.          then the menu entry is appended to the end of the menu.
  167.        */
  168.     );
  169.    /**Helper constructor for when creating menu from a resource. Creates the
  170.        object given the menu ID as used in the resource template.
  171.      */
  172.     PMenuItem(
  173.       PRESOURCE_ID newID,
  174.       PSubMenu & menu,        /// Menu into which the new entry is to be placed.
  175.       const char * itemName,    /// Name of the menu item.
  176.       const PKeyCode & accel    /// Key code for accelerator on menu function.
  177.     );
  178.     /** Destroy the menu item removing it from its owner menu. */
  179.     virtual ~PMenuItem();
  180.   /**@name Overrides from class PMenuEntry */
  181.    /**Set the string contents of the menu item. This string is scanned for the
  182.        special character '&' to place an underline attribute on the next
  183.        character.
  184.      */
  185.     virtual void SetString(
  186.       const PString & str   /// New string for the menu entry.
  187.     );
  188.    /**Get the current string name of the menu entry. 
  189.        @return
  190.        string for the menu item name.
  191.      */
  192.     virtual PString GetString() const;
  193.    /**Determine if the menu entry is in a menu item check group. If the entry
  194.        is not a menu item or does not have the same notification function, the
  195.        qualification for being in a menu check group, then returns FALSE.
  196.        @return
  197.        TRUE if in check group, FALSE otherwise.
  198.      */
  199.     virtual BOOL IsMenuItemCheckGroup(const PMenuItem& groupItem) const;
  200.   /**@name New functions for class */
  201.     /** Set the accelerator key code associated with the menu item. */
  202.     void SetAccelerator(
  203.       const PKeyCode & accel   /// New accelerator for the menu item.
  204.     );
  205.    /**Get the accelerator key code associated with the menu item.
  206.     
  207.        @return
  208.        key code for accelerator.
  209.      */
  210.     PKeyCode GetAccelerator() const;
  211.    /**Set the notification function associated with the menu item. The extra
  212.        integer on the indicates whether the menu item was selected (FALSE) or
  213.        requires its state updated (TRUE). The latter is only called if the
  214.        #notifyForStateUpdate# flag is set to TRUE.
  215.      */
  216.     void SetNotifier(
  217.       const PNotifier & notify,  /// New notification function for menu item
  218.       BOOL notifyForStateUpdate = FALSE
  219.      /**Notification function is to be called when a menu item requires its
  220.          enable or check state updated. If FALSE the notification function is
  221.          only called when the item is selected.
  222.        */
  223.     );
  224.    /**Get the notification function associated with the menu item.
  225.     
  226.        @return
  227.        notification function for menu item.
  228.      */
  229.     const PNotifier & GetNotifier() const;
  230.    /**Get the flag for notification function called when a menu item requires
  231.        its enable or check state updated.
  232.     
  233.        @return
  234.        current update flag for menu item.
  235.      */
  236.     BOOL WillNotifyOnStateUpdate() const;
  237.     /** Enable or disable the menu item. */
  238.     void Enable(
  239.       BOOL enabled = TRUE   /// New enable state for menu item.
  240.     );
  241.    /**Disable the menu item. This is equivalent to
  242.        #Enable(FALSE)#.
  243.      */
  244.     void Disable();
  245.    /**Determine if the menu item is currently enabled or disabled.
  246.     
  247.        @return
  248.        TRUE if the menu item is enabled.
  249.      */
  250.     BOOL IsEnabled() const;
  251.     /** Check or uncheck the menu item. */
  252.     void Check(
  253.       BOOL checked = TRUE   /// New state for the menu check mark.
  254.     );
  255.     /** Uncheck the menu item. This is equivalent to #Check(FALSE)#. */
  256.     void Uncheck();
  257.    /**Determine if the menu item is currently checked or unchecked.
  258.        @return
  259.        TRUE if the menu item is checked.
  260.      */
  261.     BOOL IsChecked() const;
  262.    /**Set the current check state value pointer associated with the menu item.
  263.        The boolean pointed to by this is automatically updated to the state
  264.        of the check mark.
  265.      */
  266.     void SetCheckPointer(
  267.       BOOL * ptr    /// Pointer to variable to be updated with check state.
  268.     );
  269.    /**Get the current check state value pointer associated with the menu item.
  270.        The boolean pointed to by this is automatically updated to the state
  271.        of the check mark.
  272.        
  273.        @return
  274.        pointer to check state variable.
  275.      */
  276.     BOOL * GetCheckPointer() const;
  277.    /**Check this item, or the specified item, and uncheck all other items in
  278.        the menu with the same notification function as this menu item.
  279.        The index numbers start with one for the first item with the same
  280.        notification function. A value of zero indicates no item is checked.
  281.        This will give a similar functionality to a set of radio button
  282.        controls, setting one of mutually exclusive options.
  283.      */
  284.     void SetGroupCheck(
  285.       PINDEX newItem      /// Index of the menu item to be checked in the group.
  286.     );
  287.     void SetGroupCheck();
  288.    /**Get the index of the menu item that is checked in the set of items in
  289.        the menu with the same notification function as this item.
  290.        The index numbers start with one for the first item with the same
  291.        notification function. A value of zero indicates no item is checked.
  292.        This will give a similar functionality to a set of radio button
  293.        controls, setting one of mutually exclusive options.
  294.        
  295.        @return
  296.        index of selected menu item.
  297.      */
  298.     PINDEX GetGroupCheck() const;
  299.   protected:
  300.   /**@name New functions for class */
  301.     /** Do the common initialisation of a menu item amongst the constructors. */
  302.     void Construct(
  303.       BOOL setID    /// Flag for generating a new menu resource ID for the item.
  304.     );
  305.    /**Scan through all menu items in the menu and execute their notification
  306.        function to enable or disable and check or uncheck the menu item.
  307.        For a menu item this calls the notification function if allowed by the
  308.        #notifyForStateUpdate# flag.
  309.        This function is used internally by the library. It would normally not
  310.        be called directly.
  311.      */
  312.     virtual void UpdateMyCommandSources();
  313.   // Member variables
  314.       /** Name of the menu item. */
  315.     PString name;
  316.       /** Accelerator for the menu item. */
  317.     PKeyCode accelerator;
  318.       /** Notification function to call on menu selection. */
  319.     PNotifier callback;
  320.  
  321.       /** Pointer to variable to contain the check state of the menu item. */
  322.     BOOL * checkPointer;
  323.       /** Unique menu ID for resource binding */
  324.     PRESOURCE_ID menuID;
  325.      /**Flag for notification function called when a menu item requires its
  326.          enable or check state updated.
  327.        */
  328.     BOOL notifyForStateUpdate;
  329. #ifdef DOC_PLUS_PLUS
  330. };
  331. #endif
  332. // Class declaration continued in platform specific header file ///////////////