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

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * toplwnd.h
  3.  *
  4.  * Top level application window.
  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: toplwnd.h,v $
  30.  * Revision 1.25  1999/03/29 03:39:55  robertj
  31.  * Changed semantics of PTitledWindow::OnClose() function.
  32.  *
  33.  * Revision 1.24  1999/03/10 03:49:53  robertj
  34.  * More documentation adjustments.
  35.  *
  36.  * Revision 1.23  1999/03/09 08:01:50  robertj
  37.  * Changed comments for doc++ support (more to come).
  38.  *
  39.  * Revision 1.22  1999/02/16 08:08:47  robertj
  40.  * MSVC 6.0 compatibility changes.
  41.  *
  42.  * Revision 1.21  1998/09/27 00:41:21  craigs
  43.  * Added RedrawMenu function
  44.  *
  45.  * Revision 1.20  1998/09/23 06:29:28  robertj
  46.  * Added open source copyright license.
  47.  *
  48.  * Revision 1.19  1996/01/02 12:53:34  robertj
  49.  * Mac OS compatibility changes.
  50.  *
  51.  * Revision 1.18  1995/06/17 11:13:40  robertj
  52.  * Documentation update.
  53.  *
  54.  * Revision 1.17  1995/03/14 12:42:55  robertj
  55.  * Updated documentation to use HTML codes.
  56.  *
  57.  * Revision 1.16  1995/02/19  04:19:24  robertj
  58.  * Added dynamically linked command processing.
  59.  *
  60.  * Revision 1.15  1995/01/18  09:01:33  robertj
  61.  * Documentation.
  62.  *
  63.  * Revision 1.14  1994/12/21  11:54:41  robertj
  64.  * Documentation and variable normalisation.
  65.  *
  66.  * Revision 1.13  1994/10/30  11:47:27  robertj
  67.  * Changed mechanism for doing notification callback functions.
  68.  *
  69.  * Revision 1.12  1994/10/23  04:58:33  robertj
  70.  * Added function for clean close of titled windows.
  71.  *
  72.  * Revision 1.11  1994/08/23  11:32:52  robertj
  73.  * Oops
  74.  *
  75.  * Revision 1.10  1994/08/22  00:46:48  robertj
  76.  * Added pragma fro GNU C++ compiler.
  77.  *
  78.  * Revision 1.9  1994/07/17  10:46:06  robertj
  79.  * Moved help menu function from application to toplevelwindow.
  80.  *
  81.  * Revision 1.8  1994/06/25  11:55:15  robertj
  82.  * Unix version synchronisation.
  83.  *
  84.  * Revision 1.7  1994/03/07  07:38:19  robertj
  85.  * Major enhancementsacross the board.
  86.  *
  87.  * Revision 1.6  1994/01/03  04:42:23  robertj
  88.  * Mass changes to common container classes and interactors etc etc etc.
  89.  *
  90.  * Revision 1.5  1993/08/21  17:09:50  robertj
  91.  * Added function to allow setting of menus whenever it is selected.
  92.  *
  93.  * Revision 1.4  1993/08/21  01:50:33  robertj
  94.  * Made Clone() function optional, default will assert if called.
  95.  *
  96.  * Revision 1.3  1993/07/14  12:49:16  robertj
  97.  * Fixed RCS keywords.
  98.  *
  99.  */
  100. #define _PTOPLEVELWINDOW
  101. #ifdef __GNUC__
  102. #pragma interface
  103. #endif
  104. class PTopLevelWindow : public PTitledWindow
  105. {
  106.   PCLASSINFO(PTopLevelWindow, PTitledWindow)
  107. /* This class represents an applications "main" window. An application would
  108.    have at least one instance of a descendent of this class.
  109.    
  110.    Even though it is possible for there to be more than one "main" window for
  111.    an application, it is not recommended as this breaches the user interface
  112.    guidelines of most platforms. On most cases where multiple top level
  113.    windows are required, the Multiple Document Interface (MDI) system should
  114.    be used. See Ref{PMDIFrameWindow} and Ref{PMDIDocWindow} for more
  115.    information.
  116.    
  117.    The first instance of a top level window created is tied to the application
  118.    instance in that when that window is closed, the application is terminated.
  119.    The Ref{PApplication::GetWindow()} function returns this first top level
  120.    window.
  121.  */
  122.   public:
  123.    /**Create a new top level window for the current application.
  124.     
  125.        The first top level window created is remembered by the current
  126.        application and when it closes terminates the application.
  127.        
  128.        The top level window is the only interactor that does not require a
  129.        parent interactor. This will be the root of the hierarchy of
  130.        interactors in the application.
  131.      */
  132.     PTopLevelWindow(
  133.       unsigned CanDo = CanClose|CanGrow|CanIconify|CanZoom
  134.       /// Titled window capabilities for the top level window.
  135.     );
  136.    /**Destroy the top level window, if a menu has been set for the window
  137.        then it is deleted as well. If the application is not in the process of
  138.        terminating and this top level window was the first created then the
  139.        application is terminated as well.
  140.      */
  141.     virtual ~PTopLevelWindow();
  142.   /**@name Overrides from class PTitledWindow */
  143.    /**Close the top level window. This overrides the PTitledWindow version
  144.        and if is the first top level window created, terminates the
  145.        application.
  146.      */
  147.     virtual BOOL Close();
  148.   /**@name New functions for class */
  149.    /**Attach a menu to the top level window.
  150.     
  151.        If the #newMenu# parameter is NULL then no menu for the top
  152.        level window is shown.
  153.        If the #autoDelete# parameter is TRUE then the menu will be
  154.        automatically deleted when the window is destroyed or when another menu
  155.        is set using SetMenu().
  156.      */
  157.     virtual void SetMenu(
  158.       PRootMenu * newMenu,   /// New menu bar to attach to the top level window.
  159.       BOOL autoDelete = TRUE
  160.      /**Flag for making the top level window responsible for the deletion of
  161.          the menu object being attached.
  162.        */
  163.     );
  164.    /**Get the currently active menu attached to the top level window.
  165.     
  166.        @return
  167.        pointer to windows menu, or NULL if no menu is set.
  168.      */
  169.     PRootMenu * GetMenu() const;
  170.    /**Get the active menus help sub-menu. The actual placement of the help
  171.        sub-menu is platform dependent.
  172.        
  173.        The menus constructed by the user do {bf not} contain a help menu
  174.        due to the platform dependence. If the user wishes to alter the help
  175.        menu, they must use this function to get an object to manipulate. Note
  176.        that the exact contents of the menu is, again, platform dependent so
  177.        essentially the only thing that can be done is to append items to the
  178.        end of the menu.
  179.     
  180.        @return
  181.        reference to the help sub-menu.
  182.      */
  183.     PSubMenu & GetHelpMenu();
  184.    /**Whenever the menu bar is selected and the process of selecting a menu
  185.        begins, this function is called. It may be used to enable or disable
  186.        menu items before they appear.
  187.        
  188.        The default behaviour does nothing.
  189.      */
  190.     virtual void OnMenuStartSelect();
  191.    /**Every menu selection will go through this function allowing it to
  192.        intercept any or all menu selections.
  193.        
  194.        The default behaviour to call the call back function attached to the
  195.        menu item object.
  196.      */
  197.     virtual void OnMenuItemSelect(
  198.       PMenuItem & item    /// Menu item that was selected.
  199.     );
  200.    /**Can be used to redraw the menubar after it has been altered
  201.     */
  202.     void RedrawMenu();
  203.   protected:
  204.   /**@name Overrides from class PInteractor */
  205.    /**Scan through all child interactors and if they are a command source,
  206.        execute their notification function to enable or disable the item.
  207.        The behaviour here is to call Ref{PInteractor::UpdateCommandSources()}
  208.        for the menu bar and then all child interactors.
  209.        This function is used internally by the library. It would normally not
  210.        be called directly.
  211.      */
  212.     virtual void UpdateMyCommandSources();
  213.   /**@name Member variables */
  214.     /** The menu that was last set by SetMenu(). */
  215.     PRootMenu * menu;
  216.    /**An indication that the menu is to be deleted when the window is
  217.        destroyed or when a new menu is set for the window.
  218.      */
  219.     BOOL deleteMenu;
  220. #ifdef DOC_PLUS_PLUS
  221. };
  222. #endif
  223. // Class declaration continued in platform specific header file ///////////////