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

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * choicbox.h
  3.  *
  4.  * Choice 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: choicbox.h,v $
  30.  * Revision 1.22  1999/03/10 03:49:51  robertj
  31.  * More documentation adjustments.
  32.  *
  33.  * Revision 1.21  1999/03/09 08:01:47  robertj
  34.  * Changed comments for doc++ support (more to come).
  35.  *
  36.  * Revision 1.20  1999/02/16 08:08:45  robertj
  37.  * MSVC 6.0 compatibility changes.
  38.  *
  39.  * Revision 1.19  1998/09/23 06:23:03  robertj
  40.  * Added open source copyright license.
  41.  *
  42.  * Revision 1.18  1995/10/14 14:53:55  robertj
  43.  * Added addition of colection as strings to box.
  44.  * Changed SetChoice to SetSelection for consistencies sake.
  45.  *
  46.  * Revision 1.17  1995/03/14 12:41:06  robertj
  47.  * Updated documentation to use HTML codes.
  48.  *
  49.  * Revision 1.16  1995/02/19  04:19:05  robertj
  50.  * Added dynamically linked command processing.
  51.  *
  52.  * Revision 1.15  1995/01/14  06:20:25  robertj
  53.  * Documentation
  54.  *
  55.  * Revision 1.14  1994/12/05  11:14:53  robertj
  56.  * Documentation.
  57.  *
  58.  * Revision 1.13  1994/10/30  11:46:32  robertj
  59.  * Changed mechanism for doing notification callback functions.
  60.  *
  61.  * Revision 1.12  1994/08/23  11:32:52  robertj
  62.  * Oops
  63.  *
  64.  * Revision 1.11  1994/08/22  00:46:48  robertj
  65.  * Added pragma fro GNU C++ compiler.
  66.  *
  67.  * Revision 1.10  1994/06/25  11:55:15  robertj
  68.  * Unix version synchronisation.
  69.  *
  70.  * Revision 1.9  1994/04/11  14:11:15  robertj
  71.  * Added consts.
  72.  *
  73.  * Revision 1.8  1994/04/03  08:34:18  robertj
  74.  * Added help and focus functionality.
  75.  *
  76.  * Revision 1.7  1994/03/07  07:38:19  robertj
  77.  * Major enhancementsacross the board.
  78.  *
  79.  * Revision 1.6  1994/01/15  02:50:29  robertj
  80.  * Moved control contructors to common and added a platform dependent Construct() function.
  81.  *
  82.  * Revision 1.5  1994/01/03  04:42:23  robertj
  83.  * Mass changes to common container classes and interactors etc etc etc.
  84.  *
  85.  * Revision 1.4  1993/09/27  16:35:25  robertj
  86.  * Removed special constructor for dialog resource loading.
  87.  *
  88.  * Revision 1.3  1993/08/21  01:50:33  robertj
  89.  * Made Clone() function optional, default will assert if called.
  90.  *
  91.  * Revision 1.2  1993/07/14  12:49:16  robertj
  92.  * Fixed RCS keywords.
  93.  *
  94.  */
  95. #define _PCHOICEBOX
  96. #ifdef __GNUC__
  97. #pragma interface
  98. #endif
  99. /**A control for selecting one of a number of choices, similar to radio
  100.    buttons but typically for larger numbers of options in a smaller space.
  101.    The exact appearence of a choice box is platform dependent, for example,
  102.    in MS-Windows this is a fixed combo-box, in Mac-OS it is a popup menu.
  103.  */
  104. class PChoiceBox : public PControl
  105. {
  106.   PCLASSINFO(PChoiceBox, PControl);
  107.   public:
  108.     /** Option for the strings in the choice box. */
  109.     enum StringSorting {
  110.       /// Strings are in the order they are added.
  111.       NotSorted,  
  112.       /// Strings are in alphabetic order.
  113.       Sorted      
  114.     };
  115.     /** Create a choice box with optional sorting of the list elements. */
  116.     PChoiceBox(
  117.       PInteractor * parent,    /// Interactor into which the control is placed.
  118.       StringSorting sorted = NotSorted  /// Sorting option for strings in box.
  119.     );
  120.     PChoiceBox(
  121.       PInteractor * parent,    /// Interactor into which the control is placed.
  122.       const PNotifier & notify,  /// Function to call when changes state.
  123.       StringSorting sorted = NotSorted  /// Sorting option for strings in box.
  124.     );
  125.     /** Create control from interactor layout with the specified control ID. */
  126.     PChoiceBox(
  127.       PInteractorLayout * parent, /// Interactor into which the box is placed.
  128.       PRESOURCE_ID ctlID,         /// Identifier for the control in the layout.
  129.       const PNotifier & notify,   /// Function to call when changes state.
  130.       PINDEX * valuePtr           /// Variable to change to the check box state.
  131.     );
  132.     /** Destroy the choice box and its contents. */
  133.     virtual ~PChoiceBox();
  134.    /**Codes passed to the PNotifier function when the specified notification
  135.        events occur.
  136.      */
  137.     enum {
  138.       /// A new choice was made from this list
  139.       NewSelection = NotifyChange,  
  140.         /// The list of selections has been presented.
  141.       ListDropped,   
  142.       /// The list of selections has been hidden.
  143.       ListClosed     
  144.     };
  145.   /**@name Overrides from class PControl */
  146.    /**This function transfers the value of the control to or from the variable
  147.        pointed to by the value pointer member variable.
  148.      */
  149.     virtual void TransferValue(
  150.       int option 
  151.      /**Transfer value option. When this is -1 when the function transfers
  152.          the value from the value pointer into the control. This is called in
  153.          Ref{PDialog::OnInit()} function. When option is zero then the
  154.          function transfers the value from the control to the value pointer
  155.          variable. This is called just before the callback function every time
  156.          the choice box value changes.
  157.        */
  158.     );
  159.   /**@name New functions for class */
  160.    /**Set the index of the string that is currently selected and visible in
  161.        the non-popped up state. The first string is index 0 etc. This will be
  162.        updated on the screen immediately (within OS constraints).
  163.      */
  164.     void SetSelection(
  165.       PINDEX newValue   /// New index of the choice box string selected,
  166.     );
  167.    /**Get the index of the string that is currently selected.
  168.        @return
  169.        index of choice box selection.
  170.      */
  171.     PINDEX GetSelection() const;
  172.    /**Get the current value pointer associated with the control. The variable
  173.        pointed to by this is autamatically updated with the current value of
  174.        the choice box.
  175.        @return
  176.        value pointer associated with the control.
  177.      */
  178.     PINDEX * GetValuePointer() const;
  179.    /**Set the current value pointer associated with the control. The variable
  180.        pointed to by this is autamatically updated with the current value of
  181.        the choice box.
  182.      */
  183.     void SetValuePointer(
  184.       PINDEX * ptr  /// New value pointer to associate with the control.
  185.     );
  186.    /**Add a new string to the list box. If the sorted option was used this
  187.        will place the string in the correct position. Otherwise it adds it to
  188.        the end of the list.
  189.        
  190.        @return
  191.        the index that the string was placed.
  192.      */
  193.     PINDEX AddString(
  194.       const PString & str   /// String to add to the list of choices.
  195.     );
  196.    /**Add a collection of new entries to the choice box. Each element of the
  197.        collection is added in order using the Ref{AddEntry()} function. Thus,
  198.        for example, a sorted list string will be added in sorted order.
  199.        If the collection is not of string objects then they are translated into
  200.        a string by the use of the Ref{operator<<} function.
  201.      */
  202.     void AddStrings(
  203.       const PCollection & objects /// New objects to add to list box.
  204.     );
  205.    /**Insert a string at the specified location. This ignores the sort order
  206.        and explicitly places the string at the index position.
  207.      */
  208.     void InsertString(
  209.       const PString & str,  /// String to add to the list of choices.
  210.       PINDEX index          /// Position in list to place the new string.
  211.     );
  212.     /** Delete a string from the list of choices in the choice box. */
  213.     void DeleteString(
  214.       PINDEX index   /// Position in list of the string to remove.
  215.     );
  216.     /** Delete all the strings in the list of choices in the choice box. */
  217.     void DeleteAllStrings();
  218.    /**Find the string in the list of choices starting at the entry after the
  219.        specified starting index. If the index is P_MAX_INDEX then searches the
  220.        whole list. The exact flag indicates that the whole string must match
  221.        otherwise a string in the list box that matches up to the length of the
  222.        argument string will be found.
  223.        @return
  224.        index position of the string that meets the matching criteria or
  225.        #P_MAX_INDEX# if it was not found.
  226.      */
  227.     PINDEX FindString(
  228.       const PString & str,  /// String to search for in the list of choices.
  229.       PINDEX startIndex = P_MAX_INDEX,  /// Index into list to start search.
  230.       BOOL exact = FALSE    /// Flag for whether search is exact or partial.
  231.     ) const;
  232.    /**Set the string at the index position. If the index is beyond the end of
  233.        the list then simply adds the string to the end of the list.
  234.      */
  235.     void SetString(
  236.       const PString & str,  /// String to set in the list of choices.
  237.       PINDEX index          /// Position in the list of choices to set.
  238.     );
  239.    /**Get the string at the index. If the index is beyond the end of the list
  240.        then returns the empty string.
  241.        @return
  242.        string for the entry in the list of choices.
  243.      */
  244.     PString GetString(
  245.       PINDEX index    /// Position in the list of choices to retrieve.
  246.     ) const;
  247.    /**Get the count of the number of items in the list of choices in the
  248.        choice box.
  249.        @return
  250.        number of choices.
  251.      */
  252.     PINDEX GetCount() const;
  253.   protected:
  254.   // Member variables
  255.     /** The coice box strings are sorted. */
  256.     BOOL sort;
  257.   private:
  258.   // New functions for class
  259.     void Construct();
  260.     // Common constructor code
  261. #ifdef DOC_PLUS_PLUS
  262. };
  263. #endif
  264. // Class declaration continued in platform specific header file ///////////////