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

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * control.h
  3.  *
  4.  * Control interactor 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: control.h,v $
  30.  * Revision 1.23  1999/03/10 03:49:51  robertj
  31.  * More documentation adjustments.
  32.  *
  33.  * Revision 1.22  1999/03/09 08:01:48  robertj
  34.  * Changed comments for doc++ support (more to come).
  35.  *
  36.  * Revision 1.21  1999/02/16 08:08:45  robertj
  37.  * MSVC 6.0 compatibility changes.
  38.  *
  39.  * Revision 1.20  1998/09/23 06:23:13  robertj
  40.  * Added open source copyright license.
  41.  *
  42.  * Revision 1.19  1995/06/17 11:10:18  robertj
  43.  * Added function to determine if control is a tab stop.
  44.  * Documentation update.
  45.  *
  46.  * Revision 1.18  1995/04/02 09:27:19  robertj
  47.  * Added "balloon" help.
  48.  *
  49.  * Revision 1.17  1995/03/14 12:41:15  robertj
  50.  * Updated documentation to use HTML codes.
  51.  *
  52.  * Revision 1.16  1995/02/19  04:19:07  robertj
  53.  * Added dynamically linked command processing.
  54.  *
  55.  * Revision 1.15  1994/12/12  10:12:00  robertj
  56.  * Documentation.
  57.  *
  58.  * Revision 1.14  1994/11/18  23:59:30  robertj
  59.  * Added notifier & value to main PControl constructor
  60.  *
  61.  * Revision 1.13  1994/10/30  11:46:35  robertj
  62.  * Changed mechanism for doing notification callback functions.
  63.  *
  64.  * Revision 1.12  1994/08/23  11:32:52  robertj
  65.  * Oops
  66.  *
  67.  * Revision 1.11  1994/08/22  00:46:48  robertj
  68.  * Added pragma fro GNU C++ compiler.
  69.  *
  70.  * Revision 1.10  1994/06/25  11:55:15  robertj
  71.  * Unix version synchronisation.
  72.  *
  73.  * Revision 1.9  1994/04/01  14:10:29  robertj
  74.  * Added DefaultDimensions function.
  75.  *
  76.  * Revision 1.8  1994/03/07  07:38:19  robertj
  77.  * Major enhancementsacross the board.
  78.  *
  79.  * Revision 1.7  1994/01/03  04:42:23  robertj
  80.  * Mass changes to common container classes and interactors etc etc etc.
  81.  *
  82.  * Revision 1.6  1993/12/16  06:20:57  robertj
  83.  * Changes to callback function definition due to GCC.
  84.  *
  85.  * Revision 1.5  1993/12/01  16:09:05  robertj
  86.  * Windows NT port.
  87.  *
  88.  * Revision 1.4  1993/09/27  16:35:25  robertj
  89.  * Removed special constructor for dialog resource loading.
  90.  *
  91.  * Revision 1.3  1993/07/14  12:49:16  robertj
  92.  * Fixed RCS keywords.
  93.  *
  94.  */
  95. #define _PCONTROL
  96. #ifdef __GNUC__
  97. #pragma interface
  98. #endif
  99. class PInteractorLayout;
  100. /**This class defines a user inteface entity that allows the user to control
  101.    some attribute or data within the system. A control is most commonly placed
  102.    on a Ref{PDialog} or Ref{PInteractorLayout} class of interactor.
  103.    The PControl class is an abstract class. No instances of PControl should
  104.    ever be created. Descendents of PControl will implement some particular
  105.    user interface element, eg edit text, list box, radio button etc
  106.  */
  107. class PControl : public PInteractor
  108. {
  109.   PCLASSINFO(PControl, PInteractor);
  110.   protected:
  111.     /** Create a new control, storing all the information provided. */
  112.     PControl(
  113.       PInteractor * parent,   /// Interactor into which the control is placed.
  114.       const PNotifier & func, /// Function to call when control changes state.
  115.       void * valuePtr         /// Variable to change to the controls state.
  116.     );
  117.    /**Create control from interactor layout with the specified control ID.
  118.        This is mainly used in support of resource based dialogs.
  119.      */
  120.     PControl(
  121.       PInteractorLayout * parent, /// Interactor on which the control is placed.
  122.       PRESOURCE_ID ctlID,       /// Identifier for the control in the layout.
  123.       const PNotifier & func,   /// Function to call when control changes state.
  124.       void * valuePtr           /// Variable to change to the controls state.
  125.     );
  126.   public:
  127.     /** Destroy a control. */
  128.     virtual ~PControl();
  129.   /**@name PNotifier codes */
  130.    /**Codes passed to the notification function on changes of state.
  131.        A change to a scroll bar may proceed for some time, for example if the
  132.        mouse button is pressed in the down arrow and held down. An auto-repeat
  133.        would occur to continually change the scroll bar value until it is
  134.        released.
  135.      */
  136.     enum {
  137.        /**This code is passed to the notification function when the system
  138.            wishes the control to be enabled or disabled.
  139.          */
  140.       NotifyEnable,
  141.        /**This code is passed to the notification function when the system
  142.            wishes the control to have its state updated.
  143.          */
  144.       NotifyUpdate,
  145.        /**This code is passed to the notification function when the user has
  146.            changed the state of the control.
  147.          */
  148.       NotifyChange
  149.     };
  150.   /**@name Overrides from class PInteractor */
  151.    /**This function is called whenever a balloon help function for the
  152.        interactor is required.
  153.      */
  154.     virtual PBalloon * OnBalloonHelp();
  155.   /**@name New functions for class */
  156.    /**Determine if the dialog tabbing will stop at this control.
  157.        @return
  158.        TRUE if the system will stop at this control when the tab key is
  159.        pressed, FALSE if the system skips over it.
  160.      */
  161.     virtual BOOL IsTabStop() const;
  162.    /**Get the resource identifier of the control when it was loaded from a
  163.        resource in a dialog.
  164.        @return
  165.        resource identifier for control.
  166.      */
  167.     PRESOURCE_ID GetControlID() const;
  168.    /**Set the resource identifier of the control. This would be used rarely
  169.        as the ID is usually only used to link a resource to its C++ object
  170.        instance.
  171.      */
  172.     void SetControlID(
  173.       PRESOURCE_ID theID    /// New ID for the control.
  174.     );
  175.    /**Get the current call back function that is called whenever the control
  176.        needs to notify the application of some change, e.g. when a pushbutton
  177.        is pressed.
  178.        @return
  179.        current notifier for the control.
  180.      */
  181.     const PNotifier & GetNotifier() const;
  182.    /**Get the flag for notification function called when a control requires
  183.        its enable or value state updated.
  184.     
  185.        @return
  186.        current update flag for menu item.
  187.      */
  188.     BOOL WillNotifyOnStateUpdate() const;
  189.    /**Set the call back function that is called whenever the control needs to
  190.        notify the application of some change, eg when a pushbutton is pressed,
  191.        or when the control needs to be updated by the application, eg when
  192.        enable states are changed and the
  193.        Ref{PInteractor::UpdateCommandSources()} function is called.
  194.      */
  195.     void SetNotifier(
  196.       const PNotifier & func,  /// New notifier function for the control.
  197.       BOOL notifyForStateUpdate = FALSE
  198.      /**Notification function is to be called when a control requires its
  199.          enable or value state updated. If FALSE the notification function is
  200.          only called when the item is selected.
  201.        */
  202.     );
  203.    /**Get the current value pointer associated with the control. This is a
  204.        pointer to data that is updated whenever the state of the control
  205.        changes. The type of this data and the exact semantics of the updating
  206.        is dependent on the descendent class.
  207.        @return
  208.        current value pointer.
  209.      */
  210.     void * GetValuePointer() const;
  211.    /**Set the current value pointer associated with the control. This is a
  212.        pointer to data that is updated whenever the state of the control
  213.        changes. The type of this data and the exact semantics of the updating
  214.        is dependent on the descendent class.
  215.      */
  216.     void SetValuePointer(
  217.       void * ptr    /// New value pointer for the control.
  218.     );
  219.    /**This function transfers the value of the control to or from the variable
  220.        pointed to by the value pointer member variable.
  221.        The default action is to do nothing.
  222.      */
  223.     virtual void TransferValue(
  224.       int option 
  225.      /**Transfer value option. When this is -1 when the function transfers
  226.          the value from the value pointer into the control. This is called in
  227.          Ref{PDialog::OnInit()} function. When option is zero then the
  228.          function transfers the value from the control to the value pointer
  229.          variable. This is called just before the callback function every time
  230.          the controls state changes.
  231.        */
  232.     );
  233.    /**Get the balloon help text.
  234.        @return
  235.        balloon help text string for control.
  236.      */
  237.     const PString & GetBalloonHelp() const;
  238.    /**Set the balloon help text.
  239.      */
  240.     void SetBalloonHelp(
  241.       const PString & text    /// New the balloon help text.
  242.     );
  243.    /**Set the default (minimum) dimensions for the control. The actual
  244.        dimensions is dependent of the type of the descendent class.
  245.        The default action is to do nothing.
  246.      */
  247.     virtual void DefaultDimensions();
  248.   protected:
  249.   /**@name Overrides from class PInteractor */
  250.    /**Scan through all child interactors and if they are a command source,
  251.        execute their notification function to enable or disable the item.
  252.        The behaviour here is to call the notification function with the code
  253.        #NotifyEnable#.
  254.        This function is used internally by the library. It would normally not
  255.        be called directly.
  256.      */
  257.     virtual void UpdateMyCommandSources();
  258.   /**@name Member variables */
  259.       /** Unique menu ID for resource binding */
  260.     PRESOURCE_ID controlID;
  261.  
  262.       /** Notification function to call on menu selection. */
  263.     PNotifier callback;
  264.  
  265.       /** Pointer to the value that is attached to the control. */
  266.     void * valuePointer;
  267.      /**Flag for notification function called when a control requires its
  268.          enable or value state updated.
  269.        */
  270.     BOOL notifyForStateUpdate;
  271.       /** Help text for balloon help. */
  272.     PString balloonHelpText;
  273. #ifdef DOC_PLUS_PLUS
  274. };
  275. #endif
  276. // Class declaration continued in platform specific header file ///////////////