Flu_Collapsable_Group.h
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:7k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: Flu_Collapsable_Group.h,v $
  4.  * PRODUCTION Revision 1000.0  2004/04/12 18:21:09  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.1
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*
  10.  * These files were imported into NCBI's CVS directly from FLU version 2.9.1.
  11.  * Modifications to the source are listed below.
  12.  *
  13.  * ==========================================================================
  14.  * $Log: Flu_Collapsable_Group.h,v $
  15.  * Revision 1000.0  2004/04/12 18:21:09  gouriano
  16.  * PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.1
  17.  *
  18.  * Revision 1.1  2004/03/11 13:51:54  dicuccio
  19.  * Imported FLU version 2.9.1.  Altered export specifiers to match NCBI layout.
  20.  * Altered include paths to match NCBI toolkit layout.
  21.  *
  22.  * ==========================================================================
  23.  */
  24. // $Id: Flu_Collapsable_Group.h,v 1000.0 2004/04/12 18:21:09 gouriano Exp $
  25. /***************************************************************
  26.  *                FLU - FLTK Utility Widgets 
  27.  *  Copyright (C) 2002 Ohio Supercomputer Center, Ohio State University
  28.  *
  29.  * This file and its content is protected by a software license.
  30.  * You should have received a copy of this license with this file.
  31.  * If not, please contact the Ohio Supercomputer Center immediately:
  32.  * Attn: Jason Bryan Re: FLU 1224 Kinnear Rd, Columbus, Ohio 43212
  33.  * 
  34.  ***************************************************************/
  35. #ifndef _FLU_COLLAPSABLE_GROUP_H
  36. #define _FLU_COLLAPSABLE_GROUP_H
  37. #include <stdio.h>
  38. #include <string.h>
  39. /* fltk includes */
  40. #include <FL/Fl.H>
  41. #include <FL/fl_draw.H>
  42. #include <FL/Fl_Group.H>
  43. #include <FL/Fl_Box.H>
  44. #include <gui/widgets/FLU/FluSimpleString.h>
  45. #include <gui/widgets/FLU/Flu_Button.h>
  46. //! This widget implements a collapsable group with a configurable framerate
  47. /*! This class is a group with a button and an b Fl_Group inside (both publicly exposed). The b Fl_Group
  48.   contains the actual child widgets of this group.
  49.   Most of the b Fl_Group member functions are reimplemented here in a pass-through fashion to the
  50.   internal group. This means that casual use of a descendent instance will be almost exactly the same
  51.   as for a regular b Fl_Group, with any additional access provided directly through member b group.
  52.   The goal of this class is to provide a dynamically collapsable group similar to those available in 
  53.   other GUI toolkits.
  54.   The callback is invoked whenever the button is pressed to open/close the group.
  55. */
  56. class NCBI_GUIWIDGETS_FLU_EXPORT Flu_Collapsable_Group : public Fl_Group
  57. {
  58.  public:
  59.   //! Normal FLTK constructor
  60.   Flu_Collapsable_Group( int x, int y, int w, int h, const char *l = 0 );
  61.   //! Get the amount of time to take when animating a collapse
  62.   inline float collapse_time() const
  63.     { return _collapseTime; }
  64.   //! Set the amount of time to take when animating a collapse
  65.   inline void collapse_time( float t )
  66.     { _collapseTime = t; }
  67.   //! Get the frame rate to aim for during a collapse animation
  68.   inline float frame_rate() const
  69.     { return _fps; }
  70.   //! Set the frame rate to aim for during a collapse animation
  71.   inline void frame_rate( float f )
  72.     { _fps = f; }
  73.   //! Set the position of the controller widget along the top edge of the group. This only has an effect if fit() is not set. Default value is c FL_ALIGN_LEFT
  74.   /*! Accepted values are c FL_ALIGN_LEFT, c FL_ALIGN_CENTER, and c FL_ALIGN_RIGHT */
  75.   inline void align( unsigned char a )
  76.     { _align = a; }
  77.   //! Get the position of the controller widget along the top edge of the group
  78.   inline unsigned char align() const
  79.     { return _align; }
  80.   //! Pass c true to force the button to be the same width as the group, c false to leave it its default size. Default value is c false
  81.   inline void fit( bool b )
  82.     { _fit = b; }
  83.   //! Get whether the button is being forced to fit the width of the group
  84.   inline bool fit() const
  85.     { return _fit; }
  86.   //! Get whether the group is closed or open (i.e. collapsed or not)
  87.   inline bool open() const
  88.     { return _open; }
  89.   //! Set whether the group is closed or open (i.e. collapsed or not). Default is c true
  90.   void open( bool o );
  91.   //! Get whether the group is closed or open (i.e. collapsed or not)
  92.   inline bool closed() const
  93.     { return !_open; }
  94.   //! Get whether the group is in the process of opening or closing
  95.   inline bool changing() const
  96.     { return _changing; }
  97.   //! Override of Fl_Group::resize()
  98.   void resize( int x, int y, int w, int h );
  99.   //! Override of Fl_Group::label()
  100.   inline void label( const char *l )
  101.     { if( l ) _label = l; else _label = ""; }
  102.   //! Override of Fl_Group::label()
  103.   inline const char *label()
  104.     { return _label.c_str(); }
  105.   //////////////////////
  106.   /*! name Pass-through functions for the internal Fl_Group
  107.    * These are strictly for convenience. Only the most commonly called functions have been re-implemented.
  108.    * You can also explicitly access the group object for more control.
  109.    */
  110.   //@{
  111.   inline void clear()
  112.     { group.clear(); }
  113.   inline Fl_Widget *child(int n) const
  114.     { return group.child(n); }
  115.   inline int children() const
  116.     { return group.children(); }
  117.   inline void begin()
  118.     { group.begin(); }
  119.   inline void end()
  120.     { group.end(); Fl_Group::end(); }
  121.   inline void resizable(Fl_Widget *box)
  122.     { group.resizable(box); }
  123.   inline void resizable(Fl_Widget &box) 
  124.     { group.resizable(box); }
  125.   inline Fl_Widget *resizable() const
  126.     { return group.resizable(); }
  127.   inline void add( Fl_Widget &w )
  128.     { group.add( w ); }
  129.   inline void add( Fl_Widget *w )
  130.     { group.add( w ); }
  131.   inline void insert( Fl_Widget &w, int n )
  132.     { group.insert( w, n ); }
  133.   inline void insert( Fl_Widget &w, Fl_Widget* beforethis )
  134.     { group.insert( w, beforethis ); }
  135.   inline void remove( Fl_Widget &w )
  136.     { group.remove( w ); }
  137.   inline void add_resizable( Fl_Widget &box )
  138.     { group.add_resizable( box ); }
  139.   //@}
  140.   Flu_Button button;
  141.   Fl_Group group;
  142.  protected:
  143.   //////////////////////////
  144.   void draw();
  145.   inline static void _collapseCB( Fl_Widget* w, void* arg )
  146.     { ((Flu_Collapsable_Group*)arg)->open( !((Flu_Collapsable_Group*)arg)->open() ); }
  147.   inline static void _updateCB( void *arg )
  148.     { ((Flu_Collapsable_Group*)arg)->updateCB(); }
  149.   void updateCB();
  150.   void (*_callback)(Fl_Widget*,void*);
  151.   void *_callbackData;
  152.   void (*_collapseCallback)(void*);
  153.   void *_collapseCallbackData;
  154.   int _originalHeight, _newHeight;
  155.   float _deltaHeight, _currentHeight, _collapseTime, _timeout, _fps;
  156.   Fl_Widget *_oldResizable;
  157.   bool _open, _changing, _fit;
  158.   unsigned char _align;
  159.   FluSimpleString _label;
  160. };
  161. #endif