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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: hit_matrix_pane.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/04/12 18:16:49  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.5
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef __GUI_WIDGETS_HIT_MATRIX___HIT_MATRIX_PANE__HPP
  10. #define __GUI_WIDGETS_HIT_MATRIX___HIT_MATRIX_PANE__HPP
  11. /*  $Id: hit_matrix_pane.hpp,v 1000.2 2004/04/12 18:16: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:  Andrey Yazhuk
  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/hit_matrix/hit_matrix_ds.hpp>
  50. #include <gui/widgets/hit_matrix/hit_matrix_graph.hpp>
  51. #include <gui/widgets/hit_matrix/seq_graph.hpp>
  52. BEGIN_NCBI_SCOPE
  53. class CHitMatrixWidget;
  54. ////////////////////////////////////////////////////////////////////////////////
  55. /// class CHitMatrixPane 
  56. class NCBI_GUIWIDGETS_HIT_MATRIX_EXPORT  CHitMatrixPane 
  57.                         : public CGlPaneWidgetChild,
  58.                           public IMouseZoomHandlerHost,
  59.                           public IHitMatrixGraphHost,
  60.                           public ISelHandlerHost
  61. {
  62. public:    
  63.     typedef CHitMatrixGraph::TElemGlyphSet  TElemGlyphSet;
  64.     typedef CLinearSelHandler::TRangeColl   TRangeColl;
  65.     CHitMatrixPane(int PosX, int PosY, int Width, int Height, const char* Label = NULL);
  66.     virtual TVPPoint GetPortSize(void);
  67.     void    SetWidget(CHitMatrixWidget* pParent);
  68.     
  69.     // FLTK overridables
  70.     virtual void resize(int x, int y, int w, int h);
  71.     // interface for a Widget
  72.     virtual void    Update(void);
  73.     
  74.     void    ColorByScore(CConstRef<CObject_id> score_id);
  75.     CConstRef<CObject_id>   GetScoreId()    const   {   return m_ColorScoreId;  }
  76.     CConstRef<CSeq_align_set>   GetSelectedHits() const;
  77.     TModelRect              GetSelectedHitElemsRect() const;
  78.     const   TRangeColl&     GetSubjectSelection() const;
  79.     const   TRangeColl&     GetQuerySelection() const;
  80.     // IMouseZoomHandlerHost implementation
  81.     virtual TModelUnit  MZHH_GetScale(EScaleType type);
  82.     virtual void        MZHH_SetScale(TModelUnit scale, const TModelPoint& point);
  83.     virtual void        MZHH_ZoomRect(const TModelRect& rc);
  84.     virtual void        MZHH_Scroll(TModelUnit d_x, TModelUnit d_y);
  85.     virtual TVPUnit     MZHH_GetVPPosByY(int y) const;
  86.     virtual void        MZHH_Redraw(void);
  87.     // IMouseZoomHandlerHost end
  88.     virtual void     HMGH_Redraw(void);
  89.     virtual TVPUnit  HMGH_GetVPPosByY(int y) const;
  90.     // ISelHandlerHost implementation
  91.     virtual void        SHH_Redraw();
  92.     virtual TModelUnit  SHH_GetModelByWindow(int z, EOrientation orient);
  93.     virtual TVPUnit     SHH_GetWindowByModel(TModelUnit z, EOrientation orient);
  94.     // ISelHandlerHost end
  95. protected:
  96.     void    x_SetupAxes();    
  97.     
  98.     /// CGlPaneWidgetChild overridables
  99.     virtual void    x_Render(void);        
  100.     virtual void    x_OnShowPopup();  
  101.     CHitMatrixWidget*       x_GetParent()    {   return m_pParent;   }
  102.     const CHitMatrixWidget* x_GetParent()  const    {   return m_pParent;   }
  103.     void    x_Layout(void);
  104.     // Rendering functions
  105.     void    x_RenderContent(void);
  106.     void    x_RenderAxisAndGrid(CGlPane& gr_pane);
  107.     void    x_RenderSeqPanes();
  108.     void    x_RenderMouseZoomHandler(CGlPane& pane);
  109.     void    x_RenderSelHandler(bool b_horz, CGlPane& pane, CLinearSelHandler::ERenderingOption option);
  110.   
  111.     /// adjusts limits and visible rect of the given pane to the master pane
  112.     void    x_AdjsutToMasterPane(CGlPane& pane, bool b_model_x, bool b_model_y);
  113.     virtual int     x_GetAreaByMousePos();
  114. protected:
  115.     enum EHandlerArea   {
  116.         fMatrixArea =   0x1,
  117.         fSubjectArea =  0x2,
  118.         fQueryArea =    0x4,
  119.         fOther = 0x80000000,
  120.         fAllAreas = fMatrixArea | fSubjectArea | fQueryArea | fOther
  121.     }; 
  122.     CHitMatrixWidget    *m_pParent;
  123.     CGlPane m_MatrixPane;
  124.     CGlPane m_SubjectPane;
  125.     CGlPane m_QueryPane;
  126.     
  127.     /// rectangle in OpenGL coordinates
  128.     TVPRect m_rcMatrix;
  129.     TVPRect m_rcLeftSeq;
  130.     TVPRect m_rcBottomSeq;
  131.     TVPRect m_rcAxes;
  132.     CGlColor m_BackColor;
  133.     CGlBitmapFont   *m_pTextFont;
  134.     CGlBitmapFont   *m_pSeqFont;
  135.     CConstRef<CObject_id>   m_ColorScoreId; // identifies a score to color by
  136.     // event handlers
  137.     CMouseZoomHandler   m_MouseZoomHandler;
  138.     CLinearSelHandler   m_HorzSelHandler;
  139.     CLinearSelHandler   m_VertSelHandler;
  140.     
  141.     // graphical objects
  142.     CRegularGridGen         m_Gen;
  143.     CRegularGridRenderer    m_Grid;    
  144.     
  145.     CRuler  m_BottomRuler;    
  146.     CRuler  m_TopRuler;    
  147.     CRuler  m_LeftRuler;    
  148.     CRuler  m_RightRuler;    
  149.     
  150.     CHitMatrixGraph     m_Graph;
  151.     CSequenceGraph      m_QueryGraph;
  152.     CSequenceGraph      m_SubjectGraph;
  153. };
  154. END_NCBI_SCOPE
  155. /*
  156.  * ===========================================================================
  157.  * $Log: hit_matrix_pane.hpp,v $
  158.  * Revision 1000.2  2004/04/12 18:16:49  gouriano
  159.  * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.5
  160.  *
  161.  * Revision 1.5  2004/02/12 21:04:28  yazhuk
  162.  * Added GetSelectedHitElemsRect() const; implemented  x_OnShowPopup();Implemented
  163.  *
  164.  * Revision 1.4  2003/12/10 16:58:23  yazhuk
  165.  * Updated implementation of  IMouseZoomHandlerHost interface.
  166.  *
  167.  * Revision 1.3  2003/12/05 17:35:07  yazhuk
  168.  * Functions for retrieving selection, support for coloration by score
  169.  *
  170.  * Revision 1.2  2003/12/01 17:07:02  yazhuk
  171.  * Eliminated IHitMatrixParent; refactored event handling; added support for linear selection.
  172.  *
  173.  * Revision 1.1  2003/11/17 21:00:14  yazhuk
  174.  * Initial revision
  175.  *
  176.  * ===========================================================================
  177.  */
  178. #endif  // __GUI_WIDGETS_HIT_MATRIX___HIT_MATRIX_PANE__HPP