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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: hit_matrix_graph.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/04/12 18:16:46  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.4
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef __GUI_WIDGETS_HIT_MATRIX___HIT_MATRIX_GRAPH__HPP
  10. #define __GUI_WIDGETS_HIT_MATRIX___HIT_MATRIX_GRAPH__HPP
  11. /*  $Id: hit_matrix_graph.hpp,v 1000.2 2004/04/12 18:16:46 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/glcolor.hpp>
  43. #include <gui/opengl/glpane.hpp>
  44. #include <gui/widgets/gl/ievent_handler.hpp>
  45. #include <gui/widgets/hit_matrix/hit_data_adapter.hpp>
  46. BEGIN_NCBI_SCOPE
  47. USING_SCOPE(ncbi::objects);
  48. /// CHitElemGlyph is a simple graphical object representing a Hit Element.
  49. ///
  50. class CHitElemGlyph
  51. {
  52. public:    
  53.     enum    ERenderingPass
  54.     {
  55.         eHitElemLines,
  56.         eConnectionLines,
  57.         eProjLines,
  58.         eEndPoints,
  59.         eOther
  60.     };
  61. public:
  62.     CHitElemGlyph();
  63.     CHitElemGlyph(const CHitElemDataAdapter& hit_elem);
  64.     const CHitElemDataAdapter&  GetHitElem()  const {   return m_HitElem;    }
  65.     inline void     SetColorIndex(int index )       {   m_ColorIndex = index;   }
  66.     inline int      GetColorIndex()  const   {   return m_ColorIndex;    }
  67.     
  68.     inline void     SetSelected(bool b_set)    {   m_bSelected = b_set;    }
  69.     inline bool     IsSelected()    const   {   return m_bSelected; }
  70.     void    GetModelRect(TModelRect& rc) const;
  71.     void    Render(CGlPane& pane, ERenderingPass what);
  72.     void    StartVertex();
  73.     void    EndVertex();
  74.     
  75.     /// return shortest distance in pixels  from the given point in viewport
  76.     /// to the graphical representation of the hit on the screen
  77.     double  GetDistPixels(CGlPane& pane, const TVPPoint& pt) const;
  78.     /// returns true if hit is contained by given rectangle (in VP coordinates)
  79.     bool    InRect(CGlPane& pane, const TVPRect& rc) const;
  80. protected:
  81.    CHitElemDataAdapter  m_HitElem;
  82.    int  m_ColorIndex;
  83.    bool m_bSelected;
  84. };
  85. /// CHitGlyph is a simple graphical object representing a Hit as a set of
  86. /// corresponding Hit Elements.
  87. ///
  88. class CHitGlyph
  89. {
  90. public:
  91.     typedef     vector<CHitElemGlyph>   TElemGlyphCont;
  92.     /// c'tor creates child CHitElemGlyph-s
  93.     CHitGlyph(const CHitDataAdapter* p_hit);
  94.     inline  const CHitDataAdapter&    GetHit()    
  95.     {
  96.         return *m_pHit;
  97.     }
  98.     TElemGlyphCont& GetElems();
  99.     void     SetColorIndex(int index);
  100.     void    Render(CGlPane& pane, CHitElemGlyph::ERenderingPass what);
  101. protected:
  102.     const   CHitDataAdapter* m_pHit;
  103.     TElemGlyphCont  m_Elems;
  104. };
  105. class IHitMatrixGraphHost
  106. {
  107. public:
  108.     virtual ~IHitMatrixGraphHost()  {};
  109.     virtual void     HMGH_Redraw(void) = 0;
  110.     virtual TVPUnit  HMGH_GetVPPosByY(int y) const = 0;
  111. };
  112. ///   CHitMatrixGraph
  113. ///  
  114. class CHitMatrixGraph : public IEventHandler
  115. {
  116. public:
  117.     typedef vector<CHitGlyph*>      THitGlyphVector;
  118.     typedef set<CHitElemGlyph*>     TElemGlyphSet;
  119.     
  120.     CHitMatrixGraph();
  121.     ~CHitMatrixGraph();
  122.     void    DeleteGlyphs();
  123.     void    CreateGlyph(const CHitDataAdapter* p_hit_elem);
  124.     
  125.     const   THitGlyphVector&    GetClyphs() const   {   return m_vGlyphs;   }
  126.     const   TElemGlyphSet&      GetSelectedGlyphs() const   {   return m_SelGlyphs; }
  127.     
  128.     void    Render(CGlPane& pane);
  129.     
  130.     // Score
  131.     void    CreateColorTable(int size);
  132.     void    AssignColorsByScore(CConstRef<CObject_id> score_id);
  133.     void    SetHost(IHitMatrixGraphHost* pHost);
  134.     /// IEventHandler implementation
  135.     virtual int handle(CGUIEvent& event, CGlPane& pane);
  136. protected:
  137.     void    x_RenderHits(CGlPane& pane);
  138.     void    x_RenderSelection(CGlPane& pane);
  139.     void    x_RenderPath(CGlPane& pane);
  140.     void    x_RenderEventHandler(CGlPane& pane);
  141.     inline const CGlColor&    x_GetColorByIndex(int index)
  142.     {
  143.         _ASSERT(index < (int) m_vColors.size());
  144.         return index < 0 ? m_DefaultColor : m_vColors[index];
  145.     }
  146.     /// user event handlers - translate event to signals
  147.     int x_OnMousePush(CGUIEvent& event);
  148.     int x_OnMouseDrag(CGUIEvent& event);
  149.     int x_OnMouseRelease(CGUIEvent& event);
  150.     int x_OnMouseMove(void);
  151.     int x_OnKeyDown(void);
  152.     int x_OnKeyUp(void);
  153.     /// event handling state
  154.     enum    EState {
  155.         eIdle,
  156.         eSelPoint, /// selecting a single glyph by point
  157.         eSelRect   /// selecting multiple glyphs by rectangle
  158.     };    
  159.     void    x_OnSelectCursor(void);
  160.     bool    x_SelectByPoint( bool b_inc);
  161.     void    x_SelectByRect( bool b_inc);
  162.    
  163. protected:
  164.     typedef list<CHitElemGlyph*>    TPath;
  165.     typedef list<TPath>             TPathCont;
  166.     
  167.     THitGlyphVector     m_vGlyphs; /// primary storage for glyphs
  168.     TElemGlyphSet       m_SelGlyphs; /// set of selected Glyphs (hit elements)
  169.     TPathCont           m_Paths;
  170.     
  171.     /// rendering state    
  172.     int m_CurrColorIndex;
  173.     vector<CGlColor>    m_vColors;
  174.     CGlColor            m_DefaultColor;
  175.     CGlColor            m_SelColor;
  176.     CGlColor            m_HighLightColor;
  177.     CGlColor            m_PathColor;
  178.     CGlColor            m_ProjLinesColor;
  179.     CGlColor            m_ProjBackColor;
  180.     /// event handling
  181.     IHitMatrixGraphHost *m_pHost;
  182.     CGlPane     *m_pPane;
  183.     EState      m_State;
  184.     TVPPoint    m_StartPoint;
  185.     TVPPoint    m_DragPoint;
  186.     Fl_Cursor   m_Cursor;
  187. };
  188. END_NCBI_SCOPE
  189. /*
  190.  * ===========================================================================
  191.  * $Log: hit_matrix_graph.hpp,v $
  192.  * Revision 1000.2  2004/04/12 18:16:46  gouriano
  193.  * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.4
  194.  *
  195.  * Revision 1.4  2003/12/05 17:43:54  yazhuk
  196.  * Added function for retrieving selection, modified AssignColorByScore()
  197.  *
  198.  * Revision 1.3  2003/12/01 17:08:20  yazhuk
  199.  * Redesigned classes in accordance with the new data model.
  200.  *
  201.  * Revision 1.2  2003/11/18 17:56:06  yazhuk
  202.  * Fixed GCC warnings
  203.  *
  204.  * Revision 1.1  2003/11/17 21:00:14  yazhuk
  205.  * Initial revision
  206.  *
  207.  * ===========================================================================
  208.  */
  209. #endif  // __GUI_WIDGETS_HIT_MATRIX___HIT_MATRIX_GRAPH__HPP