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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: status_bar.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:52:25  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.5
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_WIDGETS_FL___STATUS_BAR__HPP
  10. #define GUI_WIDGETS_FL___STATUS_BAR__HPP
  11. /*  $Id: status_bar.hpp,v 1000.2 2004/06/01 19:52:25 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:  Mike DiCuccio, Andrey Yazhuk
  37.  *
  38.  * File Description:
  39.  *
  40.  */
  41. #include <corelib/ncbistd.hpp>
  42. #include <corelib/ncbimtx.hpp>
  43. #include <gui/gui.hpp>
  44. #include <gui/utils/reporter.hpp>
  45. #include <gui/widgets/fl/resource_manager.hpp>
  46. #include <FL/Fl_Group.H>
  47. /** @addtogroup GUI_FltkWidgets
  48.  *
  49.  * @{
  50.  */
  51. BEGIN_NCBI_SCOPE
  52. class NCBI_GUIWIDGETS_FL_EXPORT ISBSlot
  53. {
  54. public:
  55.     enum    EStyles    {
  56.         fCenterText = 0x1,
  57.         fUpBox = 0x2,
  58.         fDownBox = 0x4,
  59.         fResizable = 0x8,
  60.     };
  61.     virtual ~ISBSlot()  {};
  62.     virtual void    SetStyles(int styles) = 0; /// combination of EStyles 
  63.     virtual int     GetStyles() const = 0;
  64.     virtual void    SetText(const string& text) = 0;
  65.     virtual string  GetText() const = 0;
  66.     virtual void    SetImage(CFLTKImageHandle image) = 0;
  67.     virtual CFLTKImageHandle     GetImage() = 0;
  68. };
  69. ////////////////////////////////////////////////////////////////////////////////
  70. /// CStatusBar1
  71. /// Slots have fixed size
  72. class NCBI_GUIWIDGETS_FL_EXPORT CStatusBar1  :   public Fl_Group
  73. {
  74. public:
  75.     typedef int TSlotHandle;
  76.     
  77.     CStatusBar1(int x, int y, int w, int h);
  78.     virtual ~CStatusBar1();
  79.     virtual TSlotHandle CreateSlot(int width = 0); /// creates standard slot
  80.     virtual TSlotHandle CreateSlot(ISBSlot* slot, int width = 0); /// installs given slot 
  81.     virtual bool    RemoveSlot(TSlotHandle handle); /// removes and destroys slot
  82.     
  83.     virtual void    SetSlotStyles(TSlotHandle handle, int styles);
  84.     virtual int     GetSlotStyles(TSlotHandle handle);
  85.     
  86.     virtual ISBSlot*    GetSlot(TSlotHandle handle);
  87.     virtual const ISBSlot*    GetSlot(TSlotHandle handle) const;
  88.     virtual void    SetSlotText(TSlotHandle handle, const string& text);
  89.     virtual string  GetSlotText(TSlotHandle handle) const;
  90.     virtual void    SetSlotTooltip(TSlotHandle handle, const string& tooltip);
  91.     virtual string  GetSlotTooltip(TSlotHandle handle) const;
  92.     virtual void    SetSlotImage(TSlotHandle handle, CFLTKImageHandle image);
  93.     virtual CFLTKImageHandle     GetSlotImage(TSlotHandle handle);
  94.     
  95.     virtual void    SetSlotWidth(TSlotHandle handle,int width);
  96.     virtual int     GetSlotWidth(TSlotHandle handle) const;
  97.     virtual void    ReLayout();
  98.     /// @name FLTK overridables
  99.     /// @{
  100.     virtual void    draw();
  101.     virtual void    resize(int x, int y, int w, int h);
  102.     /// @}
  103. protected:
  104.     virtual void    x_Layout();
  105.     
  106. protected:
  107.     typedef map<TSlotHandle, ISBSlot*>  THandleToSlotMap;
  108.     typedef map<TSlotHandle, int>       THandleToWidthMap;
  109.     THandleToSlotMap    m_HandleToSlot;
  110.     THandleToWidthMap   m_HandleToWidth;
  111.     TSlotHandle m_LastHandle;
  112. };
  113. ////////////////////////////////////////////////////////////////////////////////
  114. /// CSBSlot
  115. class NCBI_GUIWIDGETS_FL_EXPORT CSBSlot  :  public Fl_Group,
  116.                                             public ISBSlot    
  117. {
  118. public:
  119.     CSBSlot();
  120.     /// @name ISBSlot implementation
  121.     /// @{
  122.     virtual void    SetStyles(int styles);
  123.     virtual int     GetStyles() const;
  124.     virtual void    SetText(const string& text);
  125.     virtual string  GetText() const;
  126.     virtual void    SetImage(CFLTKImageHandle image);
  127.     virtual CFLTKImageHandle     GetImage();
  128.     /// @}
  129.     virtual void    draw();
  130.    //virtual int handle(int);
  131. protected:
  132.     virtual void    x_Draw();
  133.     virtual void    x_DrawBackground();
  134.     virtual void    x_DrawContent();
  135.     
  136. protected:
  137.     int     m_Styles;
  138.     string  m_Text;
  139.     CFLTKImageHandle m_Image;    
  140. };
  141. ////////////////////////////////////////////////////////////////////////////////
  142. /// CStatusBar
  143. class NCBI_GUIWIDGETS_FL_EXPORT CStatusBar
  144.     : public Fl_Group, public IReporter
  145. {
  146. public:
  147.     CStatusBar(int x, int y, int w, int h, const char* label = NULL);
  148.     const char* label(void) const;
  149.     void label(const char* label);
  150.     // set the current message in the status bar
  151.     void SetMessage(const string& msg);
  152.     // requirement of the reporter interface - null operation
  153.     void SetPctCompleted(int pct) { }
  154.     // requirement of the reporter interface - clear message stack
  155.     void Clear(void);
  156.     // push a message onto the status stack
  157.     void PushMessage(const string& msg);
  158.     // pop a message from the stack
  159.     string PopMessage(void);
  160. protected:
  161.     CFastMutex m_Mutex;
  162.     // our message stack
  163.     vector<string> m_MsgStack;
  164. };
  165. class NCBI_GUIWIDGETS_FL_EXPORT CStatusBarGuard
  166. {
  167. public:
  168.     CStatusBarGuard(CStatusBar& bar, const string& msg);
  169.     ~CStatusBarGuard();
  170. private:
  171.     CStatusBar& m_Bar;
  172. };
  173. END_NCBI_SCOPE
  174. /* @} */
  175. /*
  176.  * ===========================================================================
  177.  * $Log: status_bar.hpp,v $
  178.  * Revision 1000.2  2004/06/01 19:52:25  gouriano
  179.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.5
  180.  *
  181.  * Revision 1.5  2004/05/13 17:22:17  yazhuk
  182.  * Added ISBSlot, CSBSlot and CStatusBar1 classes
  183.  *
  184.  * Revision 1.4  2004/05/11 18:55:14  dicuccio
  185.  * Added doxygen modules info
  186.  *
  187.  * Revision 1.3  2004/05/03 12:47:08  dicuccio
  188.  * Added #include for gui/gui.hpp.  gui/utils ->gui/objutils where needed.
  189.  *
  190.  * Revision 1.2  2004/04/14 20:57:22  johnson
  191.  * added Clear() to IReporter interface
  192.  *
  193.  * Revision 1.1  2003/12/04 18:08:39  dicuccio
  194.  * Initial revision
  195.  *
  196.  * ===========================================================================
  197.  */
  198. #endif  // GUI_WIDGETS_FL___STATUS_BAR__HPP