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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: phylo_tree_pane.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/02 20:23:49  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef __GUI_WIDGETS_PHYLO_TREE___PHYLO_TREE_PANE__HPP
  10. #define __GUI_WIDGETS_PHYLO_TREE___PHYLO_TREE_PANE__HPP
  11. /*  $Id: phylo_tree_pane.hpp,v 1000.2 2004/06/02 20:23:49 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:  Vladimir Tereshkov
  37.  *
  38.  * File Description:
  39.  *
  40.  */
  41. #include <corelib/ncbistl.hpp>
  42. #include <gui/opengl/glcanvas2d.hpp>
  43. #include <gui/graph/axis.hpp>
  44. #include <gui/widgets/gl/ruler.hpp>
  45. #include <gui/widgets/gl/glpane_widget.hpp>
  46. #include <gui/widgets/gl/mouse_zoom_handler.hpp>
  47. #include <gui/widgets/gl/linear_sel_handler.hpp>
  48. #include <gui/widgets/gl/ruler.hpp>
  49. #include <gui/widgets/phylo_tree/phylo_tree_ds.hpp>
  50. #include <gui/widgets/phylo_tree/phylo_tree_pane.hpp>
  51. #include <gui/widgets/phylo_tree/phylo_tree_render.hpp>
  52. #include <gui/widgets/phylo_tree/phylo_tree_rect_cladogram.hpp>
  53. #include <gui/widgets/phylo_tree/phylo_tree_slated_cladogram.hpp>
  54. #include <gui/widgets/phylo_tree/phylo_tree_radial.hpp>
  55. #include <gui/widgets/phylo_tree/phylo_tree_force.hpp>
  56. #include <gui/widgets/fl/tooltip.hpp>
  57. #include <gui/utils/view_event.hpp>
  58. BEGIN_NCBI_SCOPE
  59. class CPhyloTreeWidget;
  60. ////////////////////////////////////////////////////////////////////////////////
  61. /// class CPhyloTreePane 
  62. class NCBI_GUIWIDGETS_PHYLO_TREE_EXPORT  CPhyloTreePane 
  63.                         : public CGlPaneWidgetChild,
  64.                           public IMouseZoomHandlerHost,
  65.                           public ISelHandlerHost,
  66.                           public IPhyloTreeRendererHost,
  67.                           public ITooltipClient
  68. {
  69. public:    
  70.     typedef CLinearSelHandler::TRangeColl   TRangeColl;
  71.     typedef vector<IPhyloTreeRenderer*>     TRenderers;
  72.     CPhyloTreePane(int PosX, int PosY, int Width, int Height, const char* Label = NULL);
  73.     virtual TVPPoint GetPortSize(void);
  74.     void             SetWidget(CPhyloTreeWidget* pParent);
  75.     
  76.     TRenderers &        GetRenderers(void)              { return m_Renderers; }
  77.     Int4                GetCurrRendererIdx(void)        { return m_CurrRenderer; }
  78.     IPhyloTreeRenderer* GetCurrRenderer(void)           { return m_Renderers[m_CurrRenderer]; }
  79.     void                SetCurrRendererIdx(Int4 idx);
  80.     void                AddRenderer(IPhyloTreeRenderer * renderer);
  81.     //selections
  82.     const vector<int> & GetSelectedIDs(void)                       {return GetCurrRenderer()->GetSelectedIDs(); }
  83.     void                SetSelectedIDs(const vector<int> & vect)   {GetCurrRenderer()->SetSelectedIDs(vect);    }
  84.     
  85.     
  86.     // FLTK overridables
  87.     virtual void resize(int x, int y, int w, int h);
  88.     // interface for a Widget
  89.     virtual void    Update(void);
  90.     virtual int     handle(int event);
  91.         
  92.     const   TRangeColl&     GetSubjectSelection() const;
  93.     const   TRangeColl&     GetQuerySelection() const;
  94.     // IMouseZoomHandlerHost implementation
  95.     virtual TModelUnit  MZHH_GetScale(EScaleType type);
  96.     virtual void        MZHH_SetScale(TModelUnit scale, const TModelPoint& point);
  97.     virtual void        MZHH_ZoomRect(const TModelRect& rc);
  98.     virtual void        MZHH_Scroll(TModelUnit d_x, TModelUnit d_y);
  99.     virtual TVPUnit     MZHH_GetVPPosByY(int y) const;
  100.     virtual void        MZHH_Redraw(void);
  101.     // IMouseZoomHandlerHost end
  102.     virtual void     HMGH_Redraw(void);
  103.     virtual TVPUnit  HMGH_GetVPPosByY(int y) const;
  104.     virtual void     FireCBEvent(void);
  105.     // ISelHandlerHost implementation
  106.     virtual void        SHH_Redraw();
  107.     virtual TModelUnit  SHH_GetModelByWindow(int z, EOrientation orient);
  108.     virtual TVPUnit     SHH_GetWindowByModel(TModelUnit z, EOrientation orient);
  109.     // ISelHandlerHost end
  110.     // ITooltipClient implementation
  111.     virtual bool    TC_NeedTooltip(int x, int y);    
  112.     virtual string  TC_GetTooltip(int& x, int& y, int& w, int& h);
  113.     
  114. protected:
  115.     Int4        m_CurrRenderer;
  116.     TRenderers  m_Renderers;    
  117.     void    x_SetupAxes();    
  118.     
  119.     /// CGlPaneWidgetChild overridables
  120.     virtual void    x_Render(void);  
  121.     virtual void    x_OnShowPopup();  
  122.     virtual int     x_HandleMouseRelease();    
  123.   
  124. public:
  125.     CPhyloTreeWidget*       x_GetParent()    {   return m_pParent;   }
  126.     const CPhyloTreeWidget* x_GetParent()  const    {   return m_pParent;   }
  127. protected:
  128.     void    x_Layout(void);
  129.     // Rendering functions
  130.     void    x_RenderContent(void);
  131.     void    x_RenderAxisAndGrid(CGlPane& gr_pane);
  132.     void    x_RenderSeqPanes();
  133.     void    x_RenderMouseZoomHandler(CGlPane& pane);
  134.     void    x_RenderSelHandler(bool b_horz, CGlPane& pane, CLinearSelHandler::ERenderingOption option);
  135.   
  136.     /// adjusts limits and visible rect of the given pane to the master pane
  137.     void    x_AdjsutToMasterPane(CGlPane& pane, bool b_model_x, bool b_model_y);
  138.     virtual int     x_GetAreaByMousePos();
  139. protected:
  140.     enum EHandlerArea   {
  141.         fMatrixArea =   0x1,
  142.         fSubjectArea =  0x2,
  143.         fQueryArea =    0x4,
  144.         fOther = 0x80000000,
  145.         fAllAreas = fMatrixArea | fSubjectArea | fQueryArea | fOther
  146.     }; 
  147.     CPhyloTreeWidget    *m_pParent;
  148.     CGlPane m_MatrixPane;    
  149.     
  150.     /// rectangle in OpenGL coordinates
  151.     TVPRect m_rcMatrix;
  152.     TVPRect m_rcLeftSeq;
  153.     TVPRect m_rcBottomSeq;
  154.     TVPRect m_rcAxes;
  155.     CGlColor m_BackColor;
  156.     CGlBitmapFont   *m_pTextFont;
  157.     CGlBitmapFont   *m_pLblFont;
  158.     // event handlers
  159.     CMouseZoomHandler   m_MouseZoomHandler;
  160.     CLinearSelHandler   m_HorzSelHandler;
  161.     CLinearSelHandler   m_VertSelHandler;
  162.     
  163.     // graphical objects
  164.     CRegularGridGen         m_Gen;
  165.     CRegularGridRenderer    m_Grid;    
  166.     
  167.     CRuler      m_BottomRuler;    
  168.     CRuler      m_TopRuler;    
  169.     CRuler      m_LeftRuler;    
  170.     CRuler      m_RightRuler;       
  171.     CTooltip    m_Tooltip;
  172. };
  173. END_NCBI_SCOPE
  174. /*
  175.  * ===========================================================================
  176.  * $Log: phylo_tree_pane.hpp,v $
  177.  * Revision 1000.2  2004/06/02 20:23:49  gouriano
  178.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9
  179.  *
  180.  * Revision 1.9  2004/06/02 16:38:59  tereshko
  181.  * Fixed selections and popup behavior under windows
  182.  *
  183.  * Revision 1.8  2004/05/06 19:41:07  tereshko
  184.  * Added force layout
  185.  *
  186.  * Revision 1.7  2004/04/13 20:29:22  tereshko
  187.  * Numerous renderers improvements
  188.  *
  189.  * Revision 1.6  2004/03/30 17:11:08  tereshko
  190.  * Added support for events broadcasting
  191.  *
  192.  * Revision 1.5  2004/03/03 21:42:31  tereshko
  193.  * Added tooltips support
  194.  *
  195.  * Revision 1.4  2004/03/02 18:29:24  tereshko
  196.  * Added radial tree layout
  197.  *
  198.  * Revision 1.3  2004/02/17 23:44:17  tereshko
  199.  * Changes due to integration into viewer
  200.  *
  201.  * Revision 1.2  2004/02/13 21:18:35  tereshko
  202.  * Updated to implement new interface functions
  203.  *
  204.  * Revision 1.1  2004/02/13 17:00:00  tereshko
  205.  * Phylogenetic Tree Widget initial revision
  206.  *
  207.  * ===========================================================================
  208.  */
  209. #endif  // __GUI_WIDGETS_PHYLO_TREE___PHYLO_TREE_PANE__HPP