⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 align_mark_handler.hpp

📁 ncbi源码
💻 HPP
字号:
/* * =========================================================================== * PRODUCTION $Log: align_mark_handler.hpp,v $ * PRODUCTION Revision 1000.3  2004/04/12 18:15:40  gouriano * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.13 * PRODUCTION * =========================================================================== */#ifndef GUI_WIDGETS_ALNMULTI___ALIGN_MARK_HANDLER__HPP#define GUI_WIDGETS_ALNMULTI___ALIGN_MARK_HANDLER__HPP/*  $Id: align_mark_handler.hpp,v 1000.3 2004/04/12 18:15:40 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:  Andrey Yazhuk * * File Description: * CAlignMarkHandler - class implementing support for Marks in alignments. * IAlignMarkHandlerHost - context in which CAlignMarkHandler operates. */#include <corelib/ncbistl.hpp>#include <corelib/ncbistd.hpp>#include <util/range_coll.hpp>#include <gui/opengl/glpane.hpp>#include <gui/utils/gui_event.hpp>#include <gui/widgets/gl/ievent_handler.hpp>#include <objects/seqloc/Seq_loc.hpp>#include <gui/widgets/aln_multiple/alnmulti_ds.hpp>#include <gui/widgets/aln_multiple/list_mvc.hpp>BEGIN_NCBI_SCOPE// Mark is collection of ranges representing selection on a sequence// CRangeCollection<TSeqPos> is used to repreesent marks/////////////////////////////////////////////////////////////////////////////////// interface IAlignMarkHandlerHost// This interface represent context in which CAlignMarkHandler operates.// This context provides the following things:// - A way to obtain ISelListModel interface in order to check which sequences are// currently selected. // - Functions for conversions Pixels <-> Line numbers <-> Alignment Row Indexes// - Function converting horz. screen coordinate in the position in alignment.// - Function forsing redrawing of the context.class IAlignMarkHandlerHost{public:    typedef IAlnMultiDataSource::TNumrow    TNumrow;    typedef CRangeCollection<TSeqPos>   TRangeColl;    typedef map<TNumrow, TRangeColl>    TRowToMarkMap;        typedef ISelListModel<TNumrow>  TSelListModel;public:    virtual ~IAlignMarkHandlerHost()  {};        virtual const IAlnMultiDataSource* MHH_GetAlnDS() const = 0;    virtual const TSelListModel*    MHH_GetSelListModel() const = 0;    virtual TNumrow    MHH_GetRowByLine(int Index) const = 0;    virtual int MHH_GetLineByRowNum(TNumrow Row) const = 0;    virtual int MHH_GetLineByWindowY(int Y) const = 0;    virtual int MHH_GetLinePosY(int Index) const = 0;    virtual int MHH_GetLineHeight(int Index) const = 0;        virtual TModelUnit  MHH_GetSeqPosByX(int X) const = 0;    virtual void    MHH_Redraw() = 0;};/////////////////////////////////////////////////////////////////////////////////// CAlignMarkHandler manages handling and editing of marks on alignments.////// It holds a collection of marks corresponding to sequences of the alignment/// and processes FLTK events in order to provide interactive editing of marks./// CAlignMarkHandler renders marks in the provided CGlPane instance (which needs/// to be properly setup). Each mark is represented as collection of intervals/// stored in CRangeCollection container.class CAlignMarkHandler : public IEventHandler{public:    typedef IAlnMultiDataSource::TNumrow    TNumrow;    typedef IAlignMarkHandlerHost::TRangeColl   TRangeColl;    typedef IAlignMarkHandlerHost::TSelListModel    TSelListModel;     typedef map<TNumrow, TRangeColl>    TRowToMarkMap;    CAlignMarkHandler();    void    SetHost(IAlignMarkHandlerHost* pHost);    /// IEventHandler implementation.    virtual int handle(CGUIEvent& event, CGlPane& Pane);    void    Render(CGlPane& Pane);  // renders marks      // opeartions with Mark (don't automaticaly update display)    void    MarkSelectedRows(const TRangeColl& C, bool bMark);    void    UnMarkAll();    void    UnMarkSelected();    const   TRowToMarkMap&  GetMarks() const;protected:    // FLTK event handlers - translate event to signals    int x_OnMousePush(CGUIEvent& event);    int x_OnMouseDrag(CGUIEvent& event);    int x_OnMouseRelease(CGUIEvent& event);    int x_OnMouseMove(CGUIEvent& event);    int x_OnKeyDown(CGUIEvent& event);    int x_OnKeyUp(CGUIEvent& event);    enum    EState {        eIdle,        eReady,        eResize        };            // signal handlers - functions doing the real job    void    x_OnStartSel();    void    x_OnChangeSelRange();    void    x_OnEndSelRange(EState new_state);    void    x_OnResetAll();        protected:    // helper class representing range being edited    struct SMarkDelta    {        enum    EExtState   {               eNoExt,            eExtRangeStart,            eExtRangeEnd,        };        TSeqRange   m_HitRange; // preexisted range that was hit by the mouse        TSeqRange   m_Range;    // current range        EExtState   m_StartState; //initial extension state        EExtState   m_State; //current extension state        SMarkDelta()    : m_StartState(eNoExt), m_State(eNoExt)   {}        SMarkDelta(const TSeqRange& HitR, const TSeqRange& R, EExtState StartS, EExtState S)            : m_HitRange(HitR), m_Range(R), m_StartState(StartS), m_State(S)   {}    };        // helper functions    bool        x_ModifiersOk()    const;    TModelUnit  x_MouseToSeqPos();    TSeqPos     x_ClipPosByRange(TSeqPos Pos);    bool        x_HitRangeBorder() const;        void    x_InitDeltaMap();    void    x_HitTest(TNumrow Row, const TRangeColl& C, int X, TSeqRange& Range, bool& bHitStart) const;    bool    x_HitSelectedLine();    void    x_UpdateDelta(TSeqRange& R, SMarkDelta::EExtState& State, TSeqPos Pos);    void    x_UpdateSelection(TSeqPos NewPos);    void    x_UpdateMarks();    void    x_UpdateState(bool b_key);    bool    x_OpKeyPressed()    const;    void    x_OnSelectCursor();    const IAlignMarkHandlerHost*    x_GetHost() const {   return m_pHost; }    IAlignMarkHandlerHost*    x_GetHost() {   return m_pHost; }protected:        typedef map<TNumrow, SMarkDelta>    TRowToDeltaMap;    TRowToMarkMap   m_mpRowToMark; // Marks    TRowToDeltaMap  m_mpRowToDelta; // Ranges being edited    IAlignMarkHandlerHost*  m_pHost;    CGlPane*    m_pPane;    bool        m_bHitResizable;    EState      m_State;   // operation type    Fl_Cursor   m_Cursor;    TSeqPos     m_PrevPos;        CGlColor    m_FillColor;    CGlColor    m_FrameColor;};END_NCBI_SCOPE/* * =========================================================================== * $Log: align_mark_handler.hpp,v $ * Revision 1000.3  2004/04/12 18:15:40  gouriano * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.13 * * Revision 1.13  2004/03/17 20:16:56  yazhuk * Replaced  #include <..fltk_utils.hpp> with <...gui_event.hpp> * * Revision 1.12  2004/03/11 17:24:13  dicuccio * Use TSeqRange instead of TRange * * Revision 1.11  2003/12/18 21:12:36  yazhuk * Updated code to supported template ISelListModel * * Revision 1.10  2003/12/10 17:12:09  yazhuk * Added colors as data members. * * Revision 1.9  2003/12/01 16:42:59  yazhuk * Refactored event handling - introduced CGUIEvent * * Revision 1.8  2003/11/17 21:12:00  yazhuk * Updated include path for ievent_handler.hpp * * Revision 1.7  2003/11/06 20:01:09  dicuccio * Removed USING_SCOPE(objects) * * Revision 1.6  2003/10/29 23:23:06  yazhuk * Replaced CAlnMultiDataSource with IAlignMultiDataSource * * Revision 1.5  2003/10/20 15:45:54  yazhuk * Inherited from IEventHandler * * Revision 1.4  2003/10/15 21:22:47  yazhuk * Migrated from using CAlnVec to accessing data via "generic" interface in CAlignDataSource. * * Revision 1.3  2003/10/08 14:12:58  dicuccio * Moved CGlPane into opengl * * Revision 1.2  2003/09/29 13:45:39  yazhuk * Added GetMarks() * * Revision 1.1  2003/09/23 21:18:37  yazhuk * Initial revision * * =========================================================================== */#endif  // GUI_WIDGETS_ALNMULTI___ALIGN_MARK_HANDLER__HPP

⌨️ 快捷键说明

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