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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: tab_control.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:52:30  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef __GUI_WIDGETS_FL___TAB_CONTROL__HPP
  10. #define __GUI_WIDGETS_FL___TAB_CONTROL__HPP
  11. /*  $Id: tab_control.hpp,v 1000.1 2004/06/01 19:52:30 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software/database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software/database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Authors:  Andrey Yazhuk
  37.  *
  38.  * File Description:
  39.  *
  40.  */
  41. #include <corelib/ncbistl.hpp>
  42. #include <corelib/ncbistd.hpp>
  43. #include <gui/utils/fltk_utils.hpp>
  44. #include <gui/widgets/fl/utils.hpp>
  45. #include <gui/widgets/fl/tooltip.hpp>
  46. #include <FL/Fl_Group.H>
  47. #include <FL/Fl_Scrollbar.H>
  48. #include <algorithm>
  49. /** @addtogroup GUI_FltkWidgets
  50.  *
  51.  * @{
  52.  */
  53. BEGIN_NCBI_SCOPE
  54. ///////////////////////////////////////////////////////////////////////////////
  55. /// CTabControl 
  56. class NCBI_GUIWIDGETS_FL_EXPORT CTabControl : public Fl_Group,
  57.                                               public ITooltipClient
  58. {
  59. public:
  60.     enum    ETabPosition    {
  61.         eBottom
  62.     };
  63.     enum    EResizePolicy   {
  64.         fShrink   = 0x1,   /// Truncate labels if there is not enough space
  65.         fMultiRow   = 0x2, /// place Tabs on multiple rows if there is not enough space
  66.         fExpand     = 0x4, /// expand tabs to occupy all available space in a row        
  67.     };
  68.     CTabControl();
  69.     CTabControl(int x, int y, int w, int h, const char* label = 0);
  70.     virtual ~CTabControl();
  71.     /// takes a cobination of EResizePolicy flags
  72.     virtual void    SetResizePolicies(int policies);
  73.     virtual bool    AddTab(Fl_Widget* pane, const char* label);
  74.     virtual bool    InsertTab(Fl_Widget* pane, int pos, const char* label);
  75.     virtual bool    RemoveTab(Fl_Widget* pane);
  76.     virtual bool    RemoveTab(int index);
  77.     virtual void    RemoveAllTabs();
  78.     
  79.     virtual int     GetTabsCount()  const;
  80.     virtual Fl_Widget*  GetTab(int index);
  81.     
  82.     virtual string  GetTabLabel(int index)  const;
  83.     virtual string  GetTabTooltip(int index)  const;
  84.     virtual void    SetTabLabel(int index, const char* label);
  85.     virtual void    SetTabTooltip(int index, const char* label);
  86.     virtual int     GetSelectedTab() const;
  87.     virtual void    SelectTab(int index);
  88.     /// @name Fl_Group functions
  89.     /// @{
  90.     /* void add(Fl_Widget *w);    
  91.     void add(Fl_Widget&  w);    
  92.     void remove(Fl_Widget &w);*/
  93.     virtual void    draw();
  94.     virtual void    resize(int new_x, int new_y, int new_w, int new_h);
  95.     virtual int     handle(int);
  96.     /// @}
  97.     /// @name ITooltipClient implementation
  98.     /// @{
  99.     virtual bool    TC_NeedTooltip(int x, int y);  
  100.     virtual string  TC_GetTooltip(int& x, int& y, int& w, int& h);
  101.     /// @}
  102. protected:
  103.     void    x_Init();
  104.     struct STabDescr    
  105.     {
  106.         Fl_Widget*  m_pPane;
  107.         string      m_Label;
  108.         string      m_Tooltip;
  109.         int m_x, m_y, m_w, m_h; // local coords
  110.     };
  111.     bool    x_InsertTab(Fl_Widget* pane, int index, const char* label, 
  112.                         const char* tooltip);
  113.     bool    x_RemoveTab(int index);
  114.     void    x_RemoveAllTabs();
  115.     int     x_GetTabsCount()    const   {   return m_vDescrs.size();    }
  116.     Fl_Widget*  x_GetPane(int index);
  117.     STabDescr*  x_GetTab(int index); 
  118.     int     x_GetTabIndex(Fl_Widget* pane)  const;
  119.     void    x_SelectTab(int index);
  120.     STabDescr*   x_GetSelectedTab();
  121.     Fl_Widget*   x_GetSelectedPane();
  122.     void    x_DrawTab(int index);
  123.     void    x_Layout();
  124.     void    x_LayoutTabs();
  125.     int     x_GetTabAreaH() const; 
  126.     int     x_GetTabRowH()  const;
  127.     int     x_MeasureTabWidth(int index);
  128.     void    x_GetClientRect(int& cl_x, int& cl_y, int& cl_w, int& cl_h);
  129.     bool    x_IsIndexValid(int index) const;
  130.     //static void x_OnScrollX(Fl_Widget* pW, void* pData);
  131.     enum    EHitResult  {
  132.         eClient,
  133.         eTab, 
  134.         eEmptySpace,
  135.         eNothing
  136.     };
  137.     EHitResult  x_HitTest(int pos_x, int pos_y, int& i_tab);
  138.     int     x_HandleKeyEvent();
  139.     int     x_HandleMouseMove();
  140.     int     x_HandleMousePush();
  141.     int     x_HandleMouseDrag();
  142.     int     x_HandleMouseRelease();
  143.     virtual void    x_OnShowPopupMenu();    
  144. protected:
  145.    
  146.     typedef vector<STabDescr*>  TDescrVector;
  147.     typedef vector<int>     TRowIndexes; // holds indexes of the tabs in a row
  148.     TDescrVector    m_vDescrs;
  149.     int     m_Selected;
  150.     vector<TRowIndexes> m_vRows;
  151.     
  152.     // tooltip support
  153.     CTooltip    m_Tooltip;
  154.     int         m_iHitTab; /// index of the tab hit by tooltip hit test
  155.     int   m_ResizePolicies;
  156.     int   m_TabAreaH;
  157.     
  158.     CGUIEvent   m_Event;
  159.     //bool        m_bSelfHandled; // "true" if event was handled by component itself, not by its children
  160.     Fl_Color    m_BorderColor;
  161.     Fl_Color    m_ActiveBorderColor;
  162.     Fl_Color    m_BackColor;
  163.     Fl_Color    m_ActiveBackColor;
  164.     Fl_Color    m_TextColor;
  165.     Fl_Color    m_ActiveTextColor;
  166.     
  167.     //Fl_Scrollbar*   m_pScrollbar;
  168. };
  169. END_NCBI_SCOPE
  170. /* @} */
  171. /*
  172.  * ===========================================================================
  173.  * $Log: tab_control.hpp,v $
  174.  * Revision 1000.1  2004/06/01 19:52:30  gouriano
  175.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  176.  *
  177.  * Revision 1.4  2004/05/13 17:19:58  yazhuk
  178.  * Moved fl_draw_text() functions to utils.hpp
  179.  *
  180.  * Revision 1.3  2004/05/11 18:55:14  dicuccio
  181.  * Added doxygen modules info
  182.  *
  183.  * Revision 1.2  2004/02/04 20:26:31  ucko
  184.  * Fix capitalization of fl_draw.H.
  185.  *
  186.  * Revision 1.1  2004/02/04 20:03:15  yazhuk
  187.  * Initial revision
  188.  *
  189.  * ===========================================================================
  190.  */
  191. #endif  // __GUI_WIDGETS_FL___TAB_CONTROL__HPP