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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: glpane_widget.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/04/12 18:16:25  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.4
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_WIDGETS_GL___GLPANE_WIDGET__HPP
  10. #define GUI_WIDGETS_GL___GLPANE_WIDGET__HPP
  11. /*  $Id: glpane_widget.hpp,v 1000.2 2004/04/12 18:16: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:  Andrey Yazhuk
  37.  *
  38.  * File Description:
  39.  *  
  40.  */
  41. #include <corelib/ncbiobj.hpp>
  42. #include <gui/opengl/glcanvas2d.hpp>
  43. #include <gui/opengl/gldlist.hpp>
  44. #include <gui/opengl/glviewport.hpp>
  45. #include <gui/opengl/glpane.hpp>
  46. #include <gui/utils/command.hpp>
  47. #include <gui/utils/fltk_utils.hpp>
  48. #include <gui/widgets/gl/ievent_handler.hpp>
  49. #include <gui/utils/view_event.hpp>
  50. #include <util/ievent_receiver.hpp>
  51. #include <util/ievent_transmitter.hpp>
  52. #include <FL/Fl_Group.H>
  53. #include <FL/Fl_Scrollbar.H>
  54. BEGIN_NCBI_SCOPE
  55. /// CGlPaneWidgetChild represent a window component residing in CGlPaneWidget
  56. /// client area.
  57. class NCBI_GUIWIDGETS_GL_EXPORT CGlPaneWidgetChild  
  58.                                 : public CGlCanvas2d                                  
  59. {
  60. public:
  61.     CGlPaneWidgetChild(int x, int y, int w, int h, const char* label = NULL);
  62.     virtual ~CGlPaneWidgetChild();
  63.     /// retruns size of the master pane in screen coordinates
  64.     virtual TVPPoint GetPortSize(void) = 0;
  65.     // FLTK overridables
  66.     //virtual void resize(int x, int y, int w, int h);
  67.     virtual int  handle(int event);
  68.     virtual void draw();   
  69. protected:
  70.     virtual void    x_Render(void) = 0;
  71.     virtual int     x_HandleKeyEvent();
  72.     virtual int     x_HandleMouseMove();
  73.     virtual int     x_HandleMousePush();
  74.     virtual int     x_HandleMouseDrag();
  75.     virtual int     x_HandleMouseRelease();
  76.     virtual int     x_HandleMouseWheel();
  77.     virtual int     x_GetAreaByMousePos();
  78.     virtual void    x_OnShowPopup() = 0;
  79.     /// IEventHandler management
  80.     struct  SHandlerRec 
  81.     {
  82.         IEventHandler* m_pHandler;
  83.         int         m_Area;
  84.         CGlPane*    m_pPane;
  85.     };
  86.     bool    x_RegisterHandler(IEventHandler* handler, int area, CGlPane* pane);
  87.     bool    x_UnregisterHandler(IEventHandler* handler);
  88.     void    x_SetCurrHandler(SHandlerRec* rec);
  89.     
  90.     /// iterates through registered handlers until event is hdnaled (handler 
  91.     /// returned true)
  92.     int     x_Handlers_handle(CGUIEvent& event, int area, bool ignore_curr = true);
  93.    
  94. protected:    
  95.     CGUIEvent  m_Event;
  96.     typedef list<SHandlerRec>    THandlerRecList;
  97.     /// list of records for registered handlers
  98.     THandlerRecList    m_lsHandlerRecs;
  99.     
  100.     /// pointer to record for last active handler
  101.     SHandlerRec*       m_pCurrHandlerRec; 
  102. };
  103. ////////////////////////////////////////////////////////////////////////////////
  104. /// class CGlPaneWidget
  105. class NCBI_GUIWIDGETS_GL_EXPORT CGlPaneWidget
  106.                                 : public Fl_Group,
  107.                                   public CCommandTarget,
  108.                                   public IEventTransmitter,
  109.                                   public IEventReceiver
  110. {
  111. public:
  112.     CGlPaneWidget(int x, int y, int w, int h, const char* label = NULL);
  113.     virtual ~CGlPaneWidget();
  114.     
  115.     /// creates controls and performs basic initialization
  116.     virtual void    Create(void);
  117.     
  118.     // Fl_Widget overridables
  119.     virtual void resize(int x, int y, int w, int h);
  120.         
  121.     
  122.     // Zoom command handlers
  123.     virtual void    OnZoomIn(void);
  124.     virtual void    OnZoomInX(void);
  125.     virtual void    OnZoomInY(void);
  126.     virtual void    OnZoomOut(void);
  127.     virtual void    OnZoomOutX(void);
  128.     virtual void    OnZoomOutY(void);
  129.     virtual void    OnZoomAll(void);
  130.     virtual void    OnZoomAllX(void);
  131.     virtual void    OnZoomAllY(void);
  132.     
  133.     // add SetScale function
  134.     virtual void    ZoomRect(const TModelRect&  rc);
  135.     virtual void    Scroll(TModelUnit d_x, TModelUnit d_y);
  136.     // add Scroll functions    
  137.     virtual void    OnShowPopup() = 0;
  138.   
  139.      // Default events handler - reports unhandled event   
  140.     void OnAllEvents(CViewEvent::TEventObject evt);
  141.     // Events map - all events to default handler
  142.     EVENT_MAP_RX_BEGIN_INT
  143.         EVENT_ACCEPT_ALL(OnAllEvents)
  144.     EVENT_MAP_RX_END
  145.     // IViewEventTransmitter
  146.     EVENT_MAP_TX_BEGIN
  147.         EVENT_FIRE_ALL()
  148.     EVENT_MAP_TX_END
  149.     DECLARE_CMD_MAP();
  150. protected:  
  151.     /// creates Pane, Scrollbars and other child widgets, called from Create()  
  152.     virtual void    x_CreateControls(void);
  153.     
  154.     /// factory method creating master pane, called form x_CreateControls()
  155.     virtual void    x_CreatePane(void) = 0;   
  156.     virtual CGlPaneWidgetChild*    x_GetPane() = 0;
  157.     
  158.     /// return reference to the Master instance of CGlPane
  159.     virtual const CGlPane&  x_GetPort(void) const; 
  160.             
  161.     virtual void    x_RedrawControls(void);
  162.     virtual void    x_Update(); //### introduce Update levels
  163.         
  164.     /// updates model limits of the Master CGlPane
  165.     virtual void    x_SetPortLimits(void) = 0;
  166.     
  167.     /// Zoom functions
  168.     
  169.     void    x_ZoomIn(int options);
  170.     void    x_ZoomOut(int options);
  171.     void    x_ZoomAll(int options);
  172.     void    x_UpdateOnZoom(void);
  173.     //void    x_UpdatePanes(); // ???
  174.     
  175.     //void    x_RedrawControls(); // ???
  176.     void    x_OnResize(void);  // ### rename to Update, merge with Update  
  177.     virtual void    x_UpdateScrollbars(void) = 0;
  178.     virtual void    x_OnScrollX(void) = 0;
  179.     virtual void    x_OnScrollY(void) = 0;
  180.     /// scrollbar callback
  181.     static void x_OnScrollX(Fl_Widget*, void* pData);
  182.     /// scrollbar callback
  183.     static void x_OnScrollY(Fl_Widget*, void* pData);
  184.     
  185.     /* add various functions here
  186.     void    x_ZoomToRange(TSeqPos from, TSeqPos to);
  187.     
  188.     //make version that takes doubles, make vertical version (move to GLPane?)
  189.     void    x_MakeVisibleHorz(TSeqPos pos);
  190.     void    x_MakeVisibleHorz(TSeqPos from, TSeqPos to);
  191.     */
  192. protected:
  193.     CGlPane  m_Port;
  194.     
  195.     Fl_Scrollbar *m_pScrollX;
  196.     Fl_Scrollbar *m_pScrollY;
  197. };
  198. END_NCBI_SCOPE
  199. #endif  // GUI_WIDGETS_GL___GLPANE_WIDGET__HPP
  200. /*
  201.  * ===========================================================================
  202.  * $Log: glpane_widget.hpp,v $
  203.  * Revision 1000.2  2004/04/12 18:16:25  gouriano
  204.  * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.4
  205.  *
  206.  * Revision 1.4  2004/03/30 17:10:21  tereshko
  207.  * Added support for events broadcasting
  208.  *
  209.  * Revision 1.3  2004/02/12 20:59:38  yazhuk
  210.  * Added OnShowPopup() to CGlPaneWidgetx_OnShowPopup(), x_HandleMouseRelease()
  211.  * to CGlPaneWidgetChild.
  212.  *
  213.  * Revision 1.2  2003/12/01 16:38:49  yazhuk
  214.  * Refactored event handling - introduced CGUIEvent
  215.  *
  216.  * Revision 1.1  2003/11/17 20:23:48  yazhuk
  217.  * Initial revision
  218.  *
  219.  * ===========================================================================
  220.  */