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

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * toolbars.h
  3.  *
  4.  * Tool Bar Interactor GUI classes.
  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: toolbars.h,v $
  30.  * Revision 1.22  1999/03/09 08:01:47  robertj
  31.  * Changed comments for doc++ support (more to come).
  32.  *
  33.  * Revision 1.21  1999/02/16 08:08:28  robertj
  34.  * MSVC 6.0 compatibility changes.
  35.  *
  36.  * Revision 1.20  1998/09/23 06:20:09  robertj
  37.  * Added open source copyright license.
  38.  *
  39.  * Revision 1.19  1996/04/30 12:34:10  robertj
  40.  * Changed "inPixels" boolean to enum for three coordinate systems.
  41.  *
  42.  * Revision 1.18  1995/10/14 15:11:59  robertj
  43.  * Fixed bug in changing fonts on status bar.
  44.  *
  45.  * Revision 1.17  1995/07/31 12:13:03  robertj
  46.  * Added balloon help string to toolbar button codes.
  47.  *
  48.  * Revision 1.16  1995/06/17 11:13:39  robertj
  49.  * Documentation update.
  50.  *
  51.  * Revision 1.15  1995/06/04 12:38:26  robertj
  52.  * Redesign to add vertical tool bars and control wrapping.
  53.  *
  54.  * Revision 1.14  1995/04/02 09:27:35  robertj
  55.  * Added "balloon" help.
  56.  *
  57.  * Revision 1.13  1995/03/22 13:51:17  robertj
  58.  * Split SetText() to separate function for SetSectionText() to guarentee that
  59.  *     the parameters can be resolved.
  60.  *
  61.  * Revision 1.12  1995/03/14  12:42:54  robertj
  62.  * Updated documentation to use HTML codes.
  63.  *
  64.  * Revision 1.11  1995/02/19  04:19:23  robertj
  65.  * Added dynamically linked command processing.
  66.  *
  67.  * Revision 1.10  1995/01/18  09:04:12  robertj
  68.  * Added initialiser arrays for button bar and status bar.
  69.  * Documentation.
  70.  *
  71.  * Revision 1.9  1995/01/15  04:53:11  robertj
  72.  * Fixed problems with stdarg and PString parameter on GNU compiler.
  73.  *
  74.  * Revision 1.8  1995/01/10  11:44:36  robertj
  75.  * Removed PString parameter in stdarg function for GNU C++ compatibility.
  76.  *
  77.  * Revision 1.7  1994/10/30  11:47:26  robertj
  78.  * Changed mechanism for doing notification callback functions.
  79.  *
  80.  * Revision 1.6  1994/08/23  11:32:52  robertj
  81.  * Oops
  82.  *
  83.  * Revision 1.5  1994/08/22  00:46:48  robertj
  84.  * Added pragma fro GNU C++ compiler.
  85.  *
  86.  * Revision 1.4  1994/08/21  23:43:02  robertj
  87.  * Changed parameter before variable argument list to NOT be a reference.
  88.  *
  89.  * Revision 1.3  1994/08/04  01:43:48  robertj
  90.  * Removed comments.
  91.  *
  92.  * Revision 1.2  1994/07/27  05:58:07  robertj
  93.  * Synchronisation.
  94.  *
  95.  * Revision 1.1  1994/04/01  14:25:36  robertj
  96.  * Initial revision
  97.  */
  98. #ifndef _PTOOLBARS
  99. #define _PTOOLBARS
  100. #ifdef __GNUC__
  101. #pragma interface
  102. #endif
  103. /**A class representing a tool bar. This is an interactor layout containing
  104.    a series of controls and having a "chiselled" 3-d boundary. The controls
  105.    added to the tool bar are automatically positioned according to some
  106.    simple rules.
  107.    
  108.    The bar may be horizontal or vertical. The actual positioning of the bar
  109.    is usually determined by the parent interactor positioning it using the
  110.    ref{PInteractor::AutoAdjustBounds()} function.
  111.    A horizontal bar positions controls added across a row with optional
  112.    wrapping to the next row when passed the end of the bar. A vertical bar
  113.    positions controls down in a column optionally wrapping to a new column
  114.    when beyond the bottom of the bar.
  115.    Functionaly, this is very similar to a non-modal dialog but has a different
  116.    "look", that is does not have a title bar and cannot be moved under user
  117.    control.
  118.    A tool bar is mainly used as the ancestor to the standard classes
  119.    ref{PButtonBar} and ref{PStatusBar}.
  120.  */
  121. class PToolBar : public PInteractorLayout
  122. {
  123.   PCLASSINFO(PToolBar, PInteractorLayout);
  124.   public:
  125.   /**@name Construction */
  126.   //@{
  127.     /**Create a new empty tool bar. The #vertical# parameter
  128.        indicates that the controls are positioned down the bar. The
  129.        #autoWrap# parameter indicates that controls added beyond
  130.        the right (or bottom) of the bar are repositioned to the left (or top)
  131.        and below (or next to) the previous row (or column).
  132.      */
  133.     PToolBar(
  134.       PInteractor * parent,    /// Parent interactor for the tool bar.
  135.       BOOL vertical = FALSE,   /// Tool bar is vertical.
  136.       BOOL autoWrap = FALSE    /// Wrap controls at end of bar.
  137.     );
  138.   //@}
  139.   /**@name New functions for class */
  140.   //@{
  141.     /**Add a control to the tool bar. The new control is placed next to the
  142.        last control added adjusting its position.
  143.      */
  144.     void AddControl(
  145.       PControl * control,   /// Control to add to the list of automatically.
  146.       PDIMENSION gapSize = 0,
  147.         /// Amount "gap units" to leave between this control and the next one.
  148.       PDIMENSION elasticity = 0
  149.         /**Elasticity of control, 0 is may not be resized. A non-zero value
  150.            is the ratio of all elastic controls to be resized when the size of
  151.            the bar is changed.
  152.          */
  153.     );
  154.   //@}
  155.   protected:
  156.   /**@name Overrides from class PInteractor */
  157.   //@{
  158.     virtual void _SetDimensions(
  159.       PDIMENSION width,       // New width to apply to interactor.
  160.       PDIMENSION height,      // New height to apply to interactor.
  161.       CoordinateSystem coords // Coordinate system to use.
  162.     );
  163.     /* Set the dimensions of the status bar. The new size is specified in
  164.        either the font based layout coordinates or in screen pixels as
  165.        specified by the #coords# parameter.
  166.        All static text sections within the status bar are resized according
  167.        to their relative and absolute widths.
  168.        When scaling is used (#coords == LocalCoords#), the
  169.        coordinates used are 1/4 average font width and 1/8 the font height.
  170.      */
  171.     virtual void OnRedraw(
  172.       PCanvas & canvas   // Canvas to use when drawing the interactor contents.
  173.     );
  174.     /* The system calls this whenever it requires that the interactors usable
  175.        area needs to be updated and redrawn.
  176.        The behaviour here is to draw the "chiselled" 3-d look of a tool bar.
  177.      */
  178.     virtual PBalloon * OnBalloonHelp();
  179.     /* This function is called whenever a balloon help function for the
  180.        interactor is required.
  181.        @return
  182.        Pointer to balloon window containing balloon help text.
  183.      */
  184.   //@}
  185.   /**@name New functions for class */
  186.   //@{
  187.     void DoControlGeometry();
  188.     // Do the geometry calculations for the controls in the bar.
  189.   //@}
  190.   // Member variables
  191.     class BarItem : public PObject
  192.     {
  193.       PCLASSINFO(BarItem, PObject);
  194.       public:
  195.         BarItem(PControl * c, PDIMENSION g, PDIMENSION e)
  196.           : control(c), gapSize(g), elasticity(e) { }
  197.         PControl * control;
  198.         PDIMENSION gapSize;
  199.         PDIMENSION elasticity;
  200.     };
  201.     PLIST(BarItems, BarItem);
  202.     BarItems   item;
  203.     PDim       margin;
  204.     BOOL       positionDown;
  205.     BOOL       wrapControls;
  206. };
  207. /**A class representing a tool bar consisting of a series of picture button
  208.    controls. The picture for the button is loaded from a resource with the
  209.    specified number in the array pass to the constructor. This number is
  210.    then used as the control ID for thge picture button. When one of these
  211.    buttons is pressed the specified ID is again used in determining which
  212.    main menu item to simulate.
  213.  */
  214. class PButtonBar : public PToolBar
  215. {
  216.   PCLASSINFO(PButtonBar, PToolBar);
  217.   public:
  218.   /**@name Construction */
  219.   //@{
  220.     /** Initialisation structure for static array of button definitions
  221.      */
  222.     struct ButtonID {
  223.       /**Resource ID of the "linked" menu item. Pressing the button will be
  224.          equivalent to selecting this menu item.
  225.        */
  226.       PRESOURCE_ID menuItem;
  227.       /**The name of the ref{PCommandSink} that will be executed when the
  228.          button is pressed. This is also used to enable/disable the button.
  229.        */
  230.       const char * commandName;
  231.       /**Resource ID of the image when the button is enabled. If this is zero
  232.          then the #menuItem# field is used.
  233.        */
  234.       PRESOURCE_ID enabledImage;
  235.       /**Resource ID of the image when the button is disabled. If this is zero
  236.          then the #enabledImage# field is used. If that field is
  237.          also zero then the #menuItem# field is used.
  238.        */
  239.       PRESOURCE_ID disabledImage;
  240.       /**Resource ID of the string to be used as the balloon help. If this is
  241.          zero then the #menuItem# field is used.
  242.        */
  243.       PRESOURCE_ID balloonHelp;
  244.     };
  245.     /** Create a new button bar.
  246.      */
  247.     PButtonBar(
  248.       PInteractor * parent,   /// Parent interactor for button bar.
  249.       const ButtonID * IDs,   /// Array of button identifier structures.
  250.       PINDEX numIDs,          /// Number of button identifier structures.
  251.       BOOL vertical = FALSE,  /// Tool bar is vertical.
  252.       BOOL autoWrap = FALSE   /// Wrap controls at end of bar.
  253.     );
  254.   //@}
  255.   /**@name New functions for class */
  256.   //@{
  257.     /**Add a list of image buttons to the button bar.
  258.      */
  259.     void AddButtons(
  260.       const ButtonID * IDs,   /// Array of button identifier structures.
  261.       PINDEX numIDs           /// Number of button identifier structures.
  262.     );
  263.   //@}
  264.   protected:
  265.   /**@name Overrides from PInteractor */
  266.   //@{
  267.     virtual void OnControlNotify(
  268.       PControl & control,     // Control that provides the notification.
  269.       int option              // Options for the type of notification.
  270.     );
  271.     /* This function is called whenever a control needs to notify its parent
  272.        interactor that somthing has happened to it.
  273.        
  274.        The behaviour here is to call the
  275.        ref{PTopLevelWindow::OnMenuItemSelect()} function for the menu item if
  276.        the ID specified for the image button.
  277.      */
  278.   //@}
  279. };
  280. /**A class representing a tool bar consisting of a series of static text
  281.    controls with 3-D borders. The static text sections may be optionaly of
  282.    a fixed width or dynamically resized when the status bar has its size
  283.    changed.
  284.    This is typically used at the bottom of a window to indicate status and
  285.    short message displays.
  286.  */
  287. class PStatusBar : public PToolBar
  288. {
  289.   PCLASSINFO(PStatusBar, PToolBar);
  290.   public:
  291.   /**@name Construction */
  292.   //@{
  293.     /**Create a new status bar with the specified number of static text
  294.        descendent controls as sections of the bar.
  295.      */
  296.     PStatusBar(
  297.       PInteractor * parent, // Parent interactor for the status bar.
  298.       PINDEX numSections    // Number of sections in the status bar.
  299.     );
  300.   //@}
  301.   /**@name Overrides from PInteractor */
  302.   //@{
  303.     /**Set the font to be used by default by this interactor. A canvas created
  304.        on this interactor will initially have this font selected.
  305.      */
  306.     virtual void SetFont(
  307.       const PFont & newFont, /// New font specification fo rthe interactor.
  308.       BOOL toChildren = TRUE
  309.         /// Flag to recursively change all child interactors.
  310.     );
  311.   //@}
  312.   /**@name New functions for class */
  313.   //@{
  314.     /**Set the text in the first section. */
  315.     void SetText(
  316.       const PString & str /// New text string for section
  317.     );
  318.     /**Set the text in the first section. */
  319.     void SetText(
  320.       PRESOURCE_ID resId,
  321.                  /// Printf style format resource string for variable arguments.
  322.       ...
  323.     );
  324.     /**Set the text in the first section.
  325.        
  326.        The text may be set using printf style variable arguments. If this is
  327.        done then the format string cannot be a ref{PString} instance due to
  328.        limitations in some compilers.
  329.        If no section number is specified then the first section is set.
  330.      */
  331.     void SetText(
  332.       const char * fmt,   /// Printf style format string for variable arguments.
  333.       ...
  334.     );
  335.     /**Set the text in the section number specified. */
  336.     void SetSectionText(
  337.       PINDEX section,     /// Number of static text section to change.
  338.       const PString & str /// New text string for section
  339.     );
  340.     /**Set the text in the section number specified. */
  341.     void SetSectionText(
  342.       PINDEX section,     /// Number of static text section to change.
  343.       PRESOURCE_ID resId,
  344.                  /// Printf style format resource string for variable arguments.
  345.       ...
  346.     );
  347.     /**Set the text in the section number specified. The first section is
  348.        numbered zero.
  349.        
  350.        The text may be set using printf style variable arguments. If this is
  351.        done then the format string cannot be a ref{PString} instance due to
  352.        limitations in some compilers.
  353.        If no section number is specified then the first section is set.
  354.      */
  355.     void SetSectionText(
  356.       PINDEX section,     /// Number of static text section to change.
  357.       const char * fmt,   /// Printf style format string for variable arguments.
  358.       ...
  359.     );
  360.     /**Set the width of each section in the status bar. */
  361.     void SetSectionWidth(
  362.       PINDEX section,     /// Number of static text section to change.
  363.       const PString & str /// Longest text string to put into section.
  364.     );
  365.     /**Set the width of each section in the status bar. */
  366.     void SetSectionWidth(
  367.       PINDEX section,     /// Number of static text section to change.
  368.       const PRESOURCE_ID * strIDs,  /// Array of string resource identifiers.
  369.       PINDEX nStrings               /// Number of string resource identifiers.
  370.     );
  371.     /**Set the width of each section in the status bar.
  372.     
  373.        The first form will set the width to sufficient to contain the string
  374.        specified, in the status bars currently selected font.
  375.        
  376.        The second form sets the width to the widest string in the specified
  377.        array of resource strings.
  378.        
  379.        The final form sets the width directly. A positive value specifies the
  380.        fixed width if the section in the interactors font based coordinate
  381.        system.
  382.        A negative width here will specify a ratio to be used when dividing the
  383.        total remaining bar width amongst all sections with negative widths.
  384.        If a section has its width changed after the status bar is shown then
  385.        an explicit call to the ref{PInteractor::SetDimensions()} function
  386.        must be made to resize all of the sections.
  387.        The default width for a section is -1.
  388.      */
  389.     void SetSectionWidth(
  390.       PINDEX section,     /// Number of static text section to change.
  391.       int width           /// Width of the section.
  392.     );
  393.     /**Set the text alignement options for the specified section. */
  394.     void SetSectionAlignment(
  395.       PINDEX section,     /// Number of static text section to change.
  396.       PCanvas::DrawStringOptions align    /// text alignment for section.
  397.     );
  398.   //@}
  399.   protected:
  400.     class Section : public PStaticText
  401.     {
  402.       PCLASSINFO(Section, PStaticText);
  403.       public:
  404.         Section(PInteractor * parent);
  405.       protected:
  406.         virtual void OnRedraw(PCanvas & canvas);
  407.       friend class PStatusBar;
  408.     };
  409.     /**Get the specified section of the status bar. This will assert if the
  410.        section does not exist or is not a descendent of the
  411.        #PStatusBar::Section# class.
  412.        @return
  413.        a reference to the section.
  414.      */
  415.     Section & GetSection(
  416.       PINDEX section    /// Number of section to get.
  417.     ) const;
  418. };
  419. #endif
  420. // End Of File ///////////////////////////////////////////////////////////////