seqgraphic_pane.hpp

来自「ncbi源码」· HPP 代码 · 共 422 行

HPP
422
字号
/* * =========================================================================== * PRODUCTION $Log: seqgraphic_pane.hpp,v $ * PRODUCTION Revision 1000.1  2004/04/16 17:51:18  gouriano * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.17 * PRODUCTION * =========================================================================== */#ifndef GUI_WIDGETS_SEQ_GRAPHIC___SEQGRAPHIC_PANE__HPP#define GUI_WIDGETS_SEQ_GRAPHIC___SEQGRAPHIC_PANE__HPP/*  $Id: seqgraphic_pane.hpp,v 1000.1 2004/04/16 17:51:18 gouriano Exp $ * =========================================================================== * *                            PUBLIC DOMAIN NOTICE *               National Center for Biotechnology Information * *  This software/database is a "United States Government Work" under the *  terms of the United States Copyright Act.  It was written as part of *  the author's official duties as a United States Government employee and *  thus cannot be copyrighted.  This software/database is freely available *  to the public for use. The National Library of Medicine and the U.S. *  Government have not placed any restriction on its use or reproduction. * *  Although all reasonable efforts have been taken to ensure the accuracy *  and reliability of the software and data, the NLM and the U.S. *  Government do not and cannot warrant the performance or results that *  may be obtained by using this software or data. The NLM and the U.S. *  Government disclaim all warranties, express or implied, including *  warranties of performance, merchantability or fitness for any particular *  purpose. * *  Please cite the author in any work or product based on this material. * * =========================================================================== * * Authors:  Vlad Lebedev * * File Description: *   Pane for the Graphic Sequence Widget  *   (see <gui/widgets/seq_graphic/seqgraphic_widget.hpp>) * */#include <gui/widgets/seq_graphic/seqgraphic_render.hpp>#include <gui/gui.hpp>#include <gui/opengl.h>#include <gui/opengl/glcanvas2d.hpp>#include <gui/widgets/seq_graphic/seqgraphic_ds.hpp>#include <gui/widgets/seq_graphic/seqgraphic_widget.hpp>#include <gui/widgets/seq_graphic/seqgraphic_conf.hpp>//#include <gui/widgets/seq_graphic/mouse_scroll_handler.hpp>#include <gui/widgets/gl/linear_sel_handler.hpp>#include <gui/widgets/gl/mouse_zoom_handler.hpp>#include <gui/widgets/gl/glpane_widget.hpp>#include <gui/widgets/fl/tooltip.hpp>#include <FL/Fl.H>#include <FL/Fl_Slider.H>BEGIN_NCBI_SCOPEclass CSeqGraphicPane : public CGlPaneWidgetChild,                        public IMouseZoomHandlerHost, // for zooming with mouse                        //public IMouseScrollHandlerHost, // for scrolling with mouse                                                        // in the sequence overview panel                        public ISelHandlerHost, // for linear selection                        public ITooltipClient // for using with "active" CTooltip{public:    typedef CLinearSelHandler::TRangeColl TRangeColl;        // special GUI states    enum {        eLensZoomState = (1<<8),        eZoomInState,        eZoomOutState,        eZoomInFullState,        eZoomOutFullState    };        // Feature navigation    enum EDirection {        eNext,        ePrev    };    CSeqGraphicPane(int x, int y, int w, int h);    virtual ~CSeqGraphicPane();    void SetWidget(CSeqGraphicWidget* widget);    void SetDataSource(CSeqGraphicDataSource* ds);    const CSeqGraphicDataSource* GetDataSource(void) const;    void GetFeatureNames(vector<string>& names);        void ShowFeature(CSeqFeatData::E_Choice t,                     CSeqFeatData::ESubtype s, bool flag);    bool IsFeatureShown(CSeqFeatData::E_Choice t,                         CSeqFeatData::ESubtype s);    int SearchFeature(string pattern, string feature, bool is_local);    int SearchFeatureNext();    int SearchFeaturePrev();        float GetZoomX(void) const;    void SetZoomX (float value);    void ZoomOnRange(const TSeqRange& range);        // returns the visible sequence range    TSeqRange GetVisibleRange(void) const;        // indicates visible sequence range has changes    bool VisibleRangeChanged() const;    void ResetVisibleRangeChanged();    void Scroll(TModelUnit x, TModelUnit y);        void SetConfig(CRef<CSeqGraphicConfig> config);        /// the config object just changed. Do what is necessary.    void UpdateConfig();    // set/clear selections    //void SelectObject(const CLayoutObject* obj);    void SelectObject(const CObject* obj);    void SelectSeqLoc(const CSeq_loc* loc);    void ClearSelection();    // retrieve the selections from our renderer    const TConstObjects& GetSelectedObjects(void) const;    const TRangeColl&    GetSelectedSeqRanges(void) const;    // IMouseZoomHandlerHost implementation    virtual TModelUnit MZHH_GetScale(EScaleType type);    virtual void       MZHH_SetScale(TModelUnit scale, const TModelPoint& point);    virtual void       MZHH_ZoomRect(const TModelRect& rc);    virtual void       MZHH_Scroll(TModelUnit d_x, TModelUnit d_y);    virtual TVPUnit    MZHH_GetVPPosByY(int y) const;    virtual void       MZHH_Redraw(void);    // IMouseZoomHandlerHost end    // IMouseScrollHandlerHost implementation    //virtual void       MSHH_Scroll(TVPUnit v_x);    //virtual TVPUnit    MSHH_GetVPPosByX(int y) const;    //virtual void       MSHH_Redraw(void);    // IMouseScrollHandlerHost end        // ISelHandlerHost implementation    virtual void        SHH_Redraw();    virtual TModelUnit  SHH_GetModelByWindow(int z, EOrientation orient);    virtual TVPUnit     SHH_GetWindowByModel(TModelUnit z, EOrientation orient);    // ISelHandlerHost end    // ITooltipClient implementation    virtual bool    TC_NeedTooltip(int x, int y);        virtual string  TC_GetTooltip(int& x, int& y, int& w, int& h);    // ITooltipClient endpublic:    // command handlers    void ZoomIn(void);    void ZoomOut(void);    void ZoomAll(void);    void ZoomObject(void);    void NextPrevExon(EDirection dir);    protected:    enum EHandlerArea   {        fFeaturesArea = 0x1,        fSeqRulerArea =  0x2,        fScrollArea =    0x4,        fOther = 0x80000000,        fAllAreas = fFeaturesArea | fSeqRulerArea | fScrollArea | fOther    };     int x_GetAreaByMousePos();    void x_OnShowPopup();    friend void s_CSeqGraphicPane_ZoomTimer(void*);    private:    CRef<CSeqGraphicDataSource> m_DS;        CRef<CSeqGraphicRenderer>   m_Renderer;    CRef<CSeqGraphicConfig>     m_ConfigSettings;        // always store the last selected object    CConstRef<CObject>          m_LastSelObj;    CConstRef<CLayoutObject>    m_LastSelLayoutObj;        CSeqGraphicWidget* m_ParentWidget;        CLinearSelHandler   m_SelHandler;    CMouseZoomHandler   m_MouseZoomHandler;    //CMouseScrollHandler m_MouseScrollHandler;    // For Tooltips    CTooltip    m_Tooltip;    string      m_TooltipText;        // For Searches    CLayoutFeat::TFeatList  m_SearchResults;    size_t                  m_SearchIndex;    // indicate visible sequence range changes    bool m_VisibleRangeChanged;        // Timer-specific    bool m_TimerActive;    bool m_ZoomingIn; // zooming In or Out    TVPUnit m_TimerX, m_TimerY;    void x_Render();    virtual int handle(int event);        TVPPoint GetPortSize(void);    // --- Methods    void x_AdjustScrollBars   (void);    void x_AdjustZoomSlider   (void);        // Event Handlers    void x_Handle_ClipboardCopy(void);    void x_Handle_LensZoom     (void);    void x_Handle_TimerZoom    (void);};END_NCBI_SCOPE/* * =========================================================================== * $Log: seqgraphic_pane.hpp,v $ * Revision 1000.1  2004/04/16 17:51:18  gouriano * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.17 * * Revision 1.17  2004/04/16 14:53:04  dicuccio * Pass objects using TConstObjects, not TObjSelections.  Added ISelection * interfaces. * * Revision 1.16  2004/04/15 13:02:13  lebedev * HitTesting for LayoutObjects changed * * Revision 1.15  2004/03/24 15:48:55  dicuccio * Restored inadvertent delete * * Revision 1.13  2004/03/24 15:14:32  dicuccio * Changed #include for renderer * * Revision 1.12  2004/03/23 12:33:55  lebedev * Made sequence and histograms bars a layout objects in the object panel. * Made segment map a number of layout objects. Get rid of fixed size rows in the object panel. * * Revision 1.11  2004/03/12 15:59:00  lebedev * Command handlers for zooming and feature navigation added. * * Revision 1.10  2004/03/11 17:53:06  dicuccio * Deprecated typedefs TPosition, TDimension, TIndex, TColor.  Use TSeqRange instead of TRange * * Revision 1.9  2004/03/08 17:00:03  lebedev * Zooming clicking and holding the mouse button added. 'I' key to zoom in and * 'Shift-I' key to zoom out. * * Revision 1.8  2004/03/04 14:38:56  lebedev * Avoid event handlers conflicts by inheriting from CGlPaneWidgetChild. * Support for new mouse scroll handler added. Re-enable lens zoom (L key). * * Revision 1.7  2004/02/13 18:11:32  lebedev * Use SeqGraphic config for enabling/disabling viewing options * * Revision 1.6  2004/02/10 13:15:33  lebedev * ISelHandlerHost interface implemented for selections on sequence pane * * Revision 1.5  2004/01/30 21:10:01  dicuccio * Reworked event loop to use CGUIEvent entirely.  Added handling of * copy-to-clipboard * * Revision 1.4  2004/01/27 16:14:19  lebedev * Changed stored selection from CLayoutObject to CObject * * Revision 1.3  2004/01/20 20:35:30  rsmith * Add UpdateConfig method to notify classes when the configuration object has changed. * * Revision 1.2  2004/01/16 13:40:15  lebedev * Tooltips added * * Revision 1.1  2003/12/22 12:59:01  lebedev * Files renamed * * Revision 1.31  2003/12/16 18:55:26  lebedev * ScaleRefPoint implementation fixed (do not project reference point into model space) * * Revision 1.30  2003/12/10 17:00:26  yazhuk * Updated implementation of  IMouseZoomHandlerHost interface. * * Revision 1.29  2003/12/09 12:40:00  lebedev * Implemented IMouseZoomHandlerHost interface for zooming and scrolling with mouse * * Revision 1.28  2003/11/19 20:37:46  friedman * API to detect and reset visible range change * * Revision 1.27  2003/11/13 15:31:52  lebedev * Methods to get visible sequence range added * * Revision 1.26  2003/10/28 19:01:43  dicuccio * Fixed compilation errors.  Pass CBioseq_Handle by const-ref and store as value, * not as pointer * * Revision 1.25  2003/10/28 15:29:07  lebedev * Use new configuration library * * Revision 1.24  2003/10/24 13:25:56  lebedev * Use logarithmic scale fo zoom. * Better scrolling in sequence pane. * * Revision 1.23  2003/10/22 18:32:56  lebedev * Histogram display of features added (and compressed display) * Zoom to mouse and scroll with mouse added. * * Revision 1.22  2003/10/10 15:29:11  lebedev * Selection on a sequence and icon view added * * Revision 1.21  2003/10/09 16:27:09  lebedev * Widget redesign: Use independent IRenderable panels for display * * Revision 1.20  2003/08/18 16:18:33  lebedev * New methods to show/hide features added * * Revision 1.19  2003/08/14 18:39:46  lebedev * Search of features in the widget added. * Display panels are fully configurable now. Use feature type and subtype * combination to identify and configure features in the display. Some code * cleanup. * * Revision 1.18  2003/07/23 19:13:41  dicuccio * Added API to retrieve the value of a configured parameter * * Revision 1.17  2003/07/22 13:40:22  lebedev * Highlign master sequence in the alignment display * Anchor master sequence. In Lens 10x mode show viewing range on the * sequence bar. Improved (faster) drawing of STSs and Repeat regions. * * Revision 1.16  2003/07/21 19:36:42  dicuccio * Externalized selections.  Make sure to call the correct base class when * passing to the base class.  Moved some initialization into intializer lists. * * Revision 1.15  2003/07/18 18:16:14  lebedev * Get rid of static variable in handle method * * Revision 1.14  2003/06/20 14:55:21  dicuccio * Minor clean-ups.  Changed derivation of the graphical widget from Fl_Gl_Window * to CGlCanvas2d * * Revision 1.13  2003/06/13 12:40:42  dicuccio * Modified handle() to use processed events from CFltkEvent * * Revision 1.12  2003/06/12 19:49:34  dicuccio * Derive CSeqGraphicRenderer from CObject; manage as CRef<> in panel * * Revision 1.11  2003/06/11 11:10:58  lebedev * New method to specify viewing area added * * Revision 1.10  2003/06/10 12:01:58  lebedev * Rendering engine separated from FLTK into it's own class * * Revision 1.9  2003/06/05 11:22:32  lebedev * Prepare to separate display renderer from the widget itself * * Revision 1.8  2003/06/03 16:20:11  lebedev * FLTK calls removed from feature rendering engine. Minor clean-up. * * Revision 1.7  2003/06/02 16:06:29  dicuccio * Rearranged src/objects/ subtree.  This includes the following shifts: *     - src/objects/asn2asn --> arc/app/asn2asn *     - src/objects/testmedline --> src/objects/ncbimime/test *     - src/objects/objmgr --> src/objmgr *     - src/objects/util --> src/objmgr/util *     - src/objects/alnmgr --> src/objtools/alnmgr *     - src/objects/flat --> src/objtools/flat *     - src/objects/validator --> src/objtools/validator *     - src/objects/cddalignview --> src/objtools/cddalignview * In addition, libseq now includes six of the objects/seq... libs, and libmmdb * replaces the three libmmdb? libs. * * Revision 1.6  2003/05/30 11:29:19  lebedev * Added: Clickable Feature selection. Drawing of intervals. * * Revision 1.5  2003/05/23 16:01:51  lebedev * Show Labels for visible genes only * * Revision 1.4  2003/05/23 10:56:21  lebedev * New rendering engine, hit test engine, many other changes * * Revision 1.3  2003/05/19 16:53:55  dicuccio * Better memory management.  Minor rearrangement of #includes * * Revision 1.2  2003/05/16 19:00:08  dicuccio * Fixed compilation errors for linux (const functions/variables, * #include <math.h> * * Revision 1.1  2003/05/16 16:46:02  lebedev * Initial revision * * =========================================================================== */#endif  /* GUI_WIDGETS_SEQ_GRAPHIC___SEQGRAPHIC_PANE__HPP */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?