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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: seqgraphic_widget.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:53:30  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.10
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_WIDGETS_SEQ_GRAPHIC___SEQGRAPHIC_WIDGET__HPP
  10. #define GUI_WIDGETS_SEQ_GRAPHIC___SEQGRAPHIC_WIDGET__HPP
  11. /*  $Id: seqgraphic_widget.hpp,v 1000.2 2004/06/01 19:53:30 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.  *   Graphic Sequence Widget
  40.  *
  41.  */
  42. #include <corelib/ncbiobj.hpp>
  43. #include <gui/gui.hpp>
  44. #include <gui/opengl/glcolor.hpp>
  45. #include <gui/print/print_options.hpp>
  46. #include <gui/utils/command.hpp>
  47. #include <gui/objutils/iselection.hpp>
  48. #include <FL/Fl_Group.H>
  49. #include <FL/Fl_Scrollbar.H>
  50. #include <FL/Fl_Value_Slider.H>
  51. #include <FL/Fl_Input.H>
  52. #include <FL/Fl_Button.H>
  53. #include <FL/Fl_Choice.H>
  54. #include <objects/seqloc/Seq_loc.hpp>
  55. #include <objects/seqfeat/SeqFeatData.hpp>
  56. BEGIN_NCBI_SCOPE
  57. class CSeqGraphicPane;
  58. class CLayoutObject;
  59. class CSeqGraphicDataSource;
  60. class CSeqGraphicConfig;
  61. /// Definitions for Hit Matrix Widget commands
  62. ///
  63. enum ESeqGraphicsCommands {
  64.     eCmdZoomObject = eBaseCmdLast + 200,
  65.     eCmdPrevExon,
  66.     eCmdNextExon
  67. };
  68. class NCBI_GUIWIDGETS_SEQGRAPHIC_EXPORT CSeqGraphicWidget 
  69.             : public Fl_Group,
  70.               public CCommandTarget,
  71.               public ISelection
  72. {
  73. public:
  74.     CSeqGraphicWidget(int x, int y, int w, int h, const char* label = NULL);
  75.     virtual ~CSeqGraphicWidget();
  76.     void SetDataSource(CSeqGraphicDataSource* ds);
  77.         
  78.     enum ESearchRange {
  79.         eWhole,
  80.         eVisible
  81.     };
  82.     void SetZoomX(float value);
  83.     void ZoomOnRange(const TSeqRange& range);
  84.     // returns the visible sequence range
  85.     TSeqRange GetVisibleRange(void) const;
  86.     // indicates visible sequence range has changes
  87.     bool VisibleRangeChanged() const;
  88.     void ResetVisibleRangeChanged();
  89.     
  90.     // set/clear selections
  91.     void SelectObject(const CObject* obj);
  92.     void SelectSeqLoc(const objects::CSeq_loc* loc);
  93.     void ClearSelection();
  94.     
  95.     // print hook
  96.     void Print(const CPrintOptions& opts);
  97.     // retrieve selected objects from this widget
  98.     const TConstObjects& GetSelectedObjects(void) const;
  99.     // retrieve selected seq-locs from this object
  100.     // this is only for selections of raw sequence, not for seq-locs
  101.     // arising from features, for example.
  102.     vector< CRef<objects::CSeq_loc> >  GetSelectedSeqLocs(void) const;
  103.     // ISelection interface
  104.     void GetSelections(TConstScopedObjects& objs) const;
  105.     void SetSelections(const TConstScopedObjects& objs);
  106.     /// Here is the config object you are going to use to configure yourself.
  107.     /// make sure all your children who need it have references to it.
  108.     void SetConfig(CRef<CSeqGraphicConfig> config);
  109.     
  110.     /// The config object has changed. Do what is necessary.
  111.     void UpdateConfig();
  112.     
  113.     // override fltk redraw.
  114.     void redraw();
  115.     void OnShowPopup(void);
  116.     DECLARE_CMD_MAP();
  117. public:
  118.     void OnZoomIn(void);
  119.     void OnZoomOut(void);
  120.     void OnZoomAll(void);
  121.     void OnZoomObject(void);
  122.     void OnPrevExon(void);
  123.     void OnNextExon(void);
  124. private:
  125.     friend void s_CSeqGraphicWidget_ScrollCB (Fl_Widget*, void*);
  126.     friend void s_CSeqGraphicWidget_SliderXCB(Fl_Widget*, void*);
  127.     friend void s_CSeqGraphicWidget_SearchXCB(Fl_Widget*, void*);
  128.     
  129.     friend void s_CSeqGraphicWidget_PrevXCB(Fl_Widget*, void*);
  130.     friend void s_CSeqGraphicWidget_NextXCB(Fl_Widget*, void*);
  131.     friend class CSeqGraphicPane;
  132.     void x_ScrollCB();
  133.     void x_SliderCB();
  134.     void x_SearchCB();
  135.     void x_PrevCB();
  136.     void x_NextCB();
  137.     
  138.     void x_UpdateSearchMsg(int pos);
  139.     
  140.     Fl_Scrollbar*    m_ScrollX;
  141.     Fl_Scrollbar*    m_ScrollY;
  142.     Fl_Value_Slider* m_SlideZoomX;
  143.     
  144.     int m_SearchCount;
  145.     string m_SearchStr;
  146.     
  147.     Fl_Input*       m_SearchInput;
  148.     Fl_Button*       m_PrevButton;
  149.     Fl_Button*       m_GoButton;
  150.     Fl_Button*       m_NextButton;
  151.     Fl_Choice*       m_SearchChoice;
  152.     Fl_Choice*       m_RangeChoice;
  153.     
  154.     CSeqGraphicPane* m_SeqGraphicPane;
  155. };
  156. END_NCBI_SCOPE
  157. /*
  158.  * ===========================================================================
  159.  * $Log: seqgraphic_widget.hpp,v $
  160.  * Revision 1000.2  2004/06/01 19:53:30  gouriano
  161.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.10
  162.  *
  163.  * Revision 1.10  2004/05/03 12:46:32  dicuccio
  164.  * gui/utils ->gui/objutils where needed
  165.  *
  166.  * Revision 1.9  2004/04/16 14:35:49  dicuccio
  167.  * Inherit from ISelection to support standard selection marshalling interface
  168.  *
  169.  * Revision 1.8  2004/03/30 13:56:13  lebedev
  170.  * Move EDisplayElement list to CSeqGraphicColorConfig
  171.  *
  172.  * Revision 1.7  2004/03/12 15:57:34  lebedev
  173.  * Implemented CCommandTarget interface, so the widget
  174.  * can use command maps
  175.  *
  176.  * Revision 1.6  2004/03/11 17:23:38  dicuccio
  177.  * Use TSeqRange instead of TRange.  Deprecated TIndex / TPosition / TDimension
  178.  *
  179.  * Revision 1.5  2004/02/13 18:08:00  lebedev
  180.  * Use SeqGraphic config for enabling/disabling viewing options
  181.  *
  182.  * Revision 1.4  2004/02/10 13:14:32  lebedev
  183.  * ISelHandlerHost interface implemented for selections on sequence pane
  184.  *
  185.  * Revision 1.3  2004/01/27 16:12:26  lebedev
  186.  * Methods for working with  selections added
  187.  *
  188.  * Revision 1.2  2004/01/20 20:32:29  rsmith
  189.  * add UpdatedConfig method.
  190.  *
  191.  * Revision 1.1  2003/12/22 12:52:42  lebedev
  192.  * New files added
  193.  *
  194.  * Revision 1.21  2003/11/19 20:34:45  friedman
  195.  * API to detect and reset visible range change
  196.  *
  197.  * Revision 1.20  2003/11/18 20:47:23  rsmith
  198.  * SetConfig and redraw
  199.  *
  200.  * Revision 1.19  2003/11/13 15:31:25  lebedev
  201.  * Methods to get visible sequence range added
  202.  *
  203.  * Revision 1.18  2003/11/06 20:01:08  dicuccio
  204.  * Removed USING_SCOPE(objects)
  205.  *
  206.  * Revision 1.17  2003/10/24 13:21:18  lebedev
  207.  * ZoomOnRange method added (in model space)
  208.  *
  209.  * Revision 1.16  2003/10/09 16:25:30  lebedev
  210.  * Use new IRenderable interface for panels
  211.  *
  212.  * Revision 1.15  2003/09/16 14:37:14  dicuccio
  213.  * Cleaned up and clarified export specifiers - added a new specifier for each
  214.  * library
  215.  *
  216.  * Revision 1.14  2003/09/12 13:00:10  dicuccio
  217.  * Changed export specifiers
  218.  *
  219.  * Revision 1.13  2003/08/18 16:17:51  lebedev
  220.  * New methods to show/hide features added
  221.  *
  222.  * Revision 1.12  2003/08/15 19:33:23  dicuccio
  223.  * Changed location of print code
  224.  *
  225.  * Revision 1.11  2003/08/14 18:36:16  lebedev
  226.  * Feature search added
  227.  *
  228.  * Revision 1.10  2003/07/29 13:39:55  lebedev
  229.  * eGraphs enum added
  230.  *
  231.  * Revision 1.9  2003/07/23 17:51:20  dicuccio
  232.  * Added API to retrieve an option's state
  233.  *
  234.  * Revision 1.8  2003/07/22 13:34:53  lebedev
  235.  * enums to variouse display options added
  236.  *
  237.  * Revision 1.7  2003/07/21 19:25:04  dicuccio
  238.  * Added selection accessors
  239.  *
  240.  * Revision 1.6  2003/06/20 14:46:53  dicuccio
  241.  * Added Print()
  242.  *
  243.  * Revision 1.5  2003/06/10 12:00:37  lebedev
  244.  * Rendering engine separated from FLTK into it's own class
  245.  *
  246.  * Revision 1.4  2003/06/05 11:22:04  lebedev
  247.  * Prepare to separate display renderer from the widget itself
  248.  *
  249.  * Revision 1.3  2003/05/23 10:56:10  lebedev
  250.  * New rendering engine, hit test engine, many other changes
  251.  *
  252.  * Revision 1.2  2003/05/19 16:54:39  dicuccio
  253.  * Better memory management - inherit data source from CObject
  254.  *
  255.  * Revision 1.1  2003/05/16 16:37:59  lebedev
  256.  * Initial revision
  257.  *
  258.  * ===========================================================================
  259.  */
  260. #endif  /* GUI_WIDGETS_SEQ_GRAPHIC___SEQGRAPHIC_WIDGET__HPP */