2 // This file is part of the aMule Project.
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 )
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
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.
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
33 #include <wx/control.h> // Needed for wxControl
34 #include <wx/timer.h> // Needed for wxTimer
36 #include <wx/bitmap.h>
38 #include "Color.h" // Needed for COLORREF and RGB
39 #include "Statistics.h" // Needed for StatsGraphType
43 /////////////////////////////////////////////////////////////////////////////
46 #define TIMER_OSCOPE 7641
48 class COScopeCtrl
: public wxControl
50 friend class CStatisticsDlg
;
53 COScopeCtrl(int NTrends
, int nDecimals
, StatsGraphType type
, wxWindow
* parent
= NULL
);
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
);
66 void RecreateGraph(bool bRefresh
=true);
68 void AppendPoints(double sTimestamp
, const std::vector
<float *> &apf
);
69 void DelayPoints() { nDelayedPoints
++; }
71 StatsGraphType graph_type
;
77 unsigned nShiftPixels
; // amount to shift with each new point
81 wxString strYUnits
, strYMin
, strYMax
;
83 wxColour m_gridColour
;
85 typedef struct PlotDataStruct
{
86 COLORREF crPlot
; // data plot color
90 float fLowerLimit
; // lower bounds
91 float fUpperLimit
; // upper bounds
98 PlotData_t
*pdsTrends
;
106 void InvalidateGraph() { InvalidateCtrl(true, false); }
107 void InvalidateGrid() { InvalidateCtrl(false, true); }
110 bool bRecreateGrid
, bRecreateGraph
, bStopped
;
112 double sLastTimestamp
;
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