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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: align_row.hpp,v $
  4.  * PRODUCTION Revision 1000.4  2004/04/12 18:15:43  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.27
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef __GUI_WIDGETS_ALNMULTI___ALIGN_ROW__HPP
  10. #define __GUI_WIDGETS_ALNMULTI___ALIGN_ROW__HPP
  11. /*  $Id: align_row.hpp,v 1000.4 2004/04/12 18:15:43 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 <gui/opengl/gldlist.hpp>
  42. #include <gui/widgets/aln_multiple/ialign_row.hpp>
  43. #include <gui/widgets/aln_multiple/attr_range_coll.hpp>
  44. #include <gui/widgets/aln_multiple/alnvec_row_handle.hpp>
  45. BEGIN_NCBI_SCOPE
  46. class CScoreCache;
  47. class IAlnVecRowGraph;
  48. class IAlnRowGraphProperties;
  49. ////////////////////////////////////////////////////////////////////////////////
  50. /// CAlnVecRowDisplayStyle - extension of CRowDisplayStyle for CAlnVecRow.
  51. ///
  52. class  NCBI_GUIWIDGETS_ALNMULTIPLE_EXPORT  CAlnVecRowDisplayStyle 
  53.       : public CRowDisplayStyle
  54. {
  55. public:
  56.     CAlnVecRowDisplayStyle()
  57.     :   m_AlignTextColor(0.0f, 0.0f, 0.0f),
  58.         m_AlignColor(0.8f, 0.8f, 0.8f)
  59.     {
  60.     }
  61.     
  62.     virtual const CGlColor& GetAlignTextColor() const;
  63.     virtual const CGlColor& GetAlignColor() const;
  64. protected:
  65.     CGlColor    m_AlignTextColor; /// sequence color
  66.     CGlColor    m_AlignColor; /// background color for aligned segments
  67. };
  68. ////////////////////////////////////////////////////////////////////////////////
  69. /// class CAlnVecRow - implementation of IAlignRow for CAlnVec-based alignments.
  70. /// CAlnVecRow uses CAlnVecRowHandle as proxy for accesing data in CAlnVec.
  71. class NCBI_GUIWIDGETS_ALNMULTIPLE_EXPORT CAlnVecRow : public IAlignRow
  72. {
  73. public:
  74.     CAlnVecRow(const CAlnVecRowHandle& handle);
  75.     ~CAlnVecRow();
  76.     /// @name IAlignRow implementation
  77.     /// @{
  78.     virtual void    SetHost(IAlignRowHost* host);    
  79.     virtual void    SetDisplayStyle(const CRowDisplayStyle* style);
  80.     virtual const CRowDisplayStyle*    GetDisplayStyle();
  81.     virtual int     GetRowNum() const;
  82.     virtual int     GetHeightPixels() const;        
  83.     virtual void    RenderColumn(EColumnType  col_type, CGlPane& pane, int state); 
  84.     
  85.     virtual int     handle(CGUIEvent& event, EColumnType  col_type, CGlPane& pane);   
  86.     
  87.     virtual string  GetTooltip(EColumnType col_type, CGlPane& pane);
  88.     
  89.     virtual void    GraphicsCacheCmd(EGraphCacheCmd cmd); 
  90.     virtual void    GetHTMLActiveAreas(EColumnType col_type, CGlPane& pane, TAreaVector& areas);
  91.     /// @}
  92.     void    SetScoreCache(CScoreCache* cache);
  93.     virtual bool    IsExpandable() const;
  94.     virtual bool    IsExpanded() const;
  95.     virtual void    Expand(bool b_exp);
  96.     virtual const IAlnRowGraphProperties*     GetProperties() const;
  97.     virtual void    SetProperties(IAlnRowGraphProperties* props);
  98. protected:
  99.     enum EButtons   {
  100.         eStrandMarker,
  101.         eExpand,
  102.         eSetupGraphs        
  103.     };
  104.         
  105.     typedef CRef<CAlnVec::CAlnChunkVec> TRefChunks;
  106.     virtual void    x_CreateGraph();
  107.     virtual void    x_DestroyGraph();
  108.     void    x_RenderDescr(CGlPane& pane, int State); 
  109.     void    x_RenderAlign(CGlPane& pane); 
  110.     void    x_RenderIcons(CGlPane& pane); 
  111.     void    x_RenderEmptyBox(CGlPane& pane); 
  112.     void    x_RenderAlignSegments(CGlPane& pane, TRefChunks& chunks, int top_y, int bottom_y);
  113.     void    x_RenderAlignScores(CGlPane& pane, TRefChunks& chunks);
  114.     bool    x_CanRenderSeq(CGlPane& pane);
  115.     void    x_RenderSequence(CGlPane& pane, float y, int start, int stop);
  116.     virtual void    x_RenderGraph(CGlPane& pane, CConstRef<CAlnVec::CAlnChunkVec> chunks);
  117.     void    x_RenderStartPos(CGlPane& pane);
  118.     void    x_RenderEndPos(CGlPane& pane);
  119.     void    x_RenderSeqEnd(CGlPane& pane);
  120.     void    x_RenderAlnPos(CGlPane& pane, TSeqPos aln_pos,
  121.                            objects::CAlnVec::ESearchDirection dir);
  122.     void    x_RenderPos(CGlPane& pane, TSeqPos pos, const char* s_marker);
  123.     
  124.     TVPRect x_GetButtonRect(CGlPane& pane, EButtons btn);
  125.     virtual void    x_OnClickExpandBtn();
  126.     virtual string  x_GetIconsTooltip(CGlPane& pane);
  127.     virtual string  x_GetAlignmentTooltip(CGlPane& pane);
  128.     IAlignRowHost*  x_GetHost()     {   return m_pHost; }
  129. protected:
  130.     const CAlnVecRowHandle& m_Handle;
  131.     
  132.     IAlignRowHost*  m_pHost;
  133.     
  134.     int     m_Height;    
  135.     int     m_BaseHeight;
  136.     string  m_Text;
  137.     bool m_bExpanded;
  138.     
  139.     const CAlnVecRowDisplayStyle*   m_pStyle; /// row display style
  140.     CScoreCache*    m_pCache;
  141.     
  142.     IAlnVecRowGraph*    m_pGraph; /// graph hosted in the expandable area
  143.     /// Graphics caching
  144.     CGlDisplayList  m_DList;
  145.     TVPUnit         m_PixLeft, m_PixRight;
  146.     TModelUnit      m_ModelLeft, m_ModelRight;
  147. };
  148. END_NCBI_SCOPE
  149. /*
  150.  * ===========================================================================
  151.  * $Log: align_row.hpp,v $
  152.  * Revision 1000.4  2004/04/12 18:15:43  gouriano
  153.  * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.27
  154.  *
  155.  * Revision 1.27  2004/04/06 21:48:16  yazhuk
  156.  * Added NCBI_GUIWIDGETS_ALNMULTIPLE_EXPORT to CAlnVecRow
  157.  *
  158.  * Revision 1.26  2004/04/06 19:09:27  yazhuk
  159.  * Added "EColumnType col_type" to GetHTMLActiveAreas()
  160.  *
  161.  * Revision 1.25  2004/04/02 16:40:29  yazhuk
  162.  * Rearranged values in EButtons
  163.  *
  164.  * Revision 1.24  2004/03/29 19:08:01  yazhuk
  165.  * Added API for Graph properties access, GetHTMLActiveAreas generation,
  166.  * eliminated m_TraceProxy
  167.  *
  168.  * Revision 1.23  2004/03/26 15:01:15  yazhuk
  169.  * CTraceDataProxy  class added
  170.  *
  171.  * Revision 1.22  2004/03/18 17:09:40  yazhuk
  172.  * Added API for expanding rows
  173.  *
  174.  * Revision 1.21  2004/03/08 17:06:59  yazhuk
  175.  * Replaced CTraceGraph with IAlnVecRowGraph interface; make some functions
  176.  * virtual
  177.  *
  178.  * Revision 1.20  2004/03/08 15:51:59  yazhuk
  179.  * Replaced list of graph with a pointer to grapp, added x_IsExpandable()
  180.  *
  181.  * Revision 1.19  2004/03/02 15:11:52  yazhuk
  182.  * Added support for Trace Graphs
  183.  *
  184.  * Revision 1.18  2004/02/17 15:18:47  yazhuk
  185.  * Support for graphics caching
  186.  *
  187.  * Revision 1.17  2004/02/10 19:54:08  yazhuk
  188.  * Added RenderAlignSegments() RenderAlignScores() member functions
  189.  *
  190.  * Revision 1.16  2004/01/08 19:42:44  yazhuk
  191.  * Added x_GetIconsTooltip(), x_GetAlignmentTooltip()
  192.  *
  193.  * Revision 1.15  2003/12/29 23:19:45  yazhuk
  194.  * Added GetTooltip()
  195.  *
  196.  * Revision 1.14  2003/12/18 21:10:08  yazhuk
  197.  * Redesigned CAlnVecRow - separated display style
  198.  *
  199.  * Revision 1.13  2003/12/01 16:55:41  yazhuk
  200.  * In handle() replaced "int event" with CGUIEvent&
  201.  *
  202.  * Revision 1.12  2003/11/06 20:01:09  dicuccio
  203.  * Removed USING_SCOPE(objects)
  204.  *
  205.  * Revision 1.11  2003/11/03 16:50:22  yazhuk
  206.  * Implemented event handling and support for expanding/collapsing alignment rows
  207.  *
  208.  * Revision 1.10  2003/10/29 23:24:54  yazhuk
  209.  * Removed IAlignRowRenderer, renamed CAlignRowRenderer to CAlnVecRow
  210.  *
  211.  * Revision 1.9  2003/10/15 21:22:31  yazhuk
  212.  * Migrated from using CAlnVec to accessing data via "generic" interface in CAlignDataSource.
  213.  *
  214.  * Revision 1.8  2003/10/10 19:05:00  yazhuk
  215.  * Added support for score coloring and setting fonts
  216.  *
  217.  * Revision 1.7  2003/10/08 14:12:41  dicuccio
  218.  * Made interface class's dtor inline.  Use CRef<> for CGlBitmapFont.  Moved
  219.  * CGlPane into opengl
  220.  *
  221.  * Revision 1.6  2003/09/29 15:20:08  dicuccio
  222.  * Deprecated gui/scope.hpp.  Merged gui/core/types.hpp into gui/types.hpp
  223.  *
  224.  * Revision 1.5  2003/09/29 13:44:28  yazhuk
  225.  * Added "SeqEnd" column and functions for rendering "Start", "End" and "SeqEnd" columns
  226.  *
  227.  * Revision 1.4  2003/09/23 20:52:57  yazhuk
  228.  * Added #include <corelib/ncbistl.hpp>
  229.  *
  230.  * Revision 1.3  2003/09/10 20:39:30  yazhuk
  231.  * Introduced notion of Columns
  232.  *
  233.  * Revision 1.2  2003/09/08 16:22:33  yazhuk
  234.  * Drawing insertions, small improvements
  235.  *
  236.  * Revision 1.1  2003/08/28 18:22:45  yazhuk
  237.  * Initial revision
  238.  *
  239.  * ===========================================================================
  240.  */
  241. #endif  // __GUI_WIDGETS_ALNMULTI___ALIGN_ROW__HPP