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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: panel.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 21:07:58  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.10
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_WIDGETS_ALN_TEXTALN___PANEL__HPP
  10. #define GUI_WIDGETS_ALN_TEXTALN___PANEL__HPP
  11. /*  $Id: panel.hpp,v 1000.2 2004/06/01 21:07:58 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.  *   Panel for the text alignment view widget 
  40.  *   (see <gui/widgets/aln_textaln/textaln_view.hpp>)
  41.  *
  42.  */
  43. #include <gui/gui.hpp>
  44. #include <gui/opengl.h>
  45. #include <gui/opengl/glbitmapfont.hpp>
  46. #include <gui/widgets/aln_data/align_ds.hpp>
  47. #include <gui/widgets/aln_textaln/view.hpp>
  48. #include <gui/objutils/feature.hpp>
  49. #include <objects/seqloc/Na_strand.hpp>
  50. #include <objects/seqalign/Dense_seg.hpp>
  51. #include <objmgr/feat_ci.hpp>
  52. #include <FL/Fl.H>
  53. #include <FL/Fl_Gl_Window.H>
  54. #include <FL/Fl_Slider.H>
  55. BEGIN_NCBI_SCOPE
  56. class CTextAlnPanel : public Fl_Gl_Window
  57. {
  58. public:
  59.     typedef unsigned int                 TDim;
  60.     typedef objects::CDense_seg::TNumseg TNumseg;
  61.     typedef TDim                         TNumrow;
  62.     CTextAlnPanel(int x, int y, int w, int h, const char* label = NULL);
  63.     virtual ~CTextAlnPanel();
  64.     void SetDataSource(CAlignDataSource* ds);
  65.     // features
  66.     void   SetFeatureDisplay(CTextAlnView::EFeatureDisplay disp);
  67.     // Colors
  68.     void   SetColor(CTextAlnView::EDisplayElement elem, Fl_Color color);
  69.     Fl_Color GetColor(CTextAlnView::EDisplayElement elem) const;
  70.     void SelectAll(bool flag);
  71.     void ShowSequenceAsDots (bool show_dots);
  72.     void SetAnchor(size_t idx);
  73.     void UnsetAnchor(void);
  74.     void Scroll(TSeqPos xPos, TSeqPos yPos);
  75.     
  76.     class CParaG {
  77.     public:
  78.         enum EParaGLineType {
  79.             eSequence,
  80.             eFeature,
  81.             eInsertion
  82.         };
  83.         typedef int TParaGLineType;  // EParaGLineType
  84.               
  85.         CParaG(TParaGLineType type, size_t idx, CLayoutFeat* feature = NULL) :
  86.                m_type(type), m_idx(idx), m_feature(feature) {};
  87.         TParaGLineType     GetType(void)  const { return m_type;    }
  88.         size_t             GetIndex(void) const { return m_idx;     }
  89.         const CLayoutFeat* Feature(void)  const { return m_feature; }
  90.     private:
  91.         TParaGLineType    m_type;
  92.         size_t            m_idx;  // index in the CDens_seg
  93.         CRef<CLayoutFeat> m_feature;
  94.     };
  95. private:    
  96.     CRef<CAlignDataSource> m_DS;    
  97.     enum ESelectionType {
  98.         eRow,
  99.         eCol
  100.     };
  101.     // Scrollbars values
  102.     TSeqPos m_ScrX;
  103.     TNumrow m_ScrY;
  104.     TSeqPos m_AlnWidth;
  105.     TNumrow m_AlnHeight;
  106.                 
  107.     Fl_Color m_SelectionColor;   // Color for selection
  108.     Fl_Color m_BackgroundColor;  // Color for background
  109.     Fl_Color m_NumbersColor;     // Color for grid numbers
  110.     Fl_Color m_GridColor;        // Color for this grid
  111.     Fl_Color m_SequenceColor;    // Color for sequence letters
  112.     Fl_Color m_MismatchColor;    // Color for mismatch letters
  113.     CTextAlnView::TFeatureDisplay m_featDisp;
  114.     int m_Width;   // Window size in pixels
  115.     int m_Height;
  116.     
  117.     TNumrow m_Anchor;  // anchored sequence index
  118.     // our font
  119.     CGlBitmapFont m_Font_8x13;
  120.     // Define viewport coordinates
  121.     GLuint m_NP[4];  // Numbers panel
  122.     GLuint m_BP[4];  // Text panel
  123.     GLuint m_LP[4];  // Labels panel
  124.     GLuint m_IP[4];  // Info panel
  125.     //GLuint m_FontOffset;       // Display list for sequence font
  126.     
  127.     bool m_ShowSeqAsDots;      // Show letters for mismatches, dots otherwise
  128.     vector<CParaG> m_ParaG;    // info about alignment lines
  129.     vector<bool> m_RowSelect;  // info about selected lines (horisontal)
  130.     vector<bool> m_ColSelect;  // info about selected lines (vertical)
  131.         
  132.     // --- Virtual (FLTK)
  133.     virtual void draw();
  134.     virtual int  handle(int event);
  135.     // --- Methods
  136.     void x_PrepareData        (void);
  137.     void x_SetViewPorts       (void);
  138.     void x_AdjustScrollBars   (void);
  139.     
  140.     void x_DrawSeqNumPanel    (void);
  141.     void x_DrawTextPanel      (void);
  142.     void x_DrawLabelPanel     (void);
  143.     void x_DrawInfoPanel      (void);
  144.     void x_DrawGrid           (void);
  145.     void x_DrawSelection (int size, ESelectionType type) const;
  146.     void x_DrawSequence  (TNumrow row, size_t idx) const;
  147.     void x_DrawFeatures  (TNumrow row, size_t idx) const;
  148.     void x_DrawInsertions(TNumrow row, size_t idx) const;
  149.     void x_DrawLine(GLfloat x1, GLfloat y1, GLfloat x2, 
  150.                     GLfloat y2, GLfloat width = 1.0f) const;
  151.     void x_DrawAnchorMark(TNumrow y) const;
  152.     void x_AddFeaturesAtIndex(size_t idx);
  153.     void x_AddInsertsAtIndex (size_t idx);
  154.     void x_ActivateViewPort  (GLuint* port) const;
  155.     string x_PreprocessSeq(const string& s) const;
  156.     size_t x_GetAtXY(int x, int y) const;
  157.     
  158.     TSeqPos x_GetAlnWidth (void) const;
  159.     TNumrow x_GetAlnHeigth(void) const;
  160.     TSignedSeqPos x_GetStartAt(size_t i, int seg) const;
  161. };
  162. END_NCBI_SCOPE
  163. /*
  164.  * ===========================================================================
  165.  * $Log: panel.hpp,v $
  166.  * Revision 1000.2  2004/06/01 21:07:58  gouriano
  167.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.10
  168.  *
  169.  * Revision 1.10  2004/05/03 13:23:57  dicuccio
  170.  * gui/utils --> gui/objutils where needed
  171.  *
  172.  * Revision 1.9  2004/03/11 17:50:41  dicuccio
  173.  * Updated typedefs: dropped TDimension, TPosition, TIndex, TColor; use TSeqRange
  174.  * instead of TRange
  175.  *
  176.  * Revision 1.8  2003/09/29 15:49:58  dicuccio
  177.  * Use CGlBitmapFont instead of home-grown font.
  178.  *
  179.  * Revision 1.7  2003/09/24 18:34:58  dicuccio
  180.  * Use new generic alignment data source.  Removed USING_SCOPE(objects) from
  181.  * headers; used objects:: where necessary
  182.  *
  183.  * Revision 1.6  2003/08/18 15:23:40  lebedev
  184.  * Changed nales: CFeature -> CLayoutFeat
  185.  *
  186.  * Revision 1.5  2003/06/02 16:06:27  dicuccio
  187.  * Rearranged src/objects/ subtree.  This includes the following shifts:
  188.  *     - src/objects/asn2asn --> arc/app/asn2asn
  189.  *     - src/objects/testmedline --> src/objects/ncbimime/test
  190.  *     - src/objects/objmgr --> src/objmgr
  191.  *     - src/objects/util --> src/objmgr/util
  192.  *     - src/objects/alnmgr --> src/objtools/alnmgr
  193.  *     - src/objects/flat --> src/objtools/flat
  194.  *     - src/objects/validator --> src/objtools/validator
  195.  *     - src/objects/cddalignview --> src/objtools/cddalignview
  196.  * In addition, libseq now includes six of the objects/seq... libs, and libmmdb
  197.  * replaces the three libmmdb? libs.
  198.  *
  199.  * Revision 1.4  2003/03/28 18:05:19  dicuccio
  200.  * Ooops.  Use 'gui/opengl.h' instead of 'gui/opengl.hpp'
  201.  *
  202.  * Revision 1.3  2003/03/28 13:39:45  dicuccio
  203.  * Use gui/opengl.h instead of OpenGL headers directly
  204.  *
  205.  * Revision 1.2  2003/03/27 20:38:57  dicuccio
  206.  * Fixed compilation errors under Linux (gcc-3.0.4)
  207.  *
  208.  * Revision 1.1  2003/03/27 17:04:32  lebedev
  209.  * Text Alignment Widget: Initial revision
  210.  *
  211.  * ===========================================================================
  212.  */
  213. #endif  /* GUI_WIDGETS_ALN_TEXTALN___PANEL__HPP */