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

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * editbox.h
  3.  *
  4.  * Single line text edit box control.
  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: editbox.h,v $
  30.  * Revision 1.23  2000/04/13 01:37:14  robertj
  31.  * Added missing implementation of PEditBox::GetSelection() on Win32.
  32.  * Added PEditBox::ReplaceSelection() function.
  33.  *
  34.  * Revision 1.22  1999/03/10 03:49:51  robertj
  35.  * More documentation adjustments.
  36.  *
  37.  * Revision 1.21  1999/03/09 08:01:48  robertj
  38.  * Changed comments for doc++ support (more to come).
  39.  *
  40.  * Revision 1.20  1999/02/16 08:08:45  robertj
  41.  * MSVC 6.0 compatibility changes.
  42.  *
  43.  * Revision 1.19  1998/09/23 06:23:25  robertj
  44.  * Added open source copyright license.
  45.  *
  46.  * Revision 1.18  1995/06/17 11:12:32  robertj
  47.  * Documentation update.
  48.  *
  49.  * Revision 1.17  1995/06/04 08:47:27  robertj
  50.  * Added missing virtual for SetText() - Unix implementation requirement.
  51.  *
  52.  * Revision 1.16  1995/03/14 12:41:22  robertj
  53.  * Updated documentation to use HTML codes.
  54.  *
  55.  * Revision 1.15  1995/02/19  04:19:08  robertj
  56.  * Added dynamically linked command processing.
  57.  *
  58.  * Revision 1.14  1995/02/05  00:46:10  robertj
  59.  * Added notification of end input.
  60.  *
  61.  * Revision 1.13  1995/01/27  11:45:57  robertj
  62.  * documentation.
  63.  *
  64.  * Revision 1.12  1994/12/15  12:47:13  robertj
  65.  * Documentation.
  66.  *
  67.  * Revision 1.11  1994/10/30  11:46:36  robertj
  68.  * Changed mechanism for doing notification callback functions.
  69.  *
  70.  * Revision 1.10  1994/08/23  11:32:52  robertj
  71.  * Oops
  72.  *
  73.  * Revision 1.9  1994/08/22  00:46:48  robertj
  74.  * Added pragma fro GNU C++ compiler.
  75.  *
  76.  * Revision 1.8  1994/06/25  11:55:15  robertj
  77.  * Unix version synchronisation.
  78.  *
  79.  * Revision 1.7  1994/04/11  14:14:01  robertj
  80.  * Added consts.
  81.  *
  82.  * Revision 1.6  1994/03/07  07:38:19  robertj
  83.  * Major enhancementsacross the board.
  84.  *
  85.  * Revision 1.5  1994/01/03  04:42:23  robertj
  86.  * Mass changes to common container classes and interactors etc etc etc.
  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/08/21  01:50:33  robertj
  92.  * Made Clone() function optional, default will assert if called.
  93.  *
  94.  * Revision 1.2  1993/07/14  12:49:16  robertj
  95.  * Fixed RCS keywords.
  96.  *
  97.  */
  98. #define _PEDITBOX
  99. #ifdef __GNUC__
  100. #pragma interface
  101. #endif
  102. /**This class defines a text edit box control. This control is for a single
  103.    line of text. The usual capabilities for editing text are available,
  104.    though the exact features are platform dependent.
  105.  */
  106. class PEditBox : public PControl
  107. {
  108.   PCLASSINFO(PEditBox, PControl);
  109.   public:
  110.    /**Create a new single line edit box control.
  111.      */
  112.     PEditBox(
  113.       PInteractor * parent  /// Interactor into which the control is placed.
  114.     );
  115.     /** Create control from interactor layout with the specified control ID. */
  116.     PEditBox(
  117.       PInteractorLayout * parent, /// Interactor into which the box is placed.
  118.       PRESOURCE_ID ctlID,         /// Identifier for the control in the layout.
  119.       const PNotifier & notify,   /// Function to call when changes state.
  120.       PString * valuePtr          /// Variable to change to the editor value.
  121.     );
  122.     /** Destroy the edit box control. */
  123.     virtual ~PEditBox();
  124.   /**@name PNotifier codes */
  125.     /** Notification codes sent to the callback function. */
  126.     enum {
  127.      /**Notification code for each change of the edit text box string. This
  128.          would notify the user on every key entered and may be used to take
  129.          action on the particular value of the control.
  130.        */
  131.       EditChange = NotifyChange,
  132.      /**Notification code for when the user exits the edit box. This occurs
  133.          when the control loses the keyboard focus and the Ref{OnEndInput()}
  134.          function has returned TRUE.
  135.        */
  136.       EndEdit
  137.     };
  138.   /**@name Overrides from class PInteractor */
  139.    /**The system calls this whenever the system wishes to change focus to
  140.        another interactor in a given Ref{PTitledWindow} or
  141.        Ref{PInteractorLayout}.
  142.        This function in conjunction with the keyboard focus changing and the
  143.        Ref{PInteractor::SetFocusInteractor()} function controls the transfer
  144.        of focus from one interactor in a logical group (eg dialog) to another.
  145.        It is primarily used for field level validation. For example the
  146.        Ref{PIntegerEditBox} control uses this to prevent the user from
  147.        exiting the control until a valid entry hash been made.
  148.        Note that the focus {bf does} actually change with appropriate
  149.        calls to the Ref{PInteractor::OnGainFocus()} and
  150.        Ref{PInteractor::OnLostFocus()} functions. The focus gets set back to
  151.        the original interactor when this function disallows the focus change.
  152.        For edit boxes this will execute the notification function before
  153.        returning TRUE.
  154.        @return
  155.        FALSE will prevent the focus change from occurring and TRUE allows the
  156.        change.
  157.      */
  158.     virtual BOOL OnEndInput();
  159.   /**@name Overrides from class PControl */
  160.    /**This function transfers the value of the control to or from the variable
  161.        pointed to by the value pointer member variable.
  162.      */
  163.     virtual void TransferValue(
  164.       int option 
  165.      /**Transfer value option. When this is -1 when the function transfers
  166.          the value from the value pointer into the control. This is called in
  167.          Ref{PDialog::OnInit()} function. When option is zero then the
  168.          function transfers the value from the control to the value pointer
  169.          variable. This is called just before the callback function every time
  170.          the edit box value changes.
  171.        */
  172.     );
  173.     /**@name New functions for class */
  174.    /**Set the text contents of the edit box control. This will be updated on
  175.        the screen immediately (within OS constraints).
  176.        A call to this function will cause the notification function to be
  177.        called with a code of #EditChange#.
  178.      */
  179.     virtual void SetText(
  180.       const PString & str  /// New value string for the edit text box.
  181.     );
  182.    /**Get the current text contents of the edit box control as entered by the
  183.        user, or set via the Ref{SetText()} function.
  184.        @return
  185.        string for the current contents of the edit box.
  186.      */
  187.     PString GetText() const;
  188.    /**Get the current value pointer associated with the control. The variable
  189.        pointed to by this is autamatically updated with the current value of
  190.        the edit box.
  191.        @return
  192.        value pointer associated with the control.
  193.      */
  194.     PString * GetValuePointer() const;
  195.    /**Set the current value pointer associated with the control. The variable
  196.        pointed to by this is autamatically updated with the current value of
  197.        the edit box.
  198.      */
  199.     void SetValuePointer(
  200.       PString * ptr  /// New value pointer to associate with the control.
  201.     );
  202.    /**Set the maximum amount of text that the user may enter in the combo-box
  203.        edit text part. Extra characters entered when it is full are ignored.
  204.      */
  205.     void SetMaxText(
  206.       PINDEX max  /// New maximum character entry limit.
  207.     );
  208.    /**Get the current length of the text entered into the edit box. This is
  209.        equivalent to #GetText().GetLength()#.
  210.        @return
  211.        number of characters in edit box.
  212.      */
  213.     PINDEX GetLength() const;
  214.    /**Determine if the edit control has been modified by the user since the
  215.        last call to Ref{SetText()} or Ref{GetText()}.
  216.        @return
  217.        TRUE if the user has changed the text in the edit box.
  218.      */
  219.     BOOL IsModified() const;
  220.    /**Set the selected region in the text within the edit box. The selected
  221.        region includes the character at the #start# position but
  222.        does not include the character at the #finish# position.
  223.        
  224.        If #start# and #finish# are equal then there is
  225.        no selected region. However, the caret is placed immediately before
  226.        that position, ie so that the next character entered will be at
  227.        #start# offset into the resultant string.
  228.        If #finish# is less than #start# it is set to the
  229.        same value as #start#. If either value is greater than the
  230.        current length of the edit box, then they are set to the position of
  231.        the end of the string.
  232.      */
  233.     void SetSelection(
  234.       PINDEX start = 0,           /// Start index position of selected text.
  235.       PINDEX finish = P_MAX_INDEX /// Finish index position of selected text.
  236.     );
  237.    /**Get the selected region in the text in the edit box. If there is no
  238.        selection active, the #start# and #finish#
  239.        variables are both set to the caret position in the string.
  240.        @return
  241.        TRUE if has selection, FALSE if there is nothing selected.
  242.      */
  243.     BOOL GetSelection(
  244.       PINDEX * start = NULL,
  245.         /// Pointer to receive starting position of selected text.
  246.       PINDEX * finish = NULL
  247.         /// Pointer to receive finishing position of selected text.
  248.     ) const;
  249.     /**Replace the selection with the string.
  250.        If there is no selection then the string is inserted into the edit box
  251.        at the curent cursor location.
  252.       */
  253.     void ReplaceSelection(
  254.       const PString & text,   /// Text to replace selection with
  255.       BOOL canUndo = TRUE     /// Flag to indicate replacement can be undone.
  256.     );
  257.    /**Determine if the edit control can undo the last edit operation performed
  258.        by the user.
  259.        @return
  260.        TRUE if undo will succeed.
  261.      */
  262.     BOOL CanUndo() const;
  263.     /** Undo the last edit operation performed by the user. */
  264.     void Undo();
  265.    /**Cut the selected text to the clipboard. This copies the data and then
  266.        deletes the current selection.
  267.        
  268.        If there is no current selection then this function does nothing.
  269.        A call to this function will cause the notification functionto be
  270.        called with a code of #EditChange#.
  271.      */
  272.     void Cut();
  273.    /**Copy the selected text to the clipboard.
  274.        If there is no current selection then this function does nothing.
  275.      */
  276.     void Copy() const;
  277.    /**Paste into the edit control from the clipboard into the edit box at the
  278.        current caret position.
  279.        
  280.        If the paste would add so many characters that the limit set with
  281.        Ref{SetMaxText()} would be exceeded then the paste does not take
  282.        place.
  283.        
  284.        Also, if there is no text in the clipboard then this function does
  285.        nothing.
  286.        A call to this function will cause the notification functionto be
  287.        called with a code of #EditChange#.
  288.      */
  289.     void Paste();
  290.    /**Delete the selected text. This does not copy the information to the
  291.        clipboard and the selected text is lost.
  292.        
  293.        If there is no current selection then this function does nothing.
  294.        A call to this function will cause the notification functionto be
  295.        called with a code of #EditChange#.
  296.      */
  297.     void Clear();
  298.   private:
  299.     void Construct();
  300.       // Common contructor code.
  301. #ifdef DOC_PLUS_PLUS
  302. };
  303. #endif
  304. // Class declaration continued in platform specific header file ///////////////