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

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * menuent.h
  3.  *
  4.  * Menu entry ancestor 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: menuent.h,v $
  30.  * Revision 1.13  1999/03/10 03:49:52  robertj
  31.  * More documentation adjustments.
  32.  *
  33.  * Revision 1.12  1999/03/09 08:01:49  robertj
  34.  * Changed comments for doc++ support (more to come).
  35.  *
  36.  * Revision 1.11  1999/02/16 08:08:45  robertj
  37.  * MSVC 6.0 compatibility changes.
  38.  *
  39.  * Revision 1.10  1998/09/23 06:24:19  robertj
  40.  * Added open source copyright license.
  41.  *
  42.  * Revision 1.9  1995/03/14 12:41:47  robertj
  43.  * Updated documentation to use HTML codes.
  44.  *
  45.  * Revision 1.8  1995/02/19  04:11:03  robertj
  46.  * Changed mechanism for implementing menu item check groups.
  47.  * Added dynamically linked command processing.
  48.  *
  49.  * Revision 1.7  1995/01/03  09:36:15  robertj
  50.  * Documentation.
  51.  *
  52.  * Revision 1.6  1994/08/23  11:32:52  robertj
  53.  * Oops
  54.  *
  55.  * Revision 1.5  1994/08/22  00:46:48  robertj
  56.  * Added pragma fro GNU C++ compiler.
  57.  *
  58.  * Revision 1.4  1994/06/25  11:55:15  robertj
  59.  * Unix version synchronisation.
  60.  *
  61.  * Revision 1.3  1994/01/03  04:42:23  robertj
  62.  * Mass changes to common container classes and interactors etc etc etc.
  63.  *
  64.  * Revision 1.2  1993/07/14  12:49:16  robertj
  65.  * Fixed RCS keywords.
  66.  *
  67.  */
  68. #define _PMENUENTRY
  69. #ifdef __GNUC__
  70. #pragma interface
  71. #endif
  72. class PSubMenu;
  73. class PRootMenu;
  74. class PMenuItem;
  75. /**A abstract class representing an entry in a menu. A menu entry may be a
  76.    menu item that may be selected by the user, a menu separator or a sub-menu
  77.    of more menu entries.
  78.  */
  79. class PMenuEntry : public PObject
  80. {
  81.   PCLASSINFO(PMenuEntry, PObject);
  82.   public:
  83.    /**Create a menu entry. This places the new menu entry into the menu
  84.        specified at the position specified.
  85.      */
  86.     PMenuEntry(
  87.       PSubMenu & menu,      /// Menu into which the new entry is to be placed.
  88.       PMenuEntry * before
  89.      /**Menu entry before which the entry is to be inserted. If this is NULL
  90.          then the menu entry is appended to the end of the menu.
  91.        */
  92.     );
  93.     /** Destroy the menu entry. */
  94.     virtual ~PMenuEntry();
  95.   /**@name Overrides from PObject */
  96.    /**Determine if the two menu entry objects are the "same".
  97.        @return
  98.        #EqualTo# if the two menus entries have the same position in
  99.        the same menu, otherwise #GreaterThan#.
  100.      */
  101.     virtual Comparison Compare(
  102.       const PObject & obj   /// Menu entry to compare against.
  103.     ) const;
  104.   /**@name New functions for class */
  105.    /**Set the string name of the menu entry. The specific descendent class
  106.        determines what the string is. For example in a separator this does
  107.        nothing but in a menu item it is the text representation of the menu
  108.        item.
  109.      */
  110.     virtual void SetString(
  111.       const PString & str   /// New string for the menu entry.
  112.     ) = 0;
  113.     
  114.    /**Get the current string name of the menu entry. The specific descendent
  115.        class determines what the string is. For example in a separator this
  116.        does nothing but in a menu item it is the text representation of the
  117.        menu item.
  118.        @return
  119.        string for the menu entry.
  120.      */
  121.     virtual PString GetString() const = 0;
  122.    /**Get the menu this entry is contained in.
  123.        @return
  124.        pointer to owner menu.
  125.      */
  126.     PSubMenu * GetMenu() const;
  127.    /**Get the top most menu of the tree of sub-menus that the entry is
  128.        contained in.
  129.        
  130.        @return
  131.        root menu for entry.
  132.      */
  133.     PRootMenu * GetRootMenu() const;
  134.    /**Get the position in the menu of this entry. This first entry is at zero.
  135.        @return
  136.        ordinal index position in the menu for the entry.
  137.      */
  138.     PINDEX GetPosition() const;
  139.    /**Determine if the menu entry is in a menu item check group. If the entry
  140.        is not a menu item or does not have the same notification function, the
  141.        qualification for being in a menu check group, then returns FALSE.
  142.        @return
  143.        TRUE if in check group, FALSE otherwise.
  144.      */
  145.     virtual BOOL IsMenuItemCheckGroup(const PMenuItem & groupItem) const;
  146.   protected:
  147.       /** Internal constructor for root menus. */
  148.     PMenuEntry();
  149.    /**Scan through all menu items in the menu and execute their notification
  150.        function to enable or disable and check or uncheck the menu item.
  151.        This function is used internally by the library. It would normally not
  152.        be called directly.
  153.      */
  154.     virtual void UpdateMyCommandSources();
  155.     // Member variables
  156.       /** The menu that this entry is contained in. */
  157.     PSubMenu * itsMenu;
  158.   friend class PSubMenu;
  159. #ifdef DOC_PLUS_PLUS
  160. };
  161. #endif
  162. // Class declaration continued in platform specific header file ///////////////