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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: graph_panel.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:48:06  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_GRAPH___GRAPH_PANEL__HPP
  10. #define GUI_GRAPH___GRAPH_PANEL__HPP
  11. /*  $Id: 
  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:  Andrey Yazhuk
  37.  *
  38.  * File Description:
  39.  *
  40.  */
  41. #include <gui/graph/igraph.hpp>
  42. #include <gui/graph/scroll_widget.hpp>
  43. #include <gui/graph/legend.hpp>
  44. #include <gui/graph/regular_grid.hpp>
  45. #include <gui/graph/axis.hpp>
  46. /** @addtogroup GUI_GRAPH
  47.  *
  48.  * @{
  49.  */
  50. BEGIN_NCBI_SCOPE
  51. ////////////////////////////////////////////////////////////////////////////////
  52. /// class CGraphPanel 
  53. /// CGraphPanel class is an assembly of a number of "graph" library objects. It 
  54. /// contains 3 instances of CGlPane - one for drawing graphs, one for decorations
  55. /// such as grid and axes, and one for drawing legend.
  56. /// CGraphPanel instantiates CGlPane objects, Grid Generator and Renderer, Legend
  57. /// and Axis Area objects. It accepts arbitary number of IGraph objects. The class 
  58. /// performs rendering of all its subcomponents with respect to Z-order.
  59. /// Customization of the CGraphPanel can be achived by overriding virtual functions
  60. /// or by calling directly functions of its subcomponents.
  61. class NCBI_GUIGRAPH_EXPORT CGraphPanel
  62. {
  63. public:
  64.     enum    ELimitsMode {
  65.         eGraphLimits, // limits of the pane are defined by limits of the graph
  66.         eRounded, // same as eGraphLimits but extended by rounding to the "nice" numbers
  67.         eFixed    // explicitly specified
  68.     };
  69.     CGraphPanel();
  70.     virtual ~CGraphPanel();
  71.     // Create function should be called in order to create subcomponents
  72.     virtual void    Create();
  73.     // Layout functions
  74.     void    SetRect(const TVPRect& rcAll, bool bLayout = true);
  75.     // GraphOffsetX - distance from the left side of the panel to the left side of Graph pane
  76.     // GraphOffsetY - distance from the top side of Legend to bottom side of Graph pane
  77.     // LegendOffsetX - distance from the left side of the panel to the left side of Legend
  78.     // LegendH - Legend height
  79.     void    SetLayout( int GraphOffsetX, int GraphOffsetY, 
  80.                        int LegendOffsetX, int LegendH, bool bLayout = true);    
  81.     
  82.     void    Layout(); // perfroms layouts internal components accordingly to layout settings
  83.     // Graph pane limits management function
  84.     void    SetLimitsMode(ELimitsMode ModeX, ELimitsMode ModeY);
  85.     void    SetFixedLimits(const TModelRect& rcLimits);
  86.     void    UpdateLimits();
  87.     // Setup functions
  88.     void    SetIntegerMode(bool bIntegerX, bool bIntegerY);
  89.     void    SetDrawGrid(bool bDraw);
  90.     void    SetDrawAxes(bool bDraw);
  91.     void    EnableAntiAliasing(bool bEn);
  92.     void    SetBackColor(const CGlColor& Color, const CGlColor& GraphColor);    
  93.     void    AddGraph(IGraph* pGraph);
  94.     void    RemoveAllGraphs();
  95.     void    Render();
  96.     // direct access to components
  97.     CGlPane&    GetGraphPane()  {   return m_GraphPane; }
  98.     CLegend*    GetLegend() {   return m_pLegend;   }
  99.     CAxisArea*  GetAxisArea() { return m_pAxisArea; }
  100. protected:
  101.     void    PrepareContext();
  102.     
  103.     // factory methods
  104.     virtual CAxisArea*  CreateAxisArea();
  105.     virtual CLegend*    CreateLegend();
  106. protected:    
  107.     typedef list<IGraph*> TGraphCont;
  108.     CRegularGridGen m_Gen;
  109.     CRegularGridRenderer m_Grid;
  110.     
  111.     CAxisArea*  m_pAxisArea;
  112.     CLegend*    m_pLegend;    
  113.     
  114.     CGlPane  m_GraphPane;
  115.     CGlPane  m_Pane;        
  116.     CGlPane  m_LegendPane;
  117.     TGraphCont  m_Graphs;
  118.     TVPRect m_rcAll;
  119.     int m_GraphOffsetX, m_GraphOffsetY;
  120.     int m_LegendOffsetX, m_LegendH;
  121.     ELimitsMode m_LimitsModeX, m_LimitsModeY;
  122.     bool m_bDrawGrid;
  123.     bool m_bDrawAxes;
  124.     bool m_bAntiAliasing;
  125.     CGlColor m_BackColor;
  126.     CGlColor m_GraphBackColor;
  127. };
  128. END_NCBI_SCOPE
  129. /*
  130.  * ===========================================================================
  131.  * $Log: graph_panel.hpp,v $
  132.  * Revision 1000.1  2004/06/01 19:48:06  gouriano
  133.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  134.  *
  135.  * Revision 1.3  2004/05/11 18:54:43  dicuccio
  136.  * Added doxygen modules info
  137.  *
  138.  * Revision 1.2  2003/09/04 13:58:42  dicuccio
  139.  * Added export specifiers.  Inlined destructors of interface classes
  140.  *
  141.  * Revision 1.1  2003/08/14 17:55:59  yazhuk
  142.  * Initial revision
  143.  *
  144.  * ===========================================================================
  145.  */
  146. #endif  // GUI_GRAPH___GRAPH_PANEL__HPP