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

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * pbutton.h
  3.  *
  4.  * Push button control 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: pbutton.h,v $
  30.  * Revision 1.19  1999/03/10 03:49:52  robertj
  31.  * More documentation adjustments.
  32.  *
  33.  * Revision 1.18  1999/03/09 08:01:49  robertj
  34.  * Changed comments for doc++ support (more to come).
  35.  *
  36.  * Revision 1.17  1999/02/16 08:08:46  robertj
  37.  * MSVC 6.0 compatibility changes.
  38.  *
  39.  * Revision 1.16  1998/09/23 06:24:36  robertj
  40.  * Added open source copyright license.
  41.  *
  42.  * Revision 1.15  1995/06/17 11:12:50  robertj
  43.  * Documentation update.
  44.  *
  45.  * Revision 1.14  1995/03/14 12:41:58  robertj
  46.  * Updated documentation to use HTML codes.
  47.  *
  48.  * Revision 1.13  1994/12/21  11:53:19  robertj
  49.  * Documentation and variable normalisation.
  50.  *
  51.  * Revision 1.12  1994/10/30  11:46:56  robertj
  52.  * Changed mechanism for doing notification callback functions.
  53.  *
  54.  * Revision 1.11  1994/08/23  11:32:52  robertj
  55.  * Oops
  56.  *
  57.  * Revision 1.10  1994/08/22  00:46:48  robertj
  58.  * Added pragma fro GNU C++ compiler.
  59.  *
  60.  * Revision 1.9  1994/04/03  08:34:18  robertj
  61.  * Added help and focus functionality.
  62.  *
  63.  * Revision 1.8  1994/03/07  07:38:19  robertj
  64.  * Major enhancementsacross the board.
  65.  *
  66.  * Revision 1.7  1994/01/03  04:42:23  robertj
  67.  * Mass changes to common container classes and interactors etc etc etc.
  68.  *
  69.  * Revision 1.6  1993/09/27  16:35:25  robertj
  70.  * Removed special constructor for dialog resource loading.
  71.  *
  72.  * Revision 1.5  1993/08/24  00:27:59  robertj
  73.  * New push button class arrangement and callback function.
  74.  *
  75.  * Revision 1.4  1993/08/21  01:50:33  robertj
  76.  * Made Clone() function optional, default will assert if called.
  77.  *
  78.  * Revision 1.3  1993/07/14  12:49:16  robertj
  79.  * Fixed RCS keywords.
  80.  *
  81.  */
  82. #define _PPUSHBUTTON
  83. #ifdef __GNUC__
  84. #pragma interface
  85. #endif
  86. /**A simple push button control to initiate an action.
  87.    This is an abstract class for user defined types of push buttons, as well as
  88.    the standard text and image buttons. When making a customised push button
  89.    the application should not override the Ref{PInteractor::OnRedraw()}
  90.    function.
  91.    The exact appearence of a push button is defined by the descendent class.
  92.    However, they all have the same semantics of calling the notification
  93.    function when they are selected, be that via mouse click or some other
  94.    mechanism as is possible on the specific platform.
  95.  */
  96. class PPushButton : public PNamedControl
  97. {
  98.   PCLASSINFO(PPushButton, PNamedControl);
  99.   public:
  100.     /** Type of button for construction */
  101.     enum ButtonType {
  102.       /// Button appears as non-default buttons.
  103.       OrdinaryButton,   
  104.      /**Button appears as the default button, ie with some form of
  105.          highlighting to indicate this.
  106.        */
  107.       DefaultButton
  108.     };
  109.       /** Create a push button control with the specified name. */
  110.     PPushButton(
  111.       PInteractor * parent,     /// Interactor into which the control is placed.
  112.       ButtonType deflt = OrdinaryButton  /// Flag for is the default button.
  113.     );
  114.     PPushButton(
  115.       PInteractor * parent,     /// Interactor into which the control is placed.
  116.       const PString & name,     /// Name to be placed next in the button.
  117.       ButtonType deflt,         /// Flag for is the default button.
  118.       const PNotifier & notify  /// Function to call when changes state.
  119.     );
  120.    /**Create control from interactor layout with the specified control ID.
  121.        This is mainly used in support of resource based dialogs.
  122.      */
  123.     PPushButton(
  124.       PInteractorLayout * parent, /// Interactor into which the box is placed.
  125.       PRESOURCE_ID ctlID,         /// Identifier for the control in the layout.
  126.       const PNotifier & notify,   /// Function to call when changes state.
  127.       void * valuePtr             /// Variable to change to the button state.
  128.     );
  129.     /** Destroy the push button control. */
  130.     virtual ~PPushButton();
  131.   /**@name New functions for class */
  132.    /**Draw the 3D look of a pushbutton surround. The return value is passed
  133.        to Ref{OnDrawFace()} function as the bounds into which
  134.        to draw.
  135.        
  136.        The default implementation draws a "lighted" rectangle that is raised
  137.        when #isSelected# is FALSE and sunken when
  138.        #isSelected# is TRUE. It will also draw a thicker border if
  139.        the button is a default button.
  140.     
  141.        This function should be overridden when the button surround needs to be
  142.        something other than the default. Do {bf not} override the
  143.        Ref{PInteractor::OnRedraw()} function, override
  144.        Ref{DrawButtonSurround()} and/or the Ref{OnDrawFace()} functions for
  145.        drawing custom buttons. This is required by the various platforms
  146.        implementations.
  147.        @return
  148.        rectangle for the "inside" of the button.
  149.      */
  150.     virtual PRect DrawButtonSurround(
  151.       PCanvas & canvas,  /// Canvas into which to draw the button surround.
  152.       BOOL isSelected    /// Flag for whether button is currently down.
  153.     );
  154.   /**@name System callback functions. */
  155.    /**Draw the contents (face) of the push button.
  156.     
  157.        This is a pure function and must be overridden by descendent classes to
  158.        give the button its visual appearance. It is called immediately after
  159.        the Ref{DrawButtonSurround()} function whenever the button needs to
  160.        be redrawn.
  161.        
  162.        Note that due to the implementation just overriding the
  163.        Ref{PInteractor::OnRedraw()} function is insufficient to correctly
  164.        implement a new look for a button. Always override the
  165.        Ref{DrawButtonSurround()} and Ref{OnDrawFace()} functions.
  166.      */
  167.     virtual void OnDrawFace(
  168.       PCanvas & canvas,   /// Canvas into which to draw the button face.
  169.       const PRect & rect, /// Bounds in which to draw the button face.
  170.       BOOL hasFocus,      /// Flag indicating that the button has the focus.
  171.       BOOL isSelected     /// Flag indicating the button is currently down.
  172.     ) = 0;
  173.   protected:
  174.     // New functions for class
  175.     void Construct();
  176.       // Common, platform specific, construction code.
  177.     // Member variables
  178.       /** Flag for button is a default button with extra highlighting */
  179.     BOOL defaultButton;
  180. #ifdef DOC_PLUS_PLUS
  181. };
  182. #endif
  183. // Class declaration continued in platform specific header file ///////////////