OpenTwin 0.1
OpenTwin
 
Loading...
Searching...
No Matches
XYPlot.h
Go to the documentation of this file.
1/*
2 * File: XYPlot.h
3 *
4 * Created on: May 17, 2022
5 * Author: Alexander Kuester
6 * Copyright (c) 2022 Alexander Kuester
7 * This file is part of the QwtWrapper project.
8 * This file is subject to the terms and conditions defined in
9 * file 'LICENSE', which is part of this source code package.
10 */
11
12#pragma once
13
14// Wrapper header
16#include <qwtw/AbstractPlot.h>
17
18// Qwt header
19#include <qwt_plot_marker.h>
20#include <qwt_plot_canvas.h>
21#include <qwt_plot_panner.h>
22#include <qwt_plot_zoomer.h>
23#include <qwt_plot_magnifier.h>
24#include <qwt_plot_picker.h>
25#include <qwt_legend.h>
26#include <qwt_plot_grid.h>
27
28// Qt header
29#include <qpoint.h>
30
31class QwtPlotCurve;
32
33namespace qwtw {
34 class Plot;
35 class XYPlotZoomer;
36 class XYPlotMagnifier;
37 class XYPlotPanner;
38 class XYPlotWidgetCanvas;
39 class XYPlotLegend;
40 class XYPlotGrid;
41 class XYPlotPicker;
42
43 class QWTW_LIB_EXPORT XYPlot : public QwtPlot, public AbstractPlot {
44 public:
45 XYPlot(Plot * _owner);
46 virtual ~XYPlot();
47
48 // ################################################################
49
50 // Plot
51
52 virtual void RepaintLegend(void) override;
53
54 virtual void RefreshWholePlot(void) override;
55
56 virtual void Clear(void) override;
57
58 void setZoomerPen(const QPen & _pen);
59
60 void setAxisValueLabels(AbstractPlotAxis::AxisID _axis, const std::map<double, QString>& _valueToLabelMap);
61
62 void clearAxisValueLabels(AbstractPlotAxis::AxisID _axis);
63
64 // ################################################################
65
66 // Grid
67
68 virtual void RepaintGrid(void) override;
69
70 // ################################################################
71
72 // Getter
73
74 Plot * Owner(void) const { return m_owner; }
75
76 QwtPlotCurve * findNearestCurve(const QPoint & _pos, int & _pointID);
77
78 private:
79
80 Plot * m_owner;
81 XYPlotZoomer * m_plotZoomer;
82 XYPlotMagnifier * m_plotMagnifier;
83 XYPlotPanner * m_plotPanner;
84 XYPlotWidgetCanvas * m_canvas;
85 XYPlotLegend * m_legend;
86 XYPlotGrid * m_grid;
87 XYPlotPicker * m_picker;
88
89 XYPlot() = delete;
90 XYPlot(XYPlot&) = delete;
91 XYPlot& operator =(XYPlot&) = delete;
92
93 };
94
95 // #####################################################################################################
96
97 // #####################################################################################################
98
99 // #####################################################################################################
100
102 public:
103 XYPlotAxis(AxisID _axisID, XYPlot * _plot);
104 virtual ~XYPlotAxis();
105
106 virtual void repaint(void) override;
107
108 private:
109 XYPlot * m_plot;
110
111 XYPlotAxis() = delete;
112 XYPlotAxis(XYPlotAxis&) = delete;
113 XYPlotAxis& operator = (XYPlotAxis&) = delete;
114 };
115
116 // #####################################################################################################
117
118 // #####################################################################################################
119
120 // #####################################################################################################
121
122 class QWTW_LIB_EXPORT XYPlotWidgetCanvas : public QwtPlotCanvas {
123 //Q_OBJECT
124 public:
125 XYPlotWidgetCanvas(XYPlot * _plot);
126 virtual ~XYPlotWidgetCanvas();
127
128 private:
129 XYPlot * m_plot;
130
131 };
132
133 // #####################################################################################################
134
135 // #####################################################################################################
136
137 // #####################################################################################################
138
139 class QWTW_LIB_EXPORT XYPlotMarker : public QwtPlotMarker {
140 public:
141 XYPlotMarker(int _id);
142 virtual ~XYPlotMarker();
143
144 int id(void) const { return m_id; }
145
146 void setStyle(const QColor & _innerColor, const QColor & _outerColor, int _size = 8, double _outerColorSize = 2.0);
147
148 private:
149
150 int m_id;
151 QwtSymbol * m_symbol;
152
153 XYPlotMarker() = delete;
154 XYPlotMarker(XYPlotMarker&) = delete;
155 XYPlotMarker& operator = (XYPlotMarker&) = delete;
156
157 };
158
159 // #####################################################################################################
160
161 // #####################################################################################################
162
163 // #####################################################################################################
164
165 class QWTW_LIB_EXPORT XYPlotPanner : public QwtPlotPanner
166 {
167 public:
168 XYPlotPanner(XYPlot * _plot);
169
170 virtual bool eventFilter(QObject * _object, QEvent * _event) override;
171
172 private:
173 bool m_mouseIsPressed;
174 };
175
176 // #####################################################################################################
177
178 // #####################################################################################################
179
180 // #####################################################################################################
181
182 class QWTW_LIB_EXPORT XYPlotZoomer : public QwtPlotZoomer
183 {
184 public:
185 XYPlotZoomer(XYPlot * _plot);
186
187 virtual void widgetMousePressEvent(QMouseEvent * _event) override;
188
189 virtual void widgetMouseDoubleClickEvent(QMouseEvent * _event) override;
190
191 virtual void widgetMouseMoveEvent(QMouseEvent * _event) override;
192
193 virtual void widgetWheelEvent(QWheelEvent * _event) override;
194
195 virtual void widgetMouseReleaseEvent(QMouseEvent * _event) override;
196
197 virtual void widgetKeyPressEvent(QKeyEvent * _event) override;
198
199 virtual void widgetKeyReleaseEvent(QKeyEvent * _event) override;
200
201 bool isControlPressed(void) const { return m_controlIsPressed; }
202
203 //virtual bool eventFilter(QObject * _object, QEvent * _event);
204
205 private:
206 XYPlot * m_plot;
207 bool m_mouseMoved;
208 bool m_controlIsPressed;
209 };
210
211 // #####################################################################################################
212
213 // #####################################################################################################
214
215 // #####################################################################################################
216
217 class QWTW_LIB_EXPORT XYPlotMagnifier : public QwtPlotMagnifier {
218 public:
219 XYPlotMagnifier(XYPlot * _plot);
220
221 virtual void widgetMousePressEvent(QMouseEvent * _event) override;
222
223 virtual void widgetMouseMoveEvent(QMouseEvent * _event) override;
224
225 virtual void widgetMouseReleaseEvent(QMouseEvent * _event) override;
226
227 virtual void widgetWheelEvent(QWheelEvent * _wheelEvent) override;
228
229 virtual void rescale(double _factor) override;
230
231 XYPlotMarker * marker(void) const { return m_marker; }
232
233 void setAxisValueLabels(AbstractPlotAxis::AxisID _axis, const std::map<double, QString>& _valueToLabelMap);
234
235 void clearAxisValueLabels(AbstractPlotAxis::AxisID _axis);
236
237 private:
238 QPointF m_cursorPos;
239 bool m_rightMouseIsPressed;
240 bool m_mouseMoved;
241 XYPlot * m_plot;
242 XYPlotMarker * m_marker;
243
244 std::map<double, QString> m_valueLabelMapXBottom;
245 std::map<double, QString> m_valueLabelMapXTop;
246 std::map<double, QString> m_valueLabelMapYLeft;
247 std::map<double, QString> m_valueLabelMapYRight;
248
249 };
250
251 // #####################################################################################################
252
253 // #####################################################################################################
254
255 // #####################################################################################################
256
257 class QWTW_LIB_EXPORT XYPlotLegend : public QwtLegend {
258 public:
259 explicit XYPlotLegend(XYPlot * _owner);
260 virtual ~XYPlotLegend();
261
262 private:
263 XYPlot * m_owner;
264
265 };
266
267 // #####################################################################################################
268
269 // #####################################################################################################
270
271 // #####################################################################################################
272
273 class QWTW_LIB_EXPORT XYPlotGrid : public QwtPlotGrid {
274 public:
275 XYPlotGrid();
276 virtual ~XYPlotGrid();
277
278 void setColor(const QColor & _color, bool _repaint = true);
279
280 void setWidth(double _width, bool _repaint = true);
281
282 private:
283
284 double m_width;
285 QColor m_color;
286
287 };
288
289 // #####################################################################################################
290
291 // #####################################################################################################
292
293 // #####################################################################################################
294
295 class QWTW_LIB_EXPORT XYPlotPicker : public QwtPlotPicker {
296 public:
297 explicit XYPlotPicker(XYPlot * _plot);
298 virtual ~XYPlotPicker();
299
300 private:
301 XYPlot * m_plot;
302 };
303}
#define QWTW_LIB_EXPORT
Definition globalDatatypes.h:17
Definition AbstractPlot.h:29
AxisID
Definition AbstractPlot.h:31
Definition AbstractPlot.h:100
Definition Plot.h:205
Definition XYPlot.h:101
Definition XYPlot.h:273
Definition XYPlot.h:43
Plot * Owner(void) const
Definition XYPlot.h:74
Definition XYPlot.h:257
Definition XYPlot.h:217
XYPlotMarker * marker(void) const
Definition XYPlot.h:231
Definition XYPlot.h:139
int id(void) const
Definition XYPlot.h:144
Definition XYPlot.h:166
Definition XYPlot.h:295
Definition XYPlot.h:122
Definition XYPlot.h:183
bool isControlPressed(void) const
Definition XYPlot.h:201
Definition AbstractPlot.h:25