Upstream tarball 20080418
[amule.git] / src / OScopeCtrl.h
blob9dc8c2c678cd689816a593f26464775d398bcf2f
1 //
2 // This file is part of the aMule Project.
3 //
4 // Copyright (c) 2003-2008 aMule Team ( admin@amule.org / http://www.amule.org )
5 // Copyright (c) 2002 Merkur ( devs@emule-project.net / http://www.emule-project.net )
6 //
7 // Any parts of this program derived from the xMule, lMule or eMule project,
8 // or contributed by third-party developers are copyrighted by their
9 // respective authors.
11 // This program is free software; you can redistribute it and/or modify
12 // it under the terms of the GNU General Public License as published by
13 // the Free Software Foundation; either version 2 of the License, or
14 // (at your option) any later version.
16 // This program is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 // GNU General Public License for more details.
20 //
21 // You should have received a copy of the GNU General Public License
22 // along with this program; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
26 #ifndef OSCOPECTRL_H
27 #define OSCOPECTRL_H
29 #ifndef NULL
30 #define NULL 0
31 #endif
33 #include <wx/control.h> // Needed for wxControl
34 #include <wx/timer.h> // Needed for wxTimer
35 #include <wx/pen.h>
36 #include <wx/bitmap.h>
38 #include "Color.h" // Needed for COLORREF and RGB
39 #include "Statistics.h" // Needed for StatsGraphType
41 class wxMemoryDC;
43 /////////////////////////////////////////////////////////////////////////////
44 // COScopeCtrl window
46 #define TIMER_OSCOPE 7641
48 class COScopeCtrl : public wxControl
50 friend class CStatisticsDlg;
52 public:
53 COScopeCtrl(int NTrends, int nDecimals, StatsGraphType type, wxWindow* parent = NULL);
54 ~COScopeCtrl();
56 void SetRange(float dLower, float dUpper, unsigned iTrend = 0);
57 void SetRanges(float dLower, float dUpper);
58 void SetYUnits(const wxString& string,
59 const wxString& YMin = wxEmptyString, const wxString& YMax = wxEmptyString);
60 void SetBackgroundColor(COLORREF color);
61 void SetGridColor(COLORREF color);
62 void SetPlotColor(COLORREF color, unsigned iTrend = 0);
63 float GetUpperLimit() { return pdsTrends[0].fUpperLimit; }
64 void Reset(double sNewPeriod);
65 void Stop();
66 void RecreateGraph(bool bRefresh=true);
67 void RecreateGrid();
68 void AppendPoints(double sTimestamp, const std::vector<float *> &apf);
69 void DelayPoints() { nDelayedPoints++; }
71 StatsGraphType graph_type;
73 public:
74 unsigned nTrends;
75 unsigned nXGrids;
76 unsigned nYGrids;
77 unsigned nShiftPixels; // amount to shift with each new point
78 unsigned nYDecimals;
80 wxString strXUnits;
81 wxString strYUnits, strYMin, strYMax;
82 wxColour m_bgColour;
83 wxColour m_gridColour;
85 typedef struct PlotDataStruct {
86 COLORREF crPlot; // data plot color
87 wxPen penPlot;
88 unsigned yPrev;
89 float fPrev;
90 float fLowerLimit; // lower bounds
91 float fUpperLimit; // upper bounds
92 float fVertScale;
93 } PlotData_t ;
96 protected:
97 DECLARE_EVENT_TABLE()
98 PlotData_t *pdsTrends;
100 wxRect m_rectClient;
101 wxRect m_rectPlot;
102 wxBrush brushBack;
103 wxBitmap m_bmapGrid;
104 wxBitmap m_bmapPlot;
106 void InvalidateGraph() { InvalidateCtrl(true, false); }
107 void InvalidateGrid() { InvalidateCtrl(false, true); }
109 private:
110 bool bRecreateGrid, bRecreateGraph, bStopped;
111 int nDelayedPoints;
112 double sLastTimestamp;
113 double sLastPeriod;
114 wxTimer timerRedraw;
115 void OnTimer(wxTimerEvent& evt);
116 void OnPaint(wxPaintEvent& evt);
117 void OnSize(wxSizeEvent& evt);
118 void ShiftGraph(unsigned cntPoints);
119 void PlotHistory(unsigned cntPoints, bool bShiftGraph, bool bRefresh);
120 void DrawPoints(const std::vector<float *> &apf, unsigned cntPoints);
121 unsigned GetPlotY(float fPlot, PlotData_t* ppds);
122 void InvalidateCtrl(bool bInvalidateGraph = true, bool bInvalidateGrid = true);
125 #endif // OSCOPECTRL_H
126 // File_checked_for_headers