alnmulti_pane.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:12k
- /*
- * ===========================================================================
- * PRODUCTION $Log: alnmulti_pane.hpp,v $
- * PRODUCTION Revision 1000.4 2004/04/12 18:15:55 gouriano
- * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.30
- * PRODUCTION
- * ===========================================================================
- */
- #ifndef __GUI_WIDGETS_ALNMULTI___ALNMULTI_PANE__HPP
- #define __GUI_WIDGETS_ALNMULTI___ALNMULTI_PANE__HPP
- /* $Id: alnmulti_pane.hpp,v 1000.4 2004/04/12 18:15:55 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:
- *
- */
- #include <corelib/ncbistl.hpp>
- #include <gui/opengl/glcanvas2d.hpp>
- #include <gui/widgets/gl/ruler.hpp>
- #include <gui/widgets/gl/mouse_zoom_handler.hpp>
- #include <gui/widgets/gl/linear_sel_handler.hpp>
- #include <gui/widgets/fl/tooltip.hpp>
- #include <gui/widgets/aln_multiple/alnmulti_renderer.hpp>
- #include <gui/widgets/aln_multiple/alnmulti_base_pane.hpp>
- #include <gui/widgets/aln_multiple/list_mvc.hpp>
- #include <gui/widgets/aln_multiple/sel_list_controller.hpp>
- #include <gui/widgets/aln_multiple/align_mark_handler.hpp>
- BEGIN_NCBI_SCOPE
- typedef ISelListView<IAlnMultiDataSource::TNumrow> TNumrowSelListView;
- typedef CSelListController<IAlnMultiDataSource::TNumrow> TNumrowSelListController;
- ////////////////////////////////////////////////////////////////////////////////
- /// class CAlnMultiPane
- class NCBI_GUIWIDGETS_ALNMULTIPLE_EXPORT CAlnMultiPane
- : public CGlCanvas2d,
- public TNumrowSelListController,
- public TNumrowSelListView,
- public ISelHandlerHost,
- public IAlignMarkHandlerHost,
- public IMouseZoomHandlerHost,
- public IAlignRowHost
- {
- public:
- typedef CLinearSelHandler::TRangeColl TRangeColl;
- typedef IAlignRow::EColumnType EColumnType;
- typedef map<TNumrow, TRangeColl> TRowToMarkMap;
- typedef ISelListModel<TNumrow> TSelListModel;
- CAlnMultiPane(int PosX, int PosY, int Width, int Height, const char* Label = NULL);
-
- void SetWidget(IAlnMultiPaneParent* p_arent);
- void SetContext(IAlnMultiRendererContext* p_context);
- void SetBackColor(const CGlColor Color);
-
- // FLTK overridables
- virtual void resize(int x, int y, int w, int h);
- virtual int handle(int event);
- virtual void draw();
- /// @name Interface for a Widget
- /// @{
- int GetAlignVPHeight() const;
- int GetAlignVPWidth() const;
- virtual void Update();
- virtual void Render();
- CRuler& GetRuler();
- void SetRulerHeight(int height);
-
- CAlnMultiRenderer& GetRenderer();
- CRange<TSeqPos> GetSelectionLimits();
- const TRangeColl& GetSelection() const;
- void SetSelection(const TRangeColl& C, bool bRedraw);
- void ResetSelection(bool bRedraw);
-
- void MarkSelectedRows(const TRangeColl& C, bool bMark);
- void UnMarkAll();
- const TRowToMarkMap& GetMarks() const;
- /// @}
- /// @name CSelListController extension
- /// @{
- virtual TSelListModel* SLC_GetModel();
- virtual int SLC_GetHeight();
- virtual int SLC_GetLineByWindowY(int WinY, bool b_clip = false);
- virtual void SLC_VertScrollToMakeVisible(int Index);
- /// @}
- /// @name TNumrowSelListView implementation
- /// @{
- virtual void SLV_SetModel(TSelListModel* pModel);
- virtual void SLV_UpdateItems(const TIndexVector& vIndices);
- virtual void SLV_UpdateRange(int iFirstItem, int iLastItem);
- /// @}
- /// @name ISelHandlerHost implementation
- /// @{
- virtual void SHH_Redraw();
- virtual TModelUnit SHH_GetModelByWindow(int z, EOrientation orient);
- virtual TVPUnit SHH_GetWindowByModel(TModelUnit z, EOrientation orient);
- /// @}
- /// @name IAlnMarkHandlerHost implementation
- /// @{
- virtual const IAlnMultiDataSource* MHH_GetAlnDS() const;
- virtual const TSelListModel* MHH_GetSelListModel() const;
- virtual TNumrow MHH_GetRowByLine(int Index) const;
- virtual int MHH_GetLineByRowNum(TNumrow Row) const;
- virtual int MHH_GetLineByWindowY(int Y) const;
- virtual int MHH_GetLinePosY(int Index) const;
- virtual int MHH_GetLineHeight(int Index) const;
-
- virtual TModelUnit MHH_GetSeqPosByX(int X) const;
- virtual void MHH_Redraw();
- /// @}
- /// @name 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);
- /// @}
- /// @name IAlignRowHost implementation
- /// @{
- virtual void ARH_OnRowChanged(IAlignRow* p_row);
- virtual TVPPoint ARH_GetVPMousePos();
- /// @}
- int GetListAreaHeight() const { return m_Renderer.GetListAreaHeight(); }
- protected:
- // Rendering functions
- void x_RenderSelection();
- void x_RenderMark();
- void x_RenderZoomHandler();
- void x_Layout();
- /// @name Event handling
- /// @{
- int x_HandleKeyEvent();
- int x_HandleMouseMove();
- int x_HandleMousePush();
- int x_HandleMouseDrag();
- int x_HandleMouseRelease();
- int x_HandleMouseWheel();
- int x_Row_handle();
- void x_UpdateTooltip();
- virtual string x_GetRowTooltip(IAlignRow* p_row, int i_col, int vp_top_y);
- /// @}
-
- /// @name IEventHandler management function
- /// @{
- void x_AddHandler(IEventHandler* handler, int area);
- int x_Handlers_handle(int area, IEventHandler*& handler, bool ignore_curr = true);
-
- int x_GetLineByWindowY(int WinY) const;
- TVPRect x_GetLineRect(int Index);
- /// @}
- IAlnMultiPaneParent* x_GetParent() { return m_pParent; }
- const IAlnMultiPaneParent* x_GetParent() const { return m_pParent; }
- void x_SendCommand(TCmdID cmd);
- IAlnMultiRendererContext* x_GetContext() { return m_pContext; }
- const IAlnMultiRendererContext* x_GetContext() const { return m_pContext; }
- inline TSelListModel* x_GetModel() { return m_pModel; }
- inline const TSelListModel* x_GetModel() const { return m_pModel; }
- inline void x_NotifyParent(IAlnMultiPaneParent::ENotification notification);
-
- protected:
- enum EHandlerArea {
- fDescrArea = 0x1,
- fAlignArea = 0x2,
- fAllAreas
- };
- typedef list<pair<IEventHandler*, int> > THandlerList;
-
- IAlnMultiPaneParent* m_pParent;
- IAlnMultiRendererContext* m_pContext;
- TSelListModel* m_pModel;
- // event handling
- CGUIEvent m_Event;
- THandlerList m_lsHandlers;
- IEventHandler* m_pCurrHandler;
-
- CLinearSelHandler m_SelHandler;
- CAlignMarkHandler m_MarkHandler;
- CMouseZoomHandler m_MouseZoomHandler;
- CGlPane m_HandlerPane;
- CTooltip m_Tooltip;
- CAlnMultiRenderer m_Renderer;
- };
- inline void CAlnMultiPane::x_NotifyParent(IAlnMultiPaneParent::ENotification notification)
- {
- if(x_GetParent()) {
- x_GetParent()->OnNotify(notification);
- }
- }
- END_NCBI_SCOPE
- /*
- * ===========================================================================
- * $Log: alnmulti_pane.hpp,v $
- * Revision 1000.4 2004/04/12 18:15:55 gouriano
- * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.30
- *
- * Revision 1.30 2004/04/05 14:50:21 yazhuk
- * Zoom from keyboard
- *
- * Revision 1.29 2004/04/02 16:28:30 yazhuk
- * Implemented support for selection broadcasting
- *
- * Revision 1.28 2004/03/29 19:05:05 yazhuk
- * Added GetRenderer()
- *
- * Revision 1.27 2004/03/17 20:12:37 yazhuk
- * Added SetContext()
- *
- * Revision 1.26 2004/03/09 21:01:39 yazhuk
- * Clean-up; added comments
- *
- * Revision 1.25 2004/03/08 15:41:21 yazhuk
- * Moved rendering to CAlnMultiRenderer class.
- *
- * Revision 1.24 2004/02/17 15:19:37 yazhuk
- * Support for graphics caching
- *
- * Revision 1.23 2004/01/15 20:17:01 yazhuk
- * Added new argument to SLC_GetLineByWindowY()
- *
- * Revision 1.22 2004/01/08 19:42:12 yazhuk
- * Added x_GetColumnTypeByIndex(), modified x_GetRowTooltip()
- *
- * Revision 1.21 2003/12/29 23:20:23 yazhuk
- * Implemented tooltips using CTooltip
- *
- * Revision 1.20 2003/12/29 16:05:48 johnson
- * added msvc export specifier to CAlnMultiPane
- *
- * Revision 1.19 2003/12/22 16:20:59 yazhuk
- * Added access to Ruler
- *
- * Revision 1.18 2003/12/18 21:25:01 yazhuk
- * Updated code to support template ISelListModel
- *
- * Revision 1.17 2003/12/10 17:08:06 yazhuk
- * Updated IMouseZoomHandlerHost implementation. Added x_HandleMouseRelease().
- *
- * Revision 1.16 2003/12/08 15:10:20 yazhuk
- * Killed x_RenderContent() declaration
- *
- * Revision 1.15 2003/12/01 16:54:35 yazhuk
- * Refactored event handling - introduced CGUIEvent; added support for zooming by
- * rectangle and panoraming.
- *
- * Revision 1.14 2003/11/17 21:15:06 yazhuk
- * Update include for mouse_zoom_handler.hpp, fixed speling errors, renamed
- * GetScale() function
- *
- * Revision 1.13 2003/11/07 20:45:21 rsmith
- * Qualifiers like CAlnMultiPane:: are not allowed in the definition of class CAlnMultiPane.
- *
- * Revision 1.12 2003/11/03 16:55:33 yazhuk
- * Implemented IAlignRowHost interface and handling events by IAlignRow
- * objects. Added x_SetupPaneForRow(), x_SetupPaneForColumn() functions.
- *
- * Revision 1.11 2003/10/31 14:05:36 dicuccio
- * Fixed spelling error: CRuler -> CRuler
- *
- * Revision 1.10 2003/10/29 23:36:33 yazhuk
- * Replaced old classes with a new ones
- *
- * Revision 1.9 2003/10/20 15:50:09 yazhuk
- * Implemented generalized event handling using IEventHandler. Added CMouseZoomHandler.
- *
- * Revision 1.8 2003/10/15 21:21:42 yazhuk
- * Migrated from using CAlnVec to accessing data via "generic" interface in CAlignDataSource.
- *
- * Revision 1.7 2003/10/10 19:02:14 yazhuk
- * Changed inheritance from CAlnMultiEditPane to CGlCanvas2d
- *
- * Revision 1.6 2003/09/29 13:42:59 yazhuk
- * Implemented GetMarks()
- *
- * Revision 1.5 2003/09/23 21:04:28 yazhuk
- * Added support for Marks, added mouse event handling functions, added x_RenderRow function
- *
- * Revision 1.4 2003/09/15 13:39:48 yazhuk
- * SColumn::m_UserData compilation fix
- *
- * Revision 1.3 2003/09/10 21:48:19 yazhuk
- * GCC compilation fixes
- *
- * Revision 1.2 2003/09/10 20:42:52 yazhuk
- * Merged 4 Pane classes into CAlnMultiPane class. Introduced notion of Columns.
- *
- * Revision 1.1 2003/08/28 18:22:45 yazhuk
- * Initial revision
- *
- * ===========================================================================
- */
- #endif // __GUI_WIDGETS_ALNMULTI___ALNMULTI_PANE__HPP