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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: cross_aln_render.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 21:06:33  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_WIDGETS_ALN_CROSSALN___CROSS_ALN_RENDER__HPP
  10. #define GUI_WIDGETS_ALN_CROSSALN___CROSS_ALN_RENDER__HPP
  11. /*  $Id: cross_aln_render.hpp,v 1000.2 2004/06/01 21:06:33 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:  Vlad Lebedev
  37.  *
  38.  * File Description:
  39.  *   Renderer for the CrossAlignment widget 
  40.  *   Independent from FLTK.
  41.  *
  42.  */
  43. #include <gui/gui.hpp>
  44. #include <gui/opengl.h>
  45. #include <gui/widgets/seq_graphic/features_panel_ir.hpp>
  46. #include <gui/widgets/gl/ruler.hpp>
  47. #include <gui/widgets/aln_crossaln/cross_aln_ds.hpp>
  48. #include <gui/widgets/aln_crossaln/cross_aln_widget.hpp>
  49. #include <gui/widgets/aln_crossaln/cross_panel_ir.hpp>
  50. #include <gui/objutils/utils.hpp>
  51. #include <gui/objutils/objects.hpp>
  52. #include <gui/widgets/seq_graphic/seqgraphic_conf.hpp>
  53. BEGIN_NCBI_SCOPE
  54. USING_SCOPE(objects);
  55. class CCrossAlnRenderer : public CObject
  56. {
  57. public:
  58.     enum ERenderPanel {
  59.         eFeatures1,
  60.         eRuler1,
  61.         eCross,
  62.         eFeatures2,
  63.         eRuler2,
  64.         eNone
  65.     };
  66.     typedef ERenderPanel TRendererPanel;
  67.             
  68.     CCrossAlnRenderer();
  69.     ~CCrossAlnRenderer();
  70.     void SetDataSource(const TVPRect& rc, CCrossAlnDataSource* ds);
  71.     void SetConfig(CRef<CSeqGraphicConfig> config);
  72.     
  73.     void Update();
  74.             
  75.     // Colors
  76.     //void SetColor(CSeqGraphicView::EDisplayElement elem, CGlColor color);
  77.     //CGlColor GetColor(CSeqGraphicView::EDisplayElement elem) const;
  78.     
  79.     // Zoom set from 0 to 1
  80.     float GetZoomX(void) const;
  81.     void  SetZoomX(float value);
  82.     
  83.     void ZoomInCenter();
  84.     void ZoomOutCenter();
  85.     // scales the panels
  86.     void SetScaleRef1(TModelUnit m_x, TModelUnit m_y, const TModelPoint& point);
  87.     void SetScaleRef2(TModelUnit m_x, TModelUnit m_y, const TModelPoint& point);
  88.     void SetScaleRefC(TModelUnit m_x, TModelUnit m_y, const TModelPoint& point);
  89.     
  90.     void FitToWindow    (void);
  91.     void ZoomToSequence (void);
  92.     void ZoomOnObject   (const CLayoutObject* obj);
  93.     void ZoomOnRange    (const TSeqRange& range);
  94.     void ZoomOnAlignment();
  95.     CGlPane& GetFeatGlPane1();
  96.     CGlPane& GetFeatGlPane2();
  97.     CGlPane& GetCrossGlPane();
  98.     void resize(const TVPRect& rc);
  99.     void draw();
  100.      
  101.     // is there a Layoutable object at this screen coordinates?
  102.     const CLayoutObject* HitTest(int x, int y);
  103.     
  104.     TRendererPanel PanelHitTest(int x, int y) const;
  105.     CGlPane*       PaneHitTest (int x, int y);
  106.     void GetTooltip(int x, int y, string* title);
  107.     
  108.     void Scroll(TModelUnit x1, TModelUnit y1, TModelUnit x2, TModelUnit y2);
  109.     TModelUnit GetScrollLineSize1();
  110.     TModelUnit GetScrollLineSize2();
  111.     void ClearObjectSelection(void);
  112.     void SelectObject(const CObject* obj);
  113.     const TConstObjects& GetSelectedObjects(void) const;
  114.     
  115. private:
  116.     CRef<CCrossAlnDataSource> m_DS;
  117.     
  118.     typedef vector<CGlPane*> TGlPanes;
  119.     typedef vector<IRenderable*> TRenderables;
  120.     
  121.     TGlPanes m_AllPanes;
  122.     TGlPanes m_ScrollXPanes1;
  123.     TGlPanes m_ScrollXPanes2;
  124.     
  125.     TRenderables m_AllRenderers;
  126.     
  127.     CGlPane m_FP1;
  128.     CGlPane m_RP1;
  129.     CGlPane m_CP; // panel for cross-alignment with tricky model space
  130.     
  131.     CGlPane m_FP2;
  132.     CGlPane m_RP2;    
  133.     
  134.     CFeaturesPanelIR m_FeatPanel1;
  135.     CRuler           m_RulerPanel1;
  136.     CCrossPanelIR    m_CrossPanel;
  137.     CFeaturesPanelIR m_FeatPanel2;
  138.     CRuler           m_RulerPanel2;
  139.     // offset (shift) of second (bottom) sequence against the top sequence
  140.     TSignedSeqPos m_Offset2;
  141.     TSeqPos       m_SeqLength1; // sequence lengths
  142.     TSeqPos       m_SeqLength2;
  143.     void x_SetupViewPorts(const TVPRect& rc);
  144.     void x_SetupModelLimits();
  145.     void x_AdjustCrossPane();
  146.     
  147.     TModelUnit m_MinZoomX, m_MaxZoomX; // X axis zoom limits
  148.     
  149.     TConstObjects m_SelectedObjects;   // selected features
  150. };
  151. inline
  152. const TConstObjects& CCrossAlnRenderer::GetSelectedObjects(void) const
  153. {
  154.     return m_SelectedObjects;
  155. }
  156. inline
  157. void CCrossAlnRenderer::ClearObjectSelection(void)
  158. {
  159.     m_SelectedObjects.clear();
  160. }
  161. END_NCBI_SCOPE
  162. /*
  163.  * ===========================================================================
  164.  * $Log: cross_aln_render.hpp,v $
  165.  * Revision 1000.2  2004/06/01 21:06:33  gouriano
  166.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7
  167.  *
  168.  * Revision 1.7  2004/05/03 13:23:57  dicuccio
  169.  * gui/utils --> gui/objutils where needed
  170.  *
  171.  * Revision 1.6  2004/04/16 14:49:02  dicuccio
  172.  * Use TConstObjects for handling object selections
  173.  *
  174.  * Revision 1.5  2004/03/11 17:50:41  dicuccio
  175.  * Updated typedefs: dropped TDimension, TPosition, TIndex, TColor; use TSeqRange
  176.  * instead of TRange
  177.  *
  178.  * Revision 1.4  2004/01/27 16:20:41  lebedev
  179.  * Changed stored selection from CLayoutObject to CObject
  180.  *
  181.  * Revision 1.3  2004/01/16 19:17:06  tereshko
  182.  * Removed const modifyer for GetTooltip method
  183.  *
  184.  * Revision 1.2  2004/01/16 13:40:39  lebedev
  185.  * Tooltips added
  186.  *
  187.  * Revision 1.1  2003/12/22 13:12:34  lebedev
  188.  * Initial revision
  189.  *
  190.  * ===========================================================================
  191.  */
  192. #endif  /* GUI_WIDGETS_ALN_CROSSALN___CROSS_ALN_RENDER__HPP */