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

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * titlewnd.h
  3.  *
  4.  * Titled 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: titlewnd.h,v $
  30.  * Revision 1.23  1999/03/29 03:39:55  robertj
  31.  * Changed semantics of PTitledWindow::OnClose() function.
  32.  *
  33.  * Revision 1.22  1999/03/10 03:49:53  robertj
  34.  * More documentation adjustments.
  35.  *
  36.  * Revision 1.21  1999/03/09 08:01:50  robertj
  37.  * Changed comments for doc++ support (more to come).
  38.  *
  39.  * Revision 1.20  1999/02/16 08:08:47  robertj
  40.  * MSVC 6.0 compatibility changes.
  41.  *
  42.  * Revision 1.19  1998/09/23 06:29:27  robertj
  43.  * Added open source copyright license.
  44.  *
  45.  * Revision 1.18  1996/04/30 12:34:05  robertj
  46.  * Changed "inPixels" boolean to enum for three coordinate systems.
  47.  *
  48.  * Revision 1.17  1996/01/02 12:53:16  robertj
  49.  * Moved constructor to platform dependent code.
  50.  *
  51.  * Revision 1.16  1995/12/23 03:48:12  robertj
  52.  * Moved constructor to platform dependent code.
  53.  *
  54.  * Revision 1.15  1995/08/12 22:35:08  robertj
  55.  * Fixed comment.
  56.  *
  57.  * Revision 1.14  1995/06/17 11:13:37  robertj
  58.  * Documentation update.
  59.  *
  60.  * Revision 1.13  1995/03/14 12:42:52  robertj
  61.  * Updated documentation to use HTML codes.
  62.  *
  63.  * Revision 1.12  1995/02/19  04:15:00  robertj
  64.  * Added AllowClose() function for PTitledWindow descendents.
  65.  *
  66.  * Revision 1.11  1995/01/16  13:02:24  robertj
  67.  * Documentation.
  68.  *
  69.  * Revision 1.10  1994/09/25  10:46:59  robertj
  70.  * Removed irrelevent parameter in OnActivate().
  71.  *
  72.  * Revision 1.9  1994/08/23  11:32:52  robertj
  73.  * Oops
  74.  *
  75.  * Revision 1.8  1994/08/22  00:46:48  robertj
  76.  * Added pragma fro GNU C++ compiler.
  77.  *
  78.  * Revision 1.7  1994/08/21  23:43:02  robertj
  79.  * Added delayed close of interactors to avoid the "delete this" problem.
  80.  * Added ability to get coordinates in pixels.
  81.  *
  82.  * Revision 1.6  1994/06/25  11:55:15  robertj
  83.  * Unix version synchronisation.
  84.  *
  85.  * Revision 1.5  1994/04/03  08:34:18  robertj
  86.  * Added help and focus functionality.
  87.  *
  88.  * Revision 1.4  1994/03/07  07:38:19  robertj
  89.  * Major enhancementsacross the board.
  90.  *
  91.  * Revision 1.3  1994/01/03  04:42:23  robertj
  92.  * Mass changes to common container classes and interactors etc etc etc.
  93.  *
  94.  * Revision 1.2  1993/07/14  12:49:16  robertj
  95.  * Fixed RCS keywords.
  96.  *
  97.  */
  98. #define _PTITLEDWINDOW
  99. #ifdef __GNUC__
  100. #pragma interface
  101. #endif
  102. class PTitledWindow : public PInteractor
  103. {
  104.   PCLASSINFO(PTitledWindow, PInteractor)
  105. /* This class represents the first real "Window". The user inteface element it
  106.    describes is a framed window with a title bar. This type of window may be
  107.    moved, resized and closed dynamically by the user.
  108.  */
  109.   public:
  110.     enum {
  111.       /// Window has a mechanism for begin closed by the user.
  112.       CanClose = 1,   
  113.       /// Window has a mechanism for being resized by the user.
  114.       CanGrow = 2,    
  115.      /**Window has a mechanism for being shrunk to a system standard "unused"
  116.          size by the user. For MS-Windows and X-Windows the window is
  117.          substituted by an icon. For the Macintosh only the windows title bar
  118.          is shown.
  119.        */
  120.       CanIconify = 4,
  121.      /**Window has a mechanism for being enlarged to a standard "zoomed"
  122.          size by the user.
  123.        */
  124.       CanZoom = 8
  125.     };
  126.     /** Destroy the titled window. */
  127.     virtual ~PTitledWindow();
  128.   /**@name Overrides from class PInteractor */
  129.    /**Set the child interactor that has the focus in the
  130.        Ref{PTitledWindow} or Ref{PInteractorLayout}.
  131.        The interactor set here may not actually have the focus. It is the
  132.        interactor that will be given the focus if the parent interactor,
  133.        eg a dialog, is given the focus. The dialog itself never requires the
  134.        focus directly.
  135.        The behaviour here is to save the interactor for return by the
  136.        Ref{GetFocusInteractor()} function.
  137.      */
  138.     virtual void SetFocusInteractor(
  139.       PInteractor * interactor    /// Interactor that received focus.
  140.     );
  141.    /**Get the child interactor that has the focus in the Ref{PTitledWindow}
  142.        or Ref{PInteractorLayout}.
  143.        The interactor returned here may not actually have the focus. It is
  144.        the interactor that will be given the focus if the parent interactor,
  145.        eg a dialog, is given the focus. The dialog itself never requires the
  146.        focus directly.
  147.        The default behaviour is to get the saved interactor set by the
  148.        Ref{SetFocusInteractor()} function.
  149.        @return
  150.        pointer to child or grandchild interactor that has focus.
  151.      */
  152.     virtual PInteractor * GetFocusInteractor() const;
  153.   /**@name New functions for class */
  154.    /**Set the windows title string. This will be updated on the screen
  155.        immediately (subject to OS constraints).
  156.      */
  157.     virtual void SetTitle(  
  158.       const PString & title   /// New title for window.
  159.     );
  160.    /**Get the titled windows title string.
  161.        @return
  162.        string used in title.
  163.      */
  164.     virtual PString GetTitle() const;
  165.    /**Make the window the "active" window by giving it the focus and bringing
  166.        it to the top of all the windows at the same level.
  167.      */
  168.     virtual void Activate();
  169.    /**Set and the minimum size of the client area that the window can be
  170.        grown to via user interaction.
  171.      */
  172.     void SetMinSize(
  173.       PDIMENSION width,       /// New minimum width to apply to titled window.
  174.       PDIMENSION height,      /// New minimum height to apply to titled window.
  175.       CoordinateSystem coords /// Coordinate system to use.
  176.     );
  177.     void SetMinSize(
  178.       const PDim & dim,    /// New minimum dimensions to apply to titled window.
  179.       CoordinateSystem coords   /// Coordinate system to use.
  180.     );
  181.    /**Get and the minimum size of the client area that the window can be
  182.        grown to via user interaction.
  183.        @return
  184.        minimum dimensions for titled window.
  185.      */
  186.     PDim GetMinSize(
  187.       CoordinateSystem coords   /// Coordinate system to use.
  188.     );
  189.    /**Set and the maximum size of the client area that the window can be
  190.        grown to via user interaction.
  191.      */
  192.     void SetMaxSize(
  193.       PDIMENSION width,       /// New maximum width to apply to titled window.
  194.       PDIMENSION height,      /// New maximum height to apply to titled window.
  195.       CoordinateSystem coords /// Coordinate system to use.
  196.     );
  197.     void SetMaxSize(
  198.       const PDim & dim,    /// New maximum dimensions to apply to titled window.
  199.       CoordinateSystem coords   /// Coordinate system to use.
  200.     );
  201.    /**Get and the maximum size of the client area that the window can be
  202.        grown to via user interaction.
  203.        @return
  204.        maximum dimensions for titled window.
  205.      */
  206.     PDim GetMaxSize(
  207.       CoordinateSystem coords   /// Coordinate system to use.
  208.     );
  209.    /**Set and the size of the client area when the window is set to the
  210.        "zoomed" state via user interaction.
  211.      */
  212.     void SetZoomSize(
  213.       PDIMENSION width,       /// New zoomed width to apply to titled window.
  214.       PDIMENSION height,      /// New zoomed height to apply to titled window.
  215.       CoordinateSystem coords /// Coordinate system to use.
  216.     );
  217.     void SetZoomSize(
  218.       const PDim & dim,    /// New zoomed dimensions to apply to titled window.
  219.       CoordinateSystem coords   /// Coordinate system to use.
  220.     );
  221.    /**Get and the size of the client area when the window is set to the
  222.        "zoomed" state via user interaction.
  223.        @return
  224.        zoomed dimensions for titled window.
  225.      */
  226.     PDim GetZoomSize(
  227.       CoordinateSystem coords   /// Coordinate system to use.
  228.     );
  229.    /**Set the icon that will be used when a titled window is in the "iconic"
  230.        mode. This may not be used if the platform does not use an icon for
  231.        an "iconised" window.
  232.      */
  233.     virtual void SetIcon(
  234.       const PIcon & icn   /// New icon for a window in "iconic" mode.
  235.     );
  236.    /**Get the icon that will be used when a titled window is in the "iconic"
  237.        mode. This may not be used if the platform does not use an icon for
  238.        an "iconised" window.
  239.        @return
  240.        reference to the icon instance being used by the window.
  241.      */
  242.     const PIcon & GetIcon();
  243.    /**Make the titled window "iconic". This will place the window in the
  244.        "iconic" state exactly as though the user had executed the platform
  245.        dependent mechanism, eg clicked on an icon or button.
  246.      */
  247.     virtual void MakeIconic();
  248.    /**Make the titled window the "zoomed" size. This will chaneg the size of
  249.        the window to a platform dependent "zoomed" state exactly as though the
  250.        user had executed the platform dependent mechanism, eg clicked on an
  251.        icon or button.
  252.      */
  253.     virtual void Zoom();
  254.    /**Make the titled window "normal" after being "zoomed" or "iconic". This
  255.        will place the window in the "normal" state exactly as though the user
  256.        had executed the platform dependent mechanism, eg clicked on an icon or
  257.        button.
  258.      */
  259.     virtual void Normalise();
  260.    /**Close the PTitledWindow. This will do a "safe" delete of the titled
  261.        window object, ie after all the member functions on the object have
  262.        returned and the programme is in the main message handling loop then
  263.        the delete operator is executed on the object. This will prevent
  264.        problems with the "this" pointer being invalid when a PTitledWindow is
  265.        closed via the windowing system.
  266.        The default behavour here calls the Ref{AllowClose()} function before
  267.        actually closing the window. Note, if you override this function, make
  268.        sure you always call the ancestor version.
  269.        @return
  270.        TRUE if close has been queued.
  271.      */
  272.     virtual BOOL Close();
  273.    /**See if a close of the PTitledWindow is allowed. This is called when the
  274.        Ref{Close()} function is called to verify that the window may be
  275.        closed. It is also called when the top level window is closed and all
  276.        the child titled windows, especially Ref{PMDIDocWindow} instances,
  277.        are to be closed as well.
  278.        The default behavour is to return TRUE.
  279.        @return
  280.        TRUE if close is allowed.
  281.      */
  282.     virtual BOOL AllowClose(
  283.       BOOL closingAll
  284.        /**Flag indicating all titled windows are being closed as the top level
  285.            window is being closed.
  286.          */
  287.     );
  288.   /**@name System callback functions. */
  289.    /**The system calls this whenever the window is being closed. There is no
  290.       way to prevent this action at this point. Override the Ref{Close()}
  291.       or Ref{AllowClose()} functions if you wish to control if the close
  292.       operation occurs.
  293.        The application writer may override this function to do any clean up
  294.        or state saving operations.
  295.        
  296.        The default action does nothing.
  297.      */
  298.     virtual void OnClose();
  299.    /**The system calls this when the window has just been made active or
  300.        deactive via mouse click or some other platform dependent method.
  301.      */
  302.     virtual void OnActivate(
  303.       BOOL active   /// Flag indicating the new activation state of the window.
  304.     );
  305.    /**The system calls this whenever the window has been dynamically
  306.        repositioned by the user.
  307.      */
  308.     virtual void OnReposition(
  309.       const PPoint & newPos   /// New position that window was moved to.
  310.     );
  311.    /**Window resize state chages passed to the Ref{OnResize()} function.
  312.      */
  313.     enum ResizeType {
  314.       /// The user resized the window into the "iconic" state.
  315.       Iconic,     
  316.       /// The user resized the window into the "zoomed" state.
  317.       Zoomed,     
  318.      /**The user resized the window into the "normal" state, or the window was
  319.          already in the "normal" state and the window was just dynamically
  320.          resized by the user using a platform dependent mechanism.
  321.        */
  322.       Normalised
  323.     };
  324.    /**The system calls this whenever the window has been dynamically resized
  325.        by the user or by the program. The resize may be due to the window
  326.        being made "iconic" or zoomed" as well as just having its size changed.
  327.        This function is especially usefull for resizing child interactors that
  328.        are contained within the titled window, eg tool bars, status bars etc.
  329.        
  330.        The #newSize# parameter is in pixels.
  331.      */
  332.     virtual void OnResize(
  333.       const PDim & newSize,   /// New size of the titled window.
  334.       ResizeType type         /// New state of the titled window.
  335.     );
  336.   protected:
  337.     /**@name Member variables */
  338.     /** User size adjustment minimum limits. */
  339.     PDim minSize;
  340.     /** User size adjustment maximum limits. */
  341.     PDim maxSize;
  342.     /** User size adjustment for "zoomed" windows. */
  343.     PDim zoomSize;
  344.     /** Icon to be used for window. */
  345.     PIcon icon;
  346.     /** Child interactor that gets the focus when this window gets focus. */
  347.     PInteractor * focusInteractor;
  348. #ifdef DOC_PLUS_PLUS
  349. };
  350. #endif
  351. // Class declaration continued in platform specific header file ///////////////