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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: Flu_Wrap_Group.h,v $
  4.  * PRODUCTION Revision 1000.0  2004/04/12 18:22:34  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_Wrap_Group.h,v $
  15.  * Revision 1000.0  2004/04/12 18:22:34  gouriano
  16.  * PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.1
  17.  *
  18.  * Revision 1.1  2004/03/11 13:51:55  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_Wrap_Group.h,v 1000.0 2004/04/12 18:22:34 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_WRAP_GROUP_H
  36. #define _FLU_WRAP_GROUP_H
  37. /* fltk includes */
  38. #include <FL/Fl.H>
  39. #include <FL/fl_draw.H>
  40. #include <FL/Fl_Group.H>
  41. #include <FL/Fl_Scrollbar.H>
  42. #include <gui/widgets/FLU/Flu_Enumerations.h>
  43. //! This class provides an alternative to Fl_Group that automatically arranges the children either left to right and top to bottom (for type() == c FL_VERTICAL), or top to bottom and left to right (for type() == c FL_HORIZONTAL), within the available size of the group, with a scrollbar turning on if they don't all fit
  44. /*! This class is a group with a scrollbar and an b Fl_Group inside (both publicly exposed). The b Fl_Group
  45.   contains the actual child widgets of this group.
  46.   Most of the b Fl_Group member functions are reimplemented here in a pass-through fashion to the
  47.   internal group. This means that casual use of a descendent instance will be almost exactly the same
  48.   as for a regular b Fl_Group, with any additional access provided directly through member b group.
  49.   The goal of this class is to provide a group that dynamically and evenly distributes its children within
  50.   a fixed space, similar to those available in other GUI toolkits.
  51. */
  52. class NCBI_GUIWIDGETS_FLU_EXPORT Flu_Wrap_Group : public Fl_Group
  53. {
  54.  public:
  55.   class Scrollbar : public Fl_Scrollbar
  56.     {
  57.     public:
  58.       Scrollbar( int x, int y, int w, int h, const char *l = 0 );
  59.       int handle( int event );
  60.     };
  61.   //! Normal FLTK constructor
  62.   Flu_Wrap_Group( int x, int y, int w, int h, const char *l = 0 );
  63.   //! return the widget that is visibly above b w in the group, or c NULL if no such widget exists
  64.   Fl_Widget *above( Fl_Widget* w );
  65.   //! return the widget that is visibly below b w in the group, or c NULL if no such widget exists
  66.   Fl_Widget *below( Fl_Widget* w );
  67.   //! Override of Fl_Group::draw()
  68.   void draw();
  69.   //! return the widget that is visibly to the left of b w in the group, or c NULL if no such widget exists
  70.   Fl_Widget *left( Fl_Widget* w );
  71.   //! return the widget that is logically after b w in the groups order, or c NULL if no such widget exists
  72.   Fl_Widget *next( Fl_Widget* w );
  73.   //! Set the offset for where the first child starts
  74.   inline void offset( int x, int y )
  75.     { _offset[0] = x, _offset[1] = y; redraw(); }
  76.   //! return the x offset for where the first child starts
  77.   inline int offset_x() const
  78.     { return _offset[0]; }
  79.   //! return the y offset for where the first child starts
  80.   inline int offset_y() const
  81.     { return _offset[1]; }
  82.   //! return the widget that is logically before b w in the groups order, or c NULL if no such widget exists
  83.   Fl_Widget *previous( Fl_Widget* w );
  84.   //! Override of Fl_Group::resize()
  85.   void resize( int x, int y, int w, int h );
  86.   //! return the widget that is visibly to the right of b w in the group, or c NULL if no such widget exists
  87.   Fl_Widget *right( Fl_Widget* w );
  88.   //! Scroll the group so that the given widget is shown (usually aligned to the left/top)
  89.   void scroll_to( const Fl_Widget *w );
  90.   //! Scroll the group so that the given widget is shown (usually aligned to the left/top)
  91.   inline void scroll_to( const Fl_Widget& w )
  92.     { scroll_to( &w ); }
  93.   //! Scroll the group to the beginning of the list
  94.   void scroll_to_beginning();
  95.   //! Scroll the group to the end of the list
  96.   void scroll_to_end();
  97.   //! Set the spacing between children
  98.   inline void spacing( int x, int y )
  99.     { _spacing[0] = x, _spacing[1] = y; redraw(); }
  100.   //! return the x spacing between children
  101.   inline int spacing_x() const
  102.     { return _spacing[0]; }
  103.   //! return the y spacing between children
  104.   inline int spacing_y() const
  105.     { return _spacing[1]; }
  106.   //! Set the wrap type. Must be either c FL_VERTICAL (children wrap according to the width, with a vertical scrollbar) or c FL_HORIZONTAL (children wrap according to the height, with a horizontal scrollbar). Default is c FL_HORIZONTAL
  107.   void type( int t );
  108.   //! Get the wrap type
  109.   inline int type() const
  110.     { return _type; }
  111.   /*! name Pass-through functions for the internal Fl_Group
  112.    * These are strictly for convenience. Only the most commonly called functions have been re-implemented.
  113.    * You can also explicitly access the group object for more control.
  114.    */
  115.   //@{
  116.   inline Fl_Widget* const* array() const
  117.     { return group.array(); }
  118.   inline int find( const Fl_Widget* w ) const
  119.     { return group.find( w ); }
  120.   inline int find( const Fl_Widget& w ) const
  121.     { return group.find( w ); }
  122.   inline void clear()
  123.     { group.clear(); }
  124.   inline Fl_Widget *child(int n) const
  125.     { return group.child(n); }
  126.   inline int children() const
  127.     { return group.children(); }
  128.   inline void begin()
  129.     { group.begin(); }
  130.   inline void end()
  131.     { group.end(); Fl_Group::end(); }
  132.   inline void resizable(Fl_Widget *box)
  133.     { group.resizable(box); }
  134.   inline void resizable(Fl_Widget &box) 
  135.     { group.resizable(box); }
  136.   inline Fl_Widget *resizable() const
  137.     { return group.resizable(); }
  138.   inline void add( Fl_Widget &w )
  139.     { group.add( w ); }
  140.   inline void add( Fl_Widget *w )
  141.     { group.add( w ); }
  142.   inline void insert( Fl_Widget &w, int n )
  143.     { group.insert( w, n ); }
  144.   inline void insert( Fl_Widget &w, Fl_Widget* beforethis )
  145.     { group.insert( w, beforethis ); }
  146.   inline void remove( Fl_Widget &w )
  147.     { group.remove( w ); }
  148.   inline void add_resizable( Fl_Widget &box )
  149.     { group.add_resizable( box ); }
  150.   //@}
  151.   Scrollbar scrollbar;
  152.   Fl_Group group;
  153.  protected:
  154.   inline static void _scrollCB( Fl_Widget*, void *arg )
  155.     { ((Flu_Wrap_Group*)arg)->redraw(); }
  156.   int layout( bool sbVisible, bool doScrollTo, int *measure = 0 );
  157.   const Fl_Widget *scrollTo;
  158.   int _offset[2], _spacing[2], _type;
  159. };
  160. #endif