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

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * submenu.h
  3.  *
  4.  * Hierarchical sub-menu.
  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: submenu.h,v $
  30.  * Revision 1.25  1999/03/10 03:49:53  robertj
  31.  * More documentation adjustments.
  32.  *
  33.  * Revision 1.24  1999/03/09 08:01:50  robertj
  34.  * Changed comments for doc++ support (more to come).
  35.  *
  36.  * Revision 1.23  1999/02/16 08:08:46  robertj
  37.  * MSVC 6.0 compatibility changes.
  38.  *
  39.  * Revision 1.22  1998/09/23 06:29:24  robertj
  40.  * Added open source copyright license.
  41.  *
  42.  * Revision 1.21  1995/06/17 11:13:29  robertj
  43.  * Documentation update.
  44.  *
  45.  * Revision 1.20  1995/03/14 12:42:44  robertj
  46.  * Updated documentation to use HTML codes.
  47.  *
  48.  * Revision 1.19  1995/02/19  04:19:22  robertj
  49.  * Added dynamically linked command processing.
  50.  *
  51.  * Revision 1.18  1995/01/09  12:30:11  robertj
  52.  * Added virtual to [] operator for unix implementation.
  53.  *
  54.  * Revision 1.17  1995/01/03  09:36:20  robertj
  55.  * Documentation.
  56.  *
  57.  * Revision 1.16  1994/11/19  00:06:06  robertj
  58.  * Removed variable argument list binding for menus and controls.
  59.  *
  60.  * Revision 1.15  1994/10/30  11:47:23  robertj
  61.  * Changed mechanism for doing notification callback functions.
  62.  *
  63.  * Revision 1.14  1994/08/23  11:32:52  robertj
  64.  * Oops
  65.  *
  66.  * Revision 1.13  1994/08/22  00:46:48  robertj
  67.  * Added pragma fro GNU C++ compiler.
  68.  *
  69.  * Revision 1.12  1994/07/17  10:46:06  robertj
  70.  * Removed unnecessary forward reference.
  71.  *
  72.  * Revision 1.11  1994/06/25  11:55:15  robertj
  73.  * Unix version synchronisation.
  74.  *
  75.  * Revision 1.10  1994/01/03  04:42:23  robertj
  76.  * Mass changes to common container classes and interactors etc etc etc.
  77.  *
  78.  * Revision 1.9  1993/12/16  06:20:57  robertj
  79.  * Changes to callback function definition due to GCC.
  80.  *
  81.  * Revision 1.8  1993/12/09  16:11:23  robertj
  82.  * Removed menu item pointer from array table form as is usually not usable.
  83.  *
  84.  * Revision 1.7  1993/12/01  16:09:05  robertj
  85.  * Windows NT port.
  86.  *
  87.  * Revision 1.6  1993/09/27  16:35:25  robertj
  88.  * Capitalised macro.
  89.  *
  90.  * Revision 1.5  1993/08/21  01:50:33  robertj
  91.  * Made Clone() function optional, default will assert if called.
  92.  *
  93.  * Revision 1.4  1993/08/19  18:03:28  robertj
  94.  * Changed macro names so start with P
  95.  *
  96.  * Revision 1.3  1993/07/14  12:49:16  robertj
  97.  * Fixed RCS keywords.
  98.  *
  99.  */
  100. #define _PSUBMENU
  101. #ifdef __GNUC__
  102. #pragma interface
  103. #endif
  104. /**A class representing a list of menu entries. An instance of a sub-menu,
  105.    rather than a Ref{PRootMenu} which is descended from it, is a heirarchical
  106.    menu supported by most platforms.
  107.  */
  108. class PSubMenu : public PMenuEntry
  109. {
  110.   PCLASSINFO(PSubMenu, PMenuEntry);
  111.   public:
  112.    /**Create a new sub-menu in a hierarchical menu system. Place the new
  113.        sub-menu in the menu specified.
  114.      */
  115.     PSubMenu(
  116.       PSubMenu & menu,        /// Menu into which the new entry is to be placed.
  117.       const PString & itemName, /// Name of the sub-menus title.
  118.       PMenuEntry * before = NULL
  119.      /**Menu entry before which the entry is to be inserted. If this is NULL
  120.          then the menu entry is appended to the end of the menu.
  121.        */
  122.     );
  123.     /** Destroy the menu and all its menu entries. */
  124.     virtual ~PSubMenu();
  125.   /**@name Overrides from class PMenuEntry */
  126.    /**Set the string contents of the menu item. This string is scanned for the
  127.        special character '&' to place an underline attribute on the next
  128.        character.
  129.        
  130.      */
  131.     virtual void SetString(
  132.       const PString & str   /// New string for the menu entry.
  133.     );
  134.    /**Get the current string name of the menu entry. 
  135.        If a top level menu, Ref{PRootMenu} class, then this returns an empty
  136.        string.
  137.        @return
  138.        string for the menu item name.
  139.      */
  140.     virtual PString GetString() const;
  141.   /**@name New functions for class */
  142.    /**Get the count of the number of entries contained in this sub-menu.
  143.        @return
  144.        number of entries in sub-menu.
  145.      */
  146.     PINDEX GetSize() const;
  147.       
  148.    /**Get the menu entry at the specified position. If the #index#
  149.        parameter is beyond the number of entries in the sub-menu then this
  150.        function will assert.
  151.        @return
  152.        reference to the menu entry at the index position.
  153.      */
  154.     virtual PMenuEntry & operator[](
  155.       PINDEX index    /// Ordinal index of the menu entry in the sub-menu.
  156.     );
  157.         
  158.         
  159.   protected:
  160.     /**@name New functions for class */
  161.     /** Contructor for top level menues, Ref{PRootMenu} class. */
  162.     PSubMenu();
  163.    /**Scan through all menu items in the menu and execute their notification
  164.        function to enable or disable and check or uncheck the menu item.
  165.        For a sub-menu item this calls the UpdateMyCommandSources() function
  166.        for all its menu entries.
  167.        This function is used internally by the library. It would normally not
  168.        be called directly.
  169.      */
  170.     virtual void UpdateMyCommandSources();
  171.   /**@name Member variables */
  172.       /** Menu title. */
  173.     PString title;
  174.     PLIST(MenuEntryList, PMenuEntry);
  175.       /** List of menu items in the menu. */
  176.     MenuEntryList entries;
  177.     friend class PMenuEntry;
  178. #ifdef DOC_PLUS_PLUS
  179. };
  180. #endif
  181. // Class declaration continued in platform specific header file ///////////////