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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: features_panel_ir.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:53:18  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.14
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_WIDGET_SEQ_GRAPHICS___FEATURES_PANEL_IR__HPP
  10. #define GUI_WIDGET_SEQ_GRAPHICS___FEATURES_PANEL_IR__HPP
  11. /*  $Id: features_panel_ir.hpp,v 1000.2 2004/06/01 19:53:18 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.  */
  39. #include <gui/gui.hpp>
  40. #include <objmgr/bioseq_handle.hpp>
  41. #include <gui/widgets/gl/irenderable.hpp>
  42. #include <gui/widgets/gl/ipolicy.hpp>
  43. #include <gui/widgets/seq_graphic/ilayoutpolicy.hpp>
  44. #include <gui/opengl/glbitmapfont.hpp>
  45. #include <gui/objutils/feature.hpp>
  46. #include <gui/objutils/alignment.hpp>
  47. #include <gui/objutils/graph.hpp>
  48. #include <gui/objutils/comment.hpp>
  49. #include <gui/objutils/prot_product.hpp>
  50. #include <gui/objutils/utils.hpp>
  51. #include <gui/objutils/feat_label.hpp>
  52. #include <gui/objutils/label.hpp>
  53. #include <gui/widgets/seq_graphic/seqgraphic_conf.hpp>
  54. #include <objmgr/util/feature.hpp>
  55. #include <objects/seq/Seq_annot.hpp>
  56. BEGIN_NCBI_SCOPE
  57. class NCBI_GUIWIDGETS_SEQGRAPHIC_EXPORT CFeaturesPanelIR : public IRenderable
  58. {
  59. public:
  60.     
  61.     CFeaturesPanelIR();
  62.     virtual ~CFeaturesPanelIR(void);
  63.     // IRenderable interfaces
  64.     TVPRect    GetVPRect();
  65.     TModelRect GetModelRect();
  66.     void       Render(CGlPane& pane);
  67.     void SetHandle(const objects::CBioseq_Handle& handle);
  68.     void SetConfig(CSeqGraphicConfig* config);
  69.     
  70.     void SetRenderPolicy(IPolicy* policy);
  71.     void SetLayoutPolicy(ILayoutPolicy* policy);
  72.     
  73.     void SetSelectedObjects(TConstObjects* objs);
  74.     
  75.     TModelUnit GetHeight(CGlPane& pane);
  76.     const CLayoutObject* HitTest(CGlPane& pane, int x, int y);
  77.     void GetTooltip(const CLayoutObject* obj, string* title) const;
  78.     
  79.     // For CGI mode
  80.     void GetHTMLActiveAreas(CGlPane& pane, IPolicy::TAreaVector* p_areas);
  81. protected:
  82.     objects::CBioseq_Handle  m_Handle;
  83.     CRef<CSeqGraphicConfig>  m_ConfigSettings;
  84.     CRef<IPolicy>            m_RenderPolicy;
  85.     CRef<ILayoutPolicy>      m_LayoutPolicy;
  86.     
  87.     TModelUnit  m_RowCount;
  88.     TModelPoint m_LastClick;
  89.     
  90.     bool x_IsObjectSelected(const CLayoutObject* obj) const;
  91.     // Our layout. The rendering code will draw whatever objects are there.
  92.     // It's up to the panel to fill it with layoutable objects.
  93.     CLayout m_PackedObjects;
  94.     
  95. private:
  96.     
  97.     // Simple grids
  98.     void x_DrawXGrid (CGlPane& pane) const;
  99.     TConstObjects* m_SelectedObjects;
  100.     // main iterator.
  101.     const CLayoutObject* x_MainObjectIterator(CGlPane& pane, 
  102.                     IPolicy::EObj_IterMode mode);
  103.     
  104.     // is it enougth space to sequence letters?
  105.     bool x_IsSeqLettersFit(CGlPane& pane) const;
  106.     void x_DecomposeToLeaves(const CLayoutFeat* feat,
  107.                     vector<CLayoutFeat::TFeatList>& leaves);
  108.     void x_DecomposeToLeaves(const CLayoutFeat* feat,
  109.                     vector<CLayoutFeat::TFeatList>& leaves,
  110.                     CLayoutFeat::TFeatList& this_leaf);    
  111. };
  112. END_NCBI_SCOPE
  113. /*
  114.  * ===========================================================================
  115.  * $Log: features_panel_ir.hpp,v $
  116.  * Revision 1000.2  2004/06/01 19:53:18  gouriano
  117.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.14
  118.  *
  119.  * Revision 1.14  2004/05/14 15:57:13  lebedev
  120.  * Optional argument to specify the type of title/tooltip added
  121.  *
  122.  * Revision 1.13  2004/05/03 12:46:32  dicuccio
  123.  * gui/utils ->gui/objutils where needed
  124.  *
  125.  * Revision 1.12  2004/04/16 14:34:59  dicuccio
  126.  * Use TConstObjects instead of TObjSelection
  127.  *
  128.  * Revision 1.11  2004/03/31 16:09:01  lebedev
  129.  * Methods to get HTML active areas added.
  130.  *
  131.  * Revision 1.10  2004/03/30 13:58:39  lebedev
  132.  * Use elements colors from configuration instead of setting colors directly.
  133.  *
  134.  * Revision 1.9  2004/03/23 12:33:57  lebedev
  135.  * Made sequence and histograms bars a layout objects in the object panel.
  136.  * Made segment map a number of layout objects. Get rid of fixed size rows in the object panel.
  137.  *
  138.  * Revision 1.8  2004/03/11 17:23:38  dicuccio
  139.  * Use TSeqRange instead of TRange.  Deprecated TIndex / TPosition / TDimension
  140.  *
  141.  * Revision 1.7  2004/02/24 14:46:26  lebedev
  142.  * Better implementation of main rendering loop. Code clean-up.
  143.  *
  144.  * Revision 1.6  2004/02/13 18:08:27  lebedev
  145.  * Make use of new LayoutPolicy interface
  146.  *
  147.  * Revision 1.5  2004/01/27 16:13:06  lebedev
  148.  * Changed stored selection from CLayoutObject to CObject
  149.  *
  150.  * Revision 1.4  2004/01/16 18:45:20  dicuccio
  151.  * Minor code reformatting
  152.  *
  153.  * Revision 1.3  2004/01/16 13:37:57  lebedev
  154.  * Tooltips added
  155.  *
  156.  * Revision 1.2  2003/12/30 14:55:00  dicuccio
  157.  * Standardized export specifiers
  158.  *
  159.  * Revision 1.1  2003/12/22 12:52:41  lebedev
  160.  * New files added
  161.  *
  162.  * Revision 1.15  2003/12/16 18:54:09  lebedev
  163.  * Introduced Rendering Policies for feature panels
  164.  *
  165.  * Revision 1.14  2003/12/09 12:32:19  lebedev
  166.  * Trim gene names in overview mode to fit in columns. Option to show feature names in detailed mode
  167.  *
  168.  * Revision 1.13  2003/11/13 19:08:04  lebedev
  169.  * Objects selection reorganized
  170.  *
  171.  * Revision 1.12  2003/11/10 18:47:02  ucko
  172.  * Adjust for const-correctness.
  173.  *
  174.  * Revision 1.11  2003/11/10 18:34:26  ucko
  175.  * Properly capitalize Seq_annot.hpp
  176.  *
  177.  * Revision 1.10  2003/11/10 17:01:21  lebedev
  178.  * Display of SeqGraphs and named SeqAnnots added
  179.  *
  180.  * Revision 1.9  2003/11/04 12:40:07  lebedev
  181.  * Ruler bar added
  182.  *
  183.  * Revision 1.8  2003/10/30 13:22:07  lebedev
  184.  * Display of master sequence under selected CDSs and Proteins added
  185.  *
  186.  * Revision 1.7  2003/10/29 23:39:16  yazhuk
  187.  * Added export macro
  188.  *
  189.  * Revision 1.6  2003/10/28 19:04:09  dicuccio
  190.  * Code clean-up.  Changed storage of CBioseq_Handle from const pointer to value.
  191.  * Changed SFeatByName to use no scope internally.
  192.  *
  193.  * Revision 1.5  2003/10/28 15:27:56  lebedev
  194.  * Removed unused file
  195.  *
  196.  * Revision 1.4  2003/10/22 18:29:08  lebedev
  197.  * Zoom that follows mouse added
  198.  *
  199.  * Revision 1.3  2003/10/21 12:59:44  lebedev
  200.  * Rendering of alignments changed
  201.  *
  202.  * Revision 1.2  2003/10/20 16:31:02  lebedev
  203.  * Offset IRenderable panels to bypass OpenGL matrices precision loss on
  204.  * big sequences.
  205.  *
  206.  * Revision 1.1  2003/10/09 16:25:40  lebedev
  207.  * Initial revision
  208.  *
  209.  * ===========================================================================
  210.  */
  211. #endif  // GUI_WIDGET_SEQ_GRAPHICS___FEATURES_PANEL_IR__HPP