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

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * splitter.h
  3.  *
  4.  * Splitter Interactor GUI 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: splitter.h,v $
  30.  * Revision 1.10  1999/03/09 08:01:47  robertj
  31.  * Changed comments for doc++ support (more to come).
  32.  *
  33.  * Revision 1.9  1999/02/16 08:08:28  robertj
  34.  * MSVC 6.0 compatibility changes.
  35.  *
  36.  * Revision 1.8  1998/09/23 06:19:59  robertj
  37.  * Added open source copyright license.
  38.  *
  39.  * Revision 1.7  1996/04/30 12:33:43  robertj
  40.  * Changed "inPixels" boolean to enum for three coordinate systems.
  41.  *
  42.  * Revision 1.6  1995/07/02 01:20:57  robertj
  43.  * Removed OnDoubleClick() and added BOOL to OnMouseDown() for double click.
  44.  *
  45.  * Revision 1.5  1995/06/17 11:13:27  robertj
  46.  * Documentation update.
  47.  *
  48.  * Revision 1.4  1995/06/04 12:37:17  robertj
  49.  * Added function to set splitter split by percentage.
  50.  *
  51.  * Revision 1.3  1995/03/14 12:42:41  robertj
  52.  * Updated documentation to use HTML codes.
  53.  *
  54.  * Revision 1.2  1995/01/16  09:42:06  robertj
  55.  * Documentation.
  56.  *
  57.  * Revision 1.1  1994/10/23  04:58:43  robertj
  58.  * Initial revision
  59.  *
  60.  */
  61. #ifndef _SPLITTER_H
  62. #define _SPLITTER_H
  63. #ifdef __GNUC__
  64. #pragma interface
  65. #endif
  66. /**An interactor that allow the placement of two other interactors next to
  67.    each other with a bar between them that allows the adjustment of the
  68.    proportions that the two interactors take up.
  69.    
  70.    The last two child interactors of the splitter are used as the two
  71.    interactors to "split".
  72.    This is an abstract class for horizontal and vertical versions.
  73.  */
  74. class PSplitter : public PInteractor
  75. {
  76.   PCLASSINFO(PSplitter, PInteractor);
  77.   public:
  78.   /**@name Construction */
  79.   //@{
  80.     /** Create a splitter interactor. */
  81.     PSplitter(
  82.       PInteractor * parent    /// Parent interactor for splitter.
  83.     );
  84.   //@}
  85.   /**@name New functions for class */
  86.   //@{
  87.     /**This function sets the split to the specified percentage, adjusting the
  88.        child windows accordingly.
  89.      */
  90.     virtual void SetPercent(
  91.       PDIMENSION percent    /// Percentage split.
  92.     ) = 0;
  93.   //@}
  94.   protected:
  95.   /**@name Overrides from class PInteractor */
  96.   //@{
  97.     /**The system calls this whenever the mouse moves over the interactors
  98.        usable area.
  99.        
  100.        This behaviour in a splitter is to track the movement of the "bar"
  101.        between the two interactors.
  102.      */
  103.     virtual void OnMouseMove(
  104.       PKeyCode button,
  105.       /**This key code is used to determine the modifiers (eg shift, control
  106.          etc) that were active while the mouse was moved over the interactor.
  107.          The value part of the key code is irrelevent.
  108.        */
  109.       const PPoint & where
  110.       /**The position of the mouse pointer provided in pixels with its origin
  111.          at the top left of the interactor.
  112.        */
  113.     );
  114.     /**The system calls this whenever a mouse button is pressed in the
  115.        interactors usable area.
  116.        
  117.        This behaviour in a splitter is to begin tracking the movement of the
  118.        "bar" between the two interactors.
  119.      */
  120.     virtual void OnMouseDown(
  121.       PKeyCode button,
  122.       /**This key code is used to determine which mouse button was pressed and
  123.          what modifiers that were active at that time. The mouse button that
  124.          caused this call back is in the value part of the key code. The
  125.          modifiers may indicate other mouse buttons being down at the same
  126.          time.
  127.        */
  128.       const PPoint & where,
  129.       /**The position of the mouse pointer provided in pixels with its origin
  130.          at the top left of the interactor.
  131.        */
  132.       BOOL doubleClick
  133.       /// Is TRUE if the mouse down is the second click of a double click.
  134.     );
  135.     /**The system calls this whenever a mouse button is released in the
  136.        interactors usable area.
  137.        
  138.        This behaviour in a splitter is to finish tracking the movement of the
  139.        "bar" between the two interactors. The two child interactors are then
  140.        resized at this point via a call to the splitter
  141.        ref{PInteractor::SetDimensions()} function.
  142.      */
  143.     virtual void OnMouseUp(
  144.       PKeyCode button,
  145.       /**This key code is used to determine which mouse button was pressed and
  146.          what modifiers that were active at that time. The mouse button that
  147.          caused this call back is in the value part of the key code. The
  148.          modifiers may indicate other mouse buttons being down at the same
  149.          time.
  150.        */
  151.       const PPoint & where
  152.       /**The position of the mouse pointer provided in pixels with its origin
  153.          at the top left of the interactor.
  154.        */
  155.     );
  156.     /**The system calls this whenever it requires that the interactors usable
  157.        area needs to be updated and redrawn.
  158.        This behaviour in a splitter is to draw the "bar" between the two
  159.        interactors.
  160.      */
  161.     virtual void OnRedraw(
  162.       PCanvas & canvas   /// Canvas to use when drawing the interactor contents.
  163.     );
  164.   //@}
  165.   /**@name New functions for class */
  166.   //@{
  167.     /**Track the adjustment of the splitter divider. This is called from the
  168.        ancestor class during the mouse tracking operation. It determines
  169.        whether the bar moves vertically or horzontally.
  170.      */
  171.     virtual void TrackSplitter(
  172.       const PPoint & where    /// Mouse location during the track.
  173.     ) = 0;
  174.     /**Adjust the child interactors according to the split.
  175.      */
  176.     void AdjustChildInteractors(
  177.       PDIMENSION width1,  /// Width of first child interactor.
  178.       PDIMENSION height1, /// Height of first child interactor.
  179.       PORDINATE  x2,      /// X position of second child interactor.
  180.       PORDINATE  y2,      /// Y position of second child interactor.
  181.       PDIMENSION width2,  /// Width of second child interactor.
  182.       PDIMENSION height2  /// Height of second child interactor.
  183.     );
  184.   //@}
  185.   // Member variables
  186.     /// Rectangle for the position of the bar between the interactors.
  187.     PRect splitBar;
  188.     /**Canvas used to draw the tracking of the movement of the bar between
  189.        the interactors. This is only non-null when the mouse was clicked in
  190.        the interactor, ie via ref{OnMouseDown()}.
  191.      */
  192.     PDrawCanvas * trackCanvas;
  193. };
  194. /**An interactor that allow the placement of two other interactors next to
  195.    each other with a bar between them that allows the adjustment of the
  196.    proportions that the two interactors take up.
  197.    
  198.    The last two child interactors of the splitter are used as the two
  199.    interactors to "split".
  200.    This places the two interactors to the left and right with a vertical "bar"
  201.    between them.
  202.  */
  203. class PVerticalSplitter : public PSplitter
  204. {
  205.   PCLASSINFO(PVerticalSplitter, PSplitter);
  206.   public:
  207.   /**@name Construction */
  208.   //@{
  209.     /** Create a verical splitter interactor. */
  210.     PVerticalSplitter(
  211.       PInteractor * parent    /// Parent interactor for splitter.
  212.     );
  213.   //@}
  214.   /**@name Overrides from class PSplitter */
  215.   //@{
  216.     /**This function sets the split to the specified percentage, adjusting the
  217.        child windows accordingly.
  218.      */
  219.     void SetPercent(
  220.       PDIMENSION percent    /// Percentage split.
  221.     );
  222.   //@}
  223.   protected:
  224.   /**@name Overrides from class PInteractor */
  225.   //@{
  226.     /**Set the dimensions of the interactor, and then resize the two child
  227.        interactors being split. The original proportions given to the child
  228.        interactors is maintained.
  229.      */
  230.     virtual void _SetDimensions(
  231.       PDIMENSION width,         /// New width to apply to interactor.
  232.       PDIMENSION height,        /// New height to apply to interactor.
  233.       CoordinateSystem coords   /// Coordinate system to use.
  234.     );
  235.   //@}
  236.   /**@name Overrides from class PSplitter */
  237.   //@{
  238.     /**Track the adjustment of the splitter divider. This is called from the
  239.        ancestor class during the mouse tracking operation. It determines
  240.        whether the bar moves vertically or horzontally. In this case
  241.        horizontally.
  242.      */
  243.     virtual void TrackSplitter(
  244.       const PPoint & where    // Mouse location during the track.
  245.     );
  246.   //@}
  247. };
  248. /**An interactor that allow the placement of two other interactors next to
  249.    each other with a bar between them that allows the adjustment of the
  250.    proportions that the two interactors take up.
  251.    
  252.    The last two child interactors of the splitter are used as the two
  253.    interactors to "split".
  254.    This places the two interactors to the top and bottom with a horizontal
  255.    "bar" between them.
  256.  */
  257. class PHorizontalSplitter : public PSplitter
  258. {
  259.   PCLASSINFO(PHorizontalSplitter, PSplitter);
  260.   public:
  261.   /**@name Construction */
  262.   //@{
  263.     PHorizontalSplitter(
  264.       PInteractor * parent    // Parent interactor for splitter.
  265.     );
  266.     // Create a horizontal splitter interactor.
  267.   //@}
  268.   /**@name Overrides from class PSplitter */
  269.   //@{
  270.     /**This function sets the split to the specified percentage, adjusting the
  271.        child windows accordingly.
  272.      */
  273.     void SetPercent(
  274.       PDIMENSION percent    /// Percentage split.
  275.     );
  276.   //@}
  277.   protected:
  278.   /**@name Overrides from class PInteractor */
  279.   //@{
  280.     /**Set the dimensions of the interactor, and then resize the two child
  281.        interactors being split. The original proportions given to the child
  282.        interactors is maintained.
  283.      */
  284.     virtual void _SetDimensions(
  285.       PDIMENSION width,         /// New width to apply to interactor.
  286.       PDIMENSION height,        /// New height to apply to interactor.
  287.       CoordinateSystem coords   /// Coordinate system to use.
  288.     );
  289.   //@}
  290.   /**@name Overrides from class PSplitter */
  291.   //@{
  292.     /**Track the adjustment of the splitter divider. This is called from the
  293.        ancestor class during the mouse tracking operation. It determines
  294.        whether the bar moves vertically or horzontally. In this case
  295.        vertically.
  296.      */
  297.     virtual void TrackSplitter(
  298.       const PPoint & where    /// Mouse location during the track.
  299.     );
  300.   //@}
  301. };
  302. #endif
  303. // End Of File ///////////////////////////////////////////////////////////////