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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: seqgraphic_render.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:53:28  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.5
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_WIDGETS_SEQ_GRAPHIC___SEQGRAPHIC_RENDER__HPP
  10. #define GUI_WIDGETS_SEQ_GRAPHIC___SEQGRAPHIC_RENDER__HPP
  11. /*  $Id: seqgraphic_render.hpp,v 1000.2 2004/06/01 19:53:28 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 Graphic Sequence view widget 
  40.  *   Independent from FLTK.
  41.  *
  42.  */
  43. #include <gui/gui.hpp>
  44. #include <gui/opengl.h>
  45. #include <gui/objutils/objects.hpp>
  46. #include <gui/widgets/seq_graphic/features_panel_ir.hpp>
  47. #include <gui/widgets/gl/ruler.hpp>
  48. #include <gui/widgets/gl/html_active_area.hpp>
  49. #include <gui/widgets/seq_graphic/seqgraphic_ds.hpp>
  50. #include <gui/widgets/seq_graphic/seqgraphic_widget.hpp>
  51. #include <gui/objutils/utils.hpp>
  52. #include <gui/widgets/seq_graphic/seqgraphic_conf.hpp>
  53. BEGIN_NCBI_SCOPE
  54. USING_SCOPE(objects);
  55. class NCBI_GUIWIDGETS_SEQGRAPHIC_EXPORT CSeqGraphicRenderer : public CObject
  56. {
  57. public:
  58.     typedef vector<CHTMLActiveArea>   TAreaVector;
  59.     
  60.     enum ERenderPanel {
  61.         eFeatures,
  62.         eRuler,
  63.         eNone
  64.     };
  65.     typedef ERenderPanel TRendererPanel;
  66.     CSeqGraphicRenderer();
  67.     ~CSeqGraphicRenderer();
  68.     void SetDataSource(const TVPRect& rc, CSeqGraphicDataSource* ds);
  69.     void SetConfig(CRef<CSeqGraphicConfig> config);
  70.     void UpdateConfig();
  71.     void ConfigureRenderPolicy();
  72.     // Zoom set from 0 to 1
  73.     float GetZoomX(void) const;
  74.     void  SetZoomX(float value);
  75.     
  76.     void ZoomInCenter();
  77.     void ZoomOutCenter();
  78.     void ZoomAll();
  79.     TSeqRange GetVisibleRange() const;
  80.     
  81.     // scales the panels
  82.     void SetScaleRef(TModelUnit m_x, TModelUnit m_y, const TModelPoint& point);
  83.     
  84.     void ZoomOnObject(const CLayoutObject* obj);
  85.     void ZoomOnRange(const TSeqRange& range);
  86.     
  87.     // zoom 10x at the given screen coordinates
  88.     void SetLensZoom(int x, int y);
  89.     void CancelLensZoom();
  90.     
  91.     // Expose a few GlPanes
  92.     CGlPane& GetFeatGlPane();
  93.     CGlPane& GetRulerGlPane();
  94.     // retrieve the expected height of this widget
  95.     TModelUnit GetHeight();
  96.     
  97.     void Resize(const TVPRect& rc);
  98.     void Render(void);
  99.     // extended version for CGI use
  100.     void Render(TAreaVector& areas);
  101.     void Render(TAreaVector* areas);
  102.      
  103.     // is there a Layoutable object at this screen coordinates?
  104.     const CLayoutObject* HitTest(int x, int y);
  105.     
  106.     TRendererPanel   PanelHitTest(int x, int y) const;
  107.     void GetTooltip(int x, int y, string* title);
  108.     
  109.     void Scroll(TModelUnit x, TModelUnit y);
  110.     TModelUnit GetScrollLineSize();
  111.     void ClearObjectSelection(void);
  112.     void SelectObject(const CObject* obj);
  113.     
  114.     const TConstObjects& GetSelectedObjects(void) const;
  115.     
  116. private:
  117.     CSeqGraphicDataSource* m_DS;
  118.     
  119.     typedef vector<CGlPane*> TGlPanes;
  120.     typedef vector<IRenderable*> TRenderables;
  121.     
  122.     TGlPanes m_AllPanes;
  123.     TGlPanes m_ScrollXPanes;
  124.     TGlPanes m_ScrollYPanes;
  125.     
  126.     TRenderables m_AllRenderers;
  127.     
  128.     CGlPane m_RP;
  129.     CGlPane m_FP;
  130.     
  131.     CRuler            m_RulerPanel;
  132.     CFeaturesPanelIR  m_FeatPanel;
  133.     
  134.     TModelPoint m_LensZoom;
  135.     bool        m_NeedLensZoom;
  136.      
  137.     void x_Draw(TAreaVector* p_areas);
  138.     void x_DimDisplay();
  139.     void x_SetupViewPorts(const TVPRect& rc);
  140.     void x_SetupModelLimits();
  141.     
  142.     TModelUnit m_MinZoomX, m_MaxZoomX;  // X axis zoom limits
  143.     
  144.     TConstObjects m_SelectedObjects;  // selected features
  145.     
  146.     CRef<CSeqGraphicConfig> m_ConfigSettings;
  147. };
  148. inline
  149. const TConstObjects& CSeqGraphicRenderer::GetSelectedObjects(void) const
  150. {
  151.     return m_SelectedObjects;
  152. }
  153. inline
  154. void CSeqGraphicRenderer::ClearObjectSelection(void)
  155. {
  156.     m_SelectedObjects.clear();
  157. }
  158. END_NCBI_SCOPE
  159. /*
  160.  * ===========================================================================
  161.  * $Log: seqgraphic_render.hpp,v $
  162.  * Revision 1000.2  2004/06/01 19:53:28  gouriano
  163.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.5
  164.  *
  165.  * Revision 1.5  2004/05/03 12:46:32  dicuccio
  166.  * gui/utils ->gui/objutils where needed
  167.  *
  168.  * Revision 1.4  2004/04/16 14:35:17  dicuccio
  169.  * Use TConstObjects instead of TObjSelection
  170.  *
  171.  * Revision 1.3  2004/04/06 13:32:14  dicuccio
  172.  * Changed TAreaVector to use CHTMLActiveArea directly.  Changed API of draw,
  173.  * resize -> Draw, Resize to match coding standard
  174.  *
  175.  * Revision 1.2  2004/03/31 16:09:01  lebedev
  176.  * Methods to get HTML active areas added.
  177.  *
  178.  * Revision 1.1  2004/03/24 15:13:26  dicuccio
  179.  * MOved from src/ tree.  Added function to compute the height of the renderer
  180.  *
  181.  * Revision 1.55  2004/03/23 12:33:55  lebedev
  182.  * Made sequence and histograms bars a layout objects in the object panel.
  183.  * Made segment map a number of layout objects. Get rid of fixed size rows in the object panel.
  184.  *
  185.  * Revision 1.54  2004/03/12 15:58:15  lebedev
  186.  * ZoomAll method added
  187.  *
  188.  * Revision 1.53  2004/03/11 17:53:06  dicuccio
  189.  * Deprecated typedefs TPosition, TDimension, TIndex, TColor.  Use TSeqRange instead of TRange
  190.  *
  191.  * Revision 1.52  2004/02/13 18:14:34  lebedev
  192.  * Make use of new ILayoutPolicy interface
  193.  *
  194.  * Revision 1.51  2004/02/10 13:15:34  lebedev
  195.  * ISelHandlerHost interface implemented for selections on sequence pane
  196.  *
  197.  * Revision 1.50  2004/01/27 16:14:42  lebedev
  198.  * Methods for working with selections added
  199.  *
  200.  * Revision 1.49  2004/01/20 20:34:12  rsmith
  201.  * add ConfigureRenderPolicy and UpdateConfig methods, so that render policy can be changed on the fly.
  202.  *
  203.  * Revision 1.48  2004/01/16 18:43:56  dicuccio
  204.  * Dropped const on GetTooltip() - cascade of const functions made inavlid by this
  205.  *
  206.  * Revision 1.47  2004/01/16 13:40:16  lebedev
  207.  * Tooltips added
  208.  *
  209.  * Revision 1.46  2003/12/22 12:55:53  lebedev
  210.  * Old files removed
  211.  *
  212.  * Revision 1.45  2003/12/16 18:56:37  lebedev
  213.  * Introduced Rendering Policies for feature panels
  214.  *
  215.  * Revision 1.44  2003/12/09 12:40:00  lebedev
  216.  * Implemented IMouseZoomHandlerHost interface for zooming and scrolling with mouse
  217.  *
  218.  * Revision 1.43  2003/11/18 00:56:21  yazhuk
  219.  * Replaced ruller.hpp with ruler.hpp in the include
  220.  *
  221.  * Revision 1.42  2003/11/13 19:11:08  lebedev
  222.  * Objects selection reorganized. One row ofset bug in selection fixed
  223.  *
  224.  * Revision 1.41  2003/11/13 15:31:53  lebedev
  225.  * Methods to get visible sequence range added
  226.  *
  227.  * Revision 1.40  2003/11/04 12:43:06  lebedev
  228.  * Ruler bar added
  229.  *
  230.  * Revision 1.39  2003/10/28 15:29:07  lebedev
  231.  * Use new configuration library
  232.  *
  233.  * Revision 1.38  2003/10/24 13:59:56  lebedev
  234.  * Make vertical scrollbar always visible
  235.  *
  236.  * Revision 1.37  2003/10/24 13:25:56  lebedev
  237.  * Use logarithmic scale fo zoom.
  238.  * Better scrolling in sequence pane.
  239.  *
  240.  * Revision 1.36  2003/10/22 18:32:56  lebedev
  241.  * Histogram display of features added (and compressed display)
  242.  * Zoom to mouse and scroll with mouse added.
  243.  *
  244.  * Revision 1.35  2003/10/15 14:06:47  rsmith
  245.  * Remove redundant and erroneous specifiers (CGraphicRender::)
  246.  *
  247.  * Revision 1.34  2003/10/10 15:29:11  lebedev
  248.  * Selection on a sequence and icon view added
  249.  *
  250.  * Revision 1.33  2003/10/09 20:15:39  dicuccio
  251.  * Renamed CSeqPanel to CSequencePanel
  252.  *
  253.  * Revision 1.32  2003/10/09 16:27:09  lebedev
  254.  * Widget redesign: Use independent IRenderable panels for display
  255.  *
  256.  * ===========================================================================
  257.  */
  258. #endif  /* GUI_WIDGETS_SEQ_GRAPHIC___SEQGRAPHIC_RENDER__HPP */