Upstream tarball 9920
[amule.git] / src / OScopeCtrl.h
blobde2dfdce0f7cf91ec897ae7c91b14e26b7b4f5e4
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-2008 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>
37 #include <wx/colour.h>
39 #include "Statistics.h" // Needed for StatsGraphType
41 class wxMemoryDC;
43 /////////////////////////////////////////////////////////////////////////////
44 // COScopeCtrl window
46 class COScopeCtrl : public wxControl
48 friend class CStatisticsDlg;
50 public:
51 COScopeCtrl(int NTrends, int nDecimals, StatsGraphType type, wxWindow* parent = NULL);
52 ~COScopeCtrl();
54 void SetRange(float dLower, float dUpper, unsigned iTrend = 0);
55 void SetRanges(float dLower, float dUpper);
56 void SetYUnits(const wxString& string,
57 const wxString& YMin = wxEmptyString, const wxString& YMax = wxEmptyString);
58 void SetBackgroundColor(const wxColour& color);
59 void SetGridColor(const wxColour& color);
60 void SetPlotColor(const wxColour& color, unsigned iTrend = 0);
61 float GetUpperLimit() { return pdsTrends[0].fUpperLimit; }
62 void Reset(double sNewPeriod);
63 void Stop();
64 void RecreateGraph(bool bRefresh=true);
65 void RecreateGrid();
66 void AppendPoints(double sTimestamp, const std::vector<float *> &apf);
67 void DelayPoints() { nDelayedPoints++; }
69 StatsGraphType graph_type;
71 public:
72 unsigned nTrends;
73 unsigned nXGrids;
74 unsigned nYGrids;
75 unsigned nShiftPixels; // amount to shift with each new point
76 unsigned nYDecimals;
78 wxString strXUnits;
79 wxString strYUnits, strYMin, strYMax;
80 wxColour m_bgColour;
81 wxColour m_gridColour;
83 typedef struct PlotDataStruct {
84 wxColour crPlot; // data plot color
85 wxPen penPlot;
86 unsigned yPrev;
87 float fPrev;
88 float fLowerLimit; // lower bounds
89 float fUpperLimit; // upper bounds
90 float fVertScale;
91 } PlotData_t ;
94 protected:
95 DECLARE_EVENT_TABLE()
96 PlotData_t *pdsTrends;
98 wxRect m_rectClient;
99 wxRect m_rectPlot;
100 wxBrush brushBack;
101 wxBitmap m_bmapGrid;
102 wxBitmap m_bmapPlot;
104 void InvalidateGraph() { InvalidateCtrl(true, false); }
105 void InvalidateGrid() { InvalidateCtrl(false, true); }
107 private:
108 bool bRecreateGrid, bRecreateGraph, bRecreateAll, bStopped;
109 int nDelayedPoints;
110 double sLastTimestamp;
111 double sLastPeriod;
112 wxTimer timerRedraw;
113 bool m_onPaint;
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