forked from OpenModelica/OpenModelica
-
Notifications
You must be signed in to change notification settings - Fork 0
/
qwt_plot.h
310 lines (223 loc) · 8.15 KB
/
qwt_plot.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
/******************************************************************************
* Qwt Widget Library
* Copyright (C) 1997 Josef Wilgen
* Copyright (C) 2002 Uwe Rathmann
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the Qwt License, Version 1.0
*****************************************************************************/
#ifndef QWT_PLOT_H
#define QWT_PLOT_H
#include "qwt_global.h"
#include "qwt_axis_id.h"
#include "qwt_plot_dict.h"
#include <qframe.h>
class QwtPlotLayout;
class QwtAbstractLegend;
class QwtScaleWidget;
class QwtScaleEngine;
class QwtScaleDiv;
class QwtScaleMap;
class QwtScaleDraw;
class QwtTextLabel;
class QwtInterval;
class QwtText;
template< typename T > class QList;
// 6.1 compatibility definitions
#define QWT_AXIS_COMPAT 1
/*!
\brief A 2-D plotting widget
QwtPlot is a widget for plotting two-dimensional graphs.
An unlimited number of plot items can be displayed on
its canvas. Plot items might be curves (QwtPlotCurve), markers
(QwtPlotMarker), the grid (QwtPlotGrid), or anything else derived
from QwtPlotItem.
A plot can have up to four axes, with each plot item attached to an x- and
a y axis. The scales at the axes can be explicitly set (QwtScaleDiv), or
are calculated from the plot items, using algorithms (QwtScaleEngine) which
can be configured separately for each axis.
The simpleplot example is a good starting point to see how to set up a
plot widget.
\image html plot.png
\par Example
The following example shows (schematically) the most simple
way to use QwtPlot. By default, only the left and bottom axes are
visible and their scales are computed automatically.
\code
#include <qwt_plot.h>
#include <qwt_plot_curve.h>
QwtPlot *myPlot = new QwtPlot( "Two Curves", parent );
// add curves
QwtPlotCurve *curve1 = new QwtPlotCurve( "Curve 1" );
QwtPlotCurve *curve2 = new QwtPlotCurve( "Curve 2" );
// connect or copy the data to the curves
curve1->setData( ... );
curve2->setData( ... );
curve1->attach( myPlot );
curve2->attach( myPlot );
// finally, refresh the plot
myPlot->replot();
\endcode
*/
class QWT_EXPORT QwtPlot : public QFrame, public QwtPlotDict
{
Q_OBJECT
Q_PROPERTY( QBrush canvasBackground
READ canvasBackground WRITE setCanvasBackground )
Q_PROPERTY( bool autoReplot READ autoReplot WRITE setAutoReplot )
public:
/*!
Position of the legend, relative to the canvas.
\sa insertLegend()
*/
enum LegendPosition
{
//! The legend will be left from the QwtAxis::YLeft axis.
LeftLegend,
//! The legend will be right from the QwtAxis::YRight axis.
RightLegend,
//! The legend will be below the footer
BottomLegend,
//! The legend will be above the title
TopLegend
};
explicit QwtPlot( QWidget* = NULL );
explicit QwtPlot( const QwtText& title, QWidget* = NULL );
virtual ~QwtPlot();
void setAutoReplot( bool = true );
bool autoReplot() const;
// Layout
void setPlotLayout( QwtPlotLayout* );
QwtPlotLayout* plotLayout();
const QwtPlotLayout* plotLayout() const;
// Title
void setTitle( const QString& );
void setTitle( const QwtText& );
QwtText title() const;
QwtTextLabel* titleLabel();
const QwtTextLabel* titleLabel() const;
// Footer
void setFooter( const QString& );
void setFooter( const QwtText& );
QwtText footer() const;
QwtTextLabel* footerLabel();
const QwtTextLabel* footerLabel() const;
// Canvas
void setCanvas( QWidget* );
QWidget* canvas();
const QWidget* canvas() const;
void setCanvasBackground( const QBrush& );
QBrush canvasBackground() const;
virtual QwtScaleMap canvasMap( QwtAxisId ) const;
double invTransform( QwtAxisId, double pos ) const;
double transform( QwtAxisId, double value ) const;
// Axes
bool isAxisValid( QwtAxisId ) const;
void setAxisVisible( QwtAxisId, bool on = true );
bool isAxisVisible( QwtAxisId ) const;
// Axes data
QwtScaleEngine* axisScaleEngine( QwtAxisId );
const QwtScaleEngine* axisScaleEngine( QwtAxisId ) const;
void setAxisScaleEngine( QwtAxisId, QwtScaleEngine* );
void setAxisAutoScale( QwtAxisId, bool on = true );
bool axisAutoScale( QwtAxisId ) const;
void setAxisFont( QwtAxisId, const QFont& );
QFont axisFont( QwtAxisId ) const;
void setAxisScale( QwtAxisId, double min, double max, double stepSize = 0 );
void setAxisScaleDiv( QwtAxisId, const QwtScaleDiv& );
void setAxisScaleDraw( QwtAxisId, QwtScaleDraw* );
double axisStepSize( QwtAxisId ) const;
QwtInterval axisInterval( QwtAxisId ) const;
const QwtScaleDiv& axisScaleDiv( QwtAxisId ) const;
const QwtScaleDraw* axisScaleDraw( QwtAxisId ) const;
QwtScaleDraw* axisScaleDraw( QwtAxisId );
const QwtScaleWidget* axisWidget( QwtAxisId ) const;
QwtScaleWidget* axisWidget( QwtAxisId );
void setAxisLabelAlignment( QwtAxisId, Qt::Alignment );
void setAxisLabelRotation( QwtAxisId, double rotation );
void setAxisTitle( QwtAxisId, const QString& );
void setAxisTitle( QwtAxisId, const QwtText& );
QwtText axisTitle( QwtAxisId ) const;
void setAxisMaxMinor( QwtAxisId, int maxMinor );
int axisMaxMinor( QwtAxisId ) const;
void setAxisMaxMajor( QwtAxisId, int maxMajor );
int axisMaxMajor( QwtAxisId ) const;
// Legend
void insertLegend( QwtAbstractLegend*,
LegendPosition = QwtPlot::RightLegend, double ratio = -1.0 );
QwtAbstractLegend* legend();
const QwtAbstractLegend* legend() const;
void updateLegend();
void updateLegend( const QwtPlotItem* );
// Misc
virtual QSize sizeHint() const QWT_OVERRIDE;
virtual QSize minimumSizeHint() const QWT_OVERRIDE;
virtual void updateLayout();
virtual void drawCanvas( QPainter* );
void updateAxes();
void updateCanvasMargins();
virtual void getCanvasMarginsHint(
const QwtScaleMap maps[], const QRectF& canvasRect,
double& left, double& top, double& right, double& bottom) const;
virtual bool event( QEvent* ) QWT_OVERRIDE;
virtual bool eventFilter( QObject*, QEvent* ) QWT_OVERRIDE;
virtual void drawItems( QPainter*, const QRectF&,
const QwtScaleMap maps[ QwtAxis::AxisPositions ] ) const;
virtual QVariant itemToInfo( QwtPlotItem* ) const;
virtual QwtPlotItem* infoToItem( const QVariant& ) const;
#if QWT_AXIS_COMPAT
enum Axis
{
yLeft = QwtAxis::YLeft,
yRight = QwtAxis::YRight,
xBottom = QwtAxis::XBottom,
xTop = QwtAxis::XTop,
axisCnt = QwtAxis::AxisPositions
};
void enableAxis( int axisId, bool on = true )
{
setAxisVisible( axisId, on );
}
bool axisEnabled( int axisId ) const
{
return isAxisVisible( axisId );
}
#endif
Q_SIGNALS:
/*!
A signal indicating, that an item has been attached/detached
\param plotItem Plot item
\param on Attached/Detached
*/
void itemAttached( QwtPlotItem* plotItem, bool on );
/*!
A signal with the attributes how to update
the legend entries for a plot item.
\param itemInfo Info about a plot item, build from itemToInfo()
\param data Attributes of the entries ( usually <= 1 ) for
the plot item.
\sa itemToInfo(), infoToItem(), QwtAbstractLegend::updateLegend()
*/
void legendDataChanged( const QVariant& itemInfo,
const QList< QwtLegendData >& data );
public Q_SLOTS:
virtual void replot();
void autoRefresh();
protected:
virtual void resizeEvent( QResizeEvent* ) QWT_OVERRIDE;
private Q_SLOTS:
void updateLegendItems( const QVariant& itemInfo,
const QList< QwtLegendData >& legendData );
private:
friend class QwtPlotItem;
void attachItem( QwtPlotItem*, bool );
void initAxesData();
void deleteAxesData();
void updateScaleDiv();
void initPlot( const QwtText& title );
class ScaleData;
ScaleData* m_scaleData;
class PrivateData;
PrivateData* m_data;
};
#endif