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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: tooltip.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:52:39  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef __GUI_WIDGETS_FL___TOOLTIP__HPP
  10. #define __GUI_WIDGETS_FL___TOOLTIP__HPP
  11. /*  $Id: tooltip.hpp,v 1000.1 2004/06/01 19:52:39 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.  *  Tooltips service implementation.  
  40.  */
  41. #include <corelib/ncbistd.hpp>
  42. #include <gui/gui.hpp>
  43. #include <FL/Fl.H>
  44. #include <FL/Fl_Widget.H>
  45. #include <FL/Fl_Menu_Window.H>
  46. /** @addtogroup GUI_FltkWidgets
  47.  *
  48.  * @{
  49.  */
  50. BEGIN_NCBI_SCOPE
  51. class CTooltipWidget;
  52. ////////////////////////////////////////////////////////////////////////////////
  53. /// ITooltipClient - client interface for CTooltip class.
  54. /// This interface is used by "active" CTooltip, it is not required for "passive"
  55. /// mode.  
  56. class NCBI_GUIWIDGETS_FL_EXPORT ITooltipClient
  57. {
  58. public:
  59.     /// returns "true" if client wants to dispaly a tooltip. "x" and "y"  are 
  60.     /// cordinates of the mouse pointer
  61.     virtual bool    TC_NeedTooltip(int x, int y) = 0;  
  62.     
  63.     /// Retruns tooltip string and coordinates for area tootlip associated with.  
  64.     /// Client may choose not modify x, y, w, z, in that case tooltip will be 
  65.     /// associated with current mouse position.
  66.     virtual string  TC_GetTooltip(int& x, int& y, int& w, int& h) = 0;
  67. };
  68. ////////////////////////////////////////////////////////////////////////////////
  69. /// CTooltip - class providing tooltip service.
  70. ///
  71. /// To enable tooltips a client needs to create an instance of CTooltip, set-up it
  72. /// and to pass events to CTooltip::Handle() method.
  73. ///
  74. /// CTooltip can be used in "active" or "passive" manner. "Passive" tooltip is 
  75. /// similar to FLTK-style tooltips, it requires client to handle FL_MOVE events
  76. /// and to activate/deactivate tooltip. "Passive" tooltips does not require client 
  77. /// to implement ITooltipClient interface.
  78. ///
  79. /// "Active" tooltip handles events and activates/deactivates itself when needed.
  80. /// Client for "active" tooltip must implement ITooltipClient interfaces, but does
  81. /// not need to handle any events or perform any calls to CTooltip instance. When 
  82. /// "Active" tooltip needs to perform hit testing or show/hide tooltip window it
  83. /// calls ITooltipClient functions.
  84. class NCBI_GUIWIDGETS_FL_EXPORT CTooltip
  85. {
  86. public:
  87.     /// Tooltip mode - controls behavior of tooltip window. Can be used with both 
  88.     /// "active" and passive" tooltips.
  89.     enum EMode {
  90.         eHideOnMove,  /// if mouse moves tooltip hides and reappears only after delay
  91.         eTrackOnMove, /// if mouse moves tooltip reappears immediatly in a new position
  92.         eStayOnMove   /// if tooltip area and text remain the same - tooltip will remain on screen
  93.         /// and will not move
  94.     };
  95.     CTooltip();
  96.     virtual ~CTooltip();
  97.     /// @name Attributes access
  98.     /// @{
  99.     void    SetMode(EMode mode);
  100.     EMode   GetMode() const;
  101.     
  102.     float   GetDelay()  const;
  103.     void    SetDelay(float f);
  104.     int     IsEnabled()   const;
  105.     void    Enable(bool b_en = true);
  106.     void    Disable();
  107.     int     GetFont()   const;
  108.     void    SetFont(int font);
  109.     
  110.     int     GetFontSize()   const;    
  111.     void    SetFontSize(int size);
  112.     Fl_Color GetColor()  const;
  113.     void    SetColor(Fl_Color color);
  114.     
  115.     Fl_Color  GetTextColor() const;
  116.     void SetTextColor(Fl_Color color);
  117.     
  118.     const string&   GetText()   const;
  119.     /// @}
  120.     Fl_Widget* current();
  121.     /// @name "Passive" tooltip interface.
  122.     /// @{
  123.     /// Activates tooltip for "client" widget and specifis tooltip text. 
  124.     /// Tooltip will be active as long as mouse pointer remains in the rectangle
  125.     /// specified by x, y, w and h (in client's coordinates).
  126.     void    Activate(Fl_Widget* client, const string& text, int x, int y, int w = 1, int h = 1);
  127.     
  128.     /// Deactivates and hides tooltip, if "b_reset" is true then tooltip will reappear
  129.     /// no sooner the after "m_Delay"
  130.     void    Deactivate(bool b_reset = true);    
  131.     /// @}
  132.     /// @name "Active" tooltip interface
  133.     /// @{
  134.     bool    EnableActiveMode(ITooltipClient* client);
  135.     void    DisableActiveMode();
  136.     /// @}    
  137.     /// Event handler - Client needs to pass events to this function.
  138.     int     Handle(int event);
  139.     
  140. protected:
  141.     bool    x_IsTooltipVisible();
  142.     void    x_Activate(Fl_Widget* client, int x, int y, int w, int h, 
  143.                        const string& text);    
  144.     /// callback for timer event showing tooltip
  145.     static void ShowTooltipTimeout(void* ptr);
  146.     /// callback for timer event reseting "recent" flag
  147.     static void ClearRecentTimeout(void* ptr);
  148.     enum    ETooltipCmd    {
  149.         eDoNothing,
  150.         eUpdate,        
  151.         eUpdateAndMove,
  152.         eShowDelayed        
  153.     };
  154.     void    x_UpdateTooltipWidget(ETooltipCmd cmd);
  155.     void    x_AskClientAndUpdate();    
  156. protected:
  157.     bool    m_bActiveMode;
  158.     EMode   m_Mode;
  159.     float   m_Delay; /// delay between last mouse move and the moment tooltip appears
  160.     bool    m_bEnabled;
  161.     
  162.     Fl_Widget*      m_Widget;
  163.     ITooltipClient* m_IClient;
  164.     // attributes
  165.     Fl_Color  m_Color;
  166.     Fl_Color  m_TextColor;
  167.     int   m_Font;
  168.     int   m_FontSize;
  169.     
  170.     string  m_Text;    
  171.     
  172.     int m_X, m_Y, m_W, m_H; /// rectangular area associated with tooltip
  173.     int m_MouseX, m_MouseY;
  174.     CTooltipWidget* m_TooltipWidget;
  175.     bool    m_bRecentTooltip;
  176.     bool    m_bRecursion;
  177. };
  178. ////////////////////////////////////////////////////////////////////////////////
  179. /// CTooltipWidget
  180. /// CTooltipWidget is a widget appearing as a tooltip window. It is automatically 
  181. /// created and managed by CTooltip. Not intended for using directly.
  182. class CTooltipWidget  : public Fl_Menu_Window 
  183. {
  184. public:
  185.     CTooltipWidget(CTooltip* tooltip);
  186.     
  187.     /// Sets tooltip's origin in screen coordinates
  188.     void    SetOrigin(int x, int y);
  189.     virtual void draw();
  190.     virtual void layout();
  191.     virtual void show();
  192.     virtual int     handle(int event);
  193. private:
  194.     CTooltip*   m_Tooltip;    
  195.     int m_OrigX, m_OrigY;
  196. };
  197. END_NCBI_SCOPE
  198. /* @} */
  199. /*
  200.  * ===========================================================================
  201.  * $Log: tooltip.hpp,v $
  202.  * Revision 1000.1  2004/06/01 19:52:39  gouriano
  203.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  204.  *
  205.  * Revision 1.4  2004/05/11 18:55:14  dicuccio
  206.  * Added doxygen modules info
  207.  *
  208.  * Revision 1.3  2004/05/03 12:47:08  dicuccio
  209.  * Added #include for gui/gui.hpp.  gui/utils ->gui/objutils where needed.
  210.  *
  211.  * Revision 1.2  2004/01/08 19:46:49  yazhuk
  212.  * Implemented "active" tooltips; refactored code, added comments
  213.  *
  214.  * Revision 1.1  2003/12/29 21:11:43  yazhuk
  215.  * Initial revision
  216.  *
  217.  * ===========================================================================
  218.  */
  219. #endif