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

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * combobox.h
  3.  *
  4.  * Combo 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: combobox.h,v $
  30.  * Revision 1.24  1999/03/10 03:49:51  robertj
  31.  * More documentation adjustments.
  32.  *
  33.  * Revision 1.23  1999/03/09 08:01:48  robertj
  34.  * Changed comments for doc++ support (more to come).
  35.  *
  36.  * Revision 1.22  1999/02/16 08:08:45  robertj
  37.  * MSVC 6.0 compatibility changes.
  38.  *
  39.  * Revision 1.21  1998/09/23 06:23:09  robertj
  40.  * Added open source copyright license.
  41.  *
  42.  * Revision 1.20  1995/10/14 14:54:09  robertj
  43.  * Added addition of colection as strings to box.
  44.  *
  45.  * Revision 1.19  1995/06/17 11:12:23  robertj
  46.  * Documentation update.
  47.  *
  48.  * Revision 1.18  1995/03/14 12:41:10  robertj
  49.  * Updated documentation to use HTML codes.
  50.  *
  51.  * Revision 1.17  1995/02/19  04:19:06  robertj
  52.  * Added dynamically linked command processing.
  53.  *
  54.  * Revision 1.16  1995/02/05  00:46:08  robertj
  55.  * Added notification of end input.
  56.  *
  57.  * Revision 1.15  1994/12/15  12:47:10  robertj
  58.  * Documentation.
  59.  *
  60.  * Revision 1.14  1994/12/05  11:13:56  robertj
  61.  * Documentation.
  62.  *
  63.  * Revision 1.13  1994/10/30  11:46:33  robertj
  64.  * Changed mechanism for doing notification callback functions.
  65.  *
  66.  * Revision 1.12  1994/08/23  11:32:52  robertj
  67.  * Oops
  68.  *
  69.  * Revision 1.11  1994/08/22  00:46:48  robertj
  70.  * Added pragma fro GNU C++ compiler.
  71.  *
  72.  * Revision 1.10  1994/06/25  11:55:15  robertj
  73.  * Unix version synchronisation.
  74.  *
  75.  * Revision 1.9  1994/04/11  14:11:44  robertj
  76.  * Added consts.
  77.  *
  78.  * Revision 1.8  1994/04/03  08:34:18  robertj
  79.  * Added help and focus functionality.
  80.  *
  81.  * Revision 1.7  1994/03/07  07:38:19  robertj
  82.  * Major enhancementsacross the board.
  83.  *
  84.  * Revision 1.6  1994/01/15  02:50:29  robertj
  85.  * Moved control contructors to common and added a platform dependent Construct() function.
  86.  *
  87.  * Revision 1.5  1994/01/03  04:42:23  robertj
  88.  * Mass changes to common container classes and interactors etc etc etc.
  89.  *
  90.  * Revision 1.4  1993/09/27  16:35:25  robertj
  91.  * Removed special constructor for dialog resource loading.
  92.  *
  93.  * Revision 1.3  1993/08/21  01:50:33  robertj
  94.  * Made Clone() function optional, default will assert if called.
  95.  *
  96.  * Revision 1.2  1993/07/14  12:49:16  robertj
  97.  * Fixed RCS keywords.
  98.  *
  99.  */
  100. #define _PCOMBOBOX
  101. #ifdef __GNUC__
  102. #pragma interface
  103. #endif
  104. /**A combination of an edit text box and a drop down list box. This is
  105.    typically used for arbitrary text entry with the ability to select from a
  106.    set of pre-defined strings.
  107.    The exact appearence of a check box is platform dependent, however, they
  108.    all have a section for entring the editable text and some mechanism for
  109.    displaying the list of strings.
  110.  */
  111. class PComboBox : public PControl
  112. {
  113.   PCLASSINFO(PComboBox, PControl);
  114.   public:
  115.     /** Option for the strings in the choice box. */
  116.     enum StringSorting {
  117.       /// Strings are in the order they are added.
  118.       NotSorted,  
  119.       /// Strings are in alphabetic order.
  120.       Sorted      
  121.     };
  122.     /** Create a combo-box with optional sorting of the list box items. */
  123.     PComboBox(
  124.       PInteractor * parent,    /// Interactor into which the control is placed.
  125.       StringSorting sorted = NotSorted  /// Sorting option for strings in box.
  126.     );
  127.     PComboBox(
  128.       PInteractor * parent,    /// Interactor into which the control is placed.
  129.       const PNotifier & notify,  /// Function to call when changes state.
  130.       StringSorting sorted = NotSorted  /// Sorting option for strings in box.
  131.     );
  132.     /** Create control from interactor layout with the specified control ID. */
  133.     PComboBox(
  134.       PInteractorLayout * parent, /// Interactor into which the box is placed.
  135.       PRESOURCE_ID ctlID,         /// Identifier for the control in the layout.
  136.       const PNotifier & notify,   /// Function to call when changes state.
  137.       PString * valuePtr          /// Variable to change to the check box state.
  138.     );
  139.     /** Destroy the combo-box and its contents. */
  140.     ~PComboBox();
  141.    /**Codes passed to the PNotifier function when the specified notification
  142.        events occur.
  143.      */
  144.     enum {
  145.       /// The text in the combo-box was changed.
  146.       EditChange = NotifyChange,  
  147.       /// The edit box was tabbed out of so its value is final.
  148.       EndEdit,       
  149.       /// A new choice was made from this list
  150.       NewSelection,  
  151.       /// The list of selections has been presented.
  152.       ListDropped,   
  153.       /// The list of selections has been hidden.
  154.       ListClosed     
  155.     };
  156.   /**@name Overrides from class PInteractor */
  157.    /**The system calls this whenever the system wishes to change focus to
  158.        another interactor in a given Ref{PTitledWindow} or
  159.        Ref{PInteractorLayout}.
  160.        This function in conjunction with the keyboard focus changing and the
  161.        Ref{PInteractor::SetFocusInteractor()} function controls the transfer
  162.        of focus from one interactor in a logical group (eg dialog) to another.
  163.        It is primarily used for field level validation. For example the
  164.        Ref{PIntegerEditBox} control uses this to prevent the user from
  165.        exiting the control until a valid entry hash been made.
  166.        Note that the focus {bf does} actually change with appropriate
  167.        calls to the Ref{PInteractor::OnGainFocus()} and
  168.        Ref{PInteractor::OnLostFocus()} functions. The focus gets set back to
  169.        the original interactor when this function disallows the focus change.
  170.        For edit boxes this will execute the notification function before
  171.        returning TRUE.
  172.        @return
  173.        FALSE will prevent the focus change from occurring and TRUE allows the
  174.        change.
  175.      */
  176.     virtual BOOL OnEndInput();
  177.   /**@name Overrides from class PControl */
  178.    /**This function transfers the value of the control to or from the variable
  179.        pointed to by the value pointer member variable.
  180.      */
  181.     virtual void TransferValue(
  182.       int option 
  183.      /**Transfer value option. When this is -1 when the function transfers
  184.          the value from the value pointer into the control. This is called in
  185.          Ref{PDialog::OnInit()} function. When option is zero then the
  186.          function transfers the value from the control to the value pointer
  187.          variable. This is called just before the callback function every time
  188.          the choice box value changes.
  189.        */
  190.     );
  191.   /**@name New functions for class */
  192.     /** Set the text in the edit text part of the combo-box. */
  193.     void SetText(
  194.       const PString & str  /// New text to place in the text edit box.
  195.     );
  196.    /**Get the text in the edit text part of the combo-box.
  197.        @return
  198.        text string entered.
  199.      */
  200.     PString GetText() const;
  201.    /**Get the current value pointer associated with the control. The variable
  202.        pointed to by this is autamatically updated with the current value of
  203.        the choice box.
  204.        @return
  205.        value pointer associated with the control.
  206.      */
  207.     PString * GetValuePointer() const;
  208.    /**Set the current value pointer associated with the control. The variable
  209.        pointed to by this is autamatically updated with the current value of
  210.        the combo-box.
  211.      */
  212.     void SetValuePointer(
  213.       PString * ptr  /// New value pointer to associate with the control.
  214.     );
  215.    /**Set the maximum amount of text that the user may enter in the combo-box
  216.        edit text part. Extra characters entered when it is full are ignored.
  217.      */
  218.     void SetMaxText(
  219.       PINDEX max  /// Maximum number of characters in text.
  220.     );
  221.    /**Get the current length of the text entered into the edit box. This is
  222.        equivalent to #GetText().GetLength()#.
  223.        @return
  224.        number of characters in edit box.
  225.      */
  226.     PINDEX GetLength() const;
  227.    /**Set the selected region in the text within the edit box. The selected
  228.        region includes the character at the #start# position but
  229.        does not include the character at the #finish# position.
  230.        
  231.        If #start# and #finish# are equal then there is
  232.        no selected region. However, the caret is placed immediately before
  233.        that position, ie so that the next character entered will be at
  234.        #start# offset into the resultant string.
  235.        If #finish# is less than #start# it is set to the
  236.        same value as #start#. If either value is greater than the
  237.        current length of the edit box, then they are set to the position of
  238.        the end of the string.
  239.      */
  240.     void SetSelection(
  241.       PINDEX start = 0,           /// Start index position of selected text.
  242.       PINDEX finish = P_MAX_INDEX /// Finish index position of selected text.
  243.     );
  244.    /**Get the selected region in the text in the edit box. If there is no
  245.        selection active, the #start# and #finish#
  246.        variables are both set to the caret position in the string.
  247.        @return
  248.        TRUE if has selection, FALSE if there is nothing selected.
  249.      */
  250.     BOOL GetSelection(
  251.       PINDEX * start = NULL,
  252.         /// Pointer to receive starting position of selected text.
  253.       PINDEX * finish = NULL
  254.         /// Pointer to receive finishing position of selected text.
  255.     ) const;
  256.    /**Cut the selected text to the clipboard. This copies the data and then
  257.        deletes the current selection.
  258.        
  259.        If there is no current selection then this function does nothing.
  260.      */
  261.     void Cut();
  262.    /**Copy the selected text to the clipboard.
  263.        If there is no current selection then this function does nothing.
  264.      */
  265.     void Copy() const;
  266.    /**Paste into the edit control from the clipboard into the edit box at the
  267.        current caret position.
  268.        
  269.        If the paste would add so many characters that the limit set with
  270.        Ref{SetMaxText()} would be exceeded then the paste does not take
  271.        place.
  272.        
  273.        Also, if there is no text in the clipboard then this function does
  274.        nothing.
  275.      */
  276.     void Paste();
  277.    /**Delete the selected text. This does not copy the information to the
  278.        clipboard and the selected text is lost.
  279.        
  280.        If there is no current selection then this function does nothing.
  281.      */
  282.     void Clear();
  283.    /**Add a new string to the list box. If the sorted option was used this
  284.        will place the string in the correct position. Otherwise it adds it to
  285.        the end of the list.
  286.        
  287.        @return
  288.        the index that the string was placed.
  289.      */
  290.     PINDEX AddString(
  291.       const PString & str   /// String to add to the list of choices.
  292.     );
  293.    /**Add a collection of new entries to the combo-box. Each element of the
  294.        collection is added in order using the Ref{AddEntry()} function. Thus,
  295.        for example, a sorted list string will be added in sorted order.
  296.        If the collection is not of string objects then they are translated into
  297.        a string by the use of the Ref{operator<<} function.
  298.      */
  299.     void AddStrings(
  300.       const PCollection & objects /// New objects to add to list box.
  301.     );
  302.    /**Insert a string at the specified location. This ignores the sort order
  303.        and explicitly places the string at the index position.
  304.      */
  305.     void InsertString(
  306.       const PString & str,  /// String to add to the list of choices.
  307.       PINDEX index          /// Position in list to place the new string.
  308.     );
  309.     /** Delete a string from the list of choices in the combo-box. */
  310.     void DeleteString(
  311.       PINDEX index   /// Position in list of the string to remove.
  312.     );
  313.     /** Delete all the strings in the list box. */
  314.     void DeleteAllStrings();
  315.    /**Find the string in the list of choices starting at the entry after the
  316.        specified starting index. If the index is P_MAX_INDEX then searches the
  317.        whole list. The exact flag indicates that the whole string must match
  318.        otherwise a string in the list box that matches up to the length of the
  319.        argument string will be found.
  320.        @return
  321.        index position of the string that meets the matching criteria or
  322.        P_MAX_INDEX if it was not found.
  323.      */
  324.     PINDEX FindString(
  325.       const PString & str,  /// String to search for in the list of choices.
  326.       PINDEX startIndex = P_MAX_INDEX,  /// Index into list to start search.
  327.       BOOL exact = FALSE    /// Flag for whether search is exact or partial.
  328.     ) const;
  329.    /**Set the string at the index position. If the index is beyond the end of
  330.        the list then simply adds the string to the end of the list.
  331.      */
  332.     void SetString(
  333.       const PString & str,  /// String to set in the list of choices.
  334.       PINDEX index          /// Position in the list of choices to set.
  335.     );
  336.    /**Get the string at the index. If the index is beyond the end of the list
  337.        then returns the empty string.
  338.        @return
  339.        string for the entry in the list of choices.
  340.      */
  341.     PString GetString(
  342.       PINDEX index    /// Position in the list of choices to retrieve.
  343.     ) const;
  344.    /**Get the count of the number of items in the list of choices in the
  345.        combo-box.
  346.        @return
  347.        number of choices.
  348.      */
  349.     PINDEX GetCount() const;
  350.    /**Set the current selection to the string specified by the index. The
  351.        value of the string selectged is copied to the edit text box part of the
  352.        combo-box. The string may then subsequently be edited.
  353.      */
  354.     void SetCurrent(
  355.       PINDEX index    /// Index into list of the string to copy.
  356.     );
  357.    /**Get the current selection. This is the selection made by either the user
  358.        selecting an item in the list box part of the combo-box or the program
  359.        using the SetCurrent() function. In either case once the edit text part
  360.        has been edited by the user the "current" selection is no longer valid
  361.        and the index returned is P_MAX_INDEX.
  362.        @return
  363.        index of the selected string in the list box.
  364.      */
  365.     PINDEX GetCurrent() const;
  366.   protected:
  367.   // Member variables
  368.     /** The coice box strings are sorted. */
  369.     BOOL sort;
  370.   private:
  371.   // New functions for class
  372.     void Construct();
  373.     // Common constructor code
  374. #ifdef DOC_PLUS_PLUS
  375. };
  376. #endif
  377. // Class declaration continued in platform specific header file ///////////////