00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef QWT_PLOT_H
00011 #define QWT_PLOT_H
00012
00013 #include <qframe.h>
00014 #include "qwt_global.h"
00015 #include "qwt_array.h"
00016 #include "qwt_text.h"
00017 #include "qwt_plot_dict.h"
00018 #include "qwt_scale_map.h"
00019 #include "qwt_plot_printfilter.h"
00020
00021 class QwtPlotLayout;
00022 class QwtLegend;
00023 class QwtScaleWidget;
00024 class QwtScaleEngine;
00025 class QwtScaleDiv;
00026 class QwtScaleDraw;
00027 class QwtTextLabel;
00028 class QwtPlotCanvas;
00029 class QwtPlotPrintFilter;
00030
00075 class QWT_EXPORT QwtPlot: public QFrame, public QwtPlotDict
00076 {
00077 friend class QwtPlotCanvas;
00078
00079 Q_OBJECT
00080
00081 Q_ENUMS( Axis Position )
00082
00083
00084 Q_PROPERTY( bool autoReplot READ autoReplot WRITE setAutoReplot )
00085
00086
00087 Q_PROPERTY( QColor canvasBackground READ canvasBackground
00088 WRITE setCanvasBackground )
00089 Q_PROPERTY( int canvasLineWidth READ canvasLineWidth
00090 WRITE setCanvasLineWidth )
00091
00092
00093 Q_PROPERTY( bool xBottomAxis READ xBottomAxisEnabled
00094 WRITE enableXBottomAxis )
00095 Q_PROPERTY( bool xTopAxis READ xTopAxisEnabled WRITE enableXTopAxis )
00096 Q_PROPERTY( bool yLeftAxis READ yLeftAxisEnabled WRITE enableYLeftAxis )
00097 Q_PROPERTY( bool yRightAxis READ yRightAxisEnabled WRITE enableYRightAxis )
00098
00099 public:
00101 enum Axis
00102 {
00103 yLeft,
00104 yRight,
00105 xBottom,
00106 xTop,
00107 axisCnt
00108 };
00109
00111 enum LegendPosition
00112 {
00113 LeftLegend,
00114 RightLegend,
00115 BottomLegend,
00116 TopLegend
00117 };
00118
00119 explicit QwtPlot(QWidget *p = 0);
00120 explicit QwtPlot(const QwtText &title, QWidget *p = NULL);
00121 virtual ~QwtPlot();
00122
00124 void enableXBottomAxis(bool b) {enableAxis(xBottom,b);}
00126 bool xBottomAxisEnabled() const {return axisEnabled(xBottom);};
00128 void enableXTopAxis(bool b) {enableAxis(xTop,b);}
00130 bool xTopAxisEnabled() const {return axisEnabled(xTop);};
00132 void enableYRightAxis(bool b) {enableAxis(yRight,b);}
00134 bool yRightAxisEnabled() const {return axisEnabled(yRight);};
00136 void enableYLeftAxis(bool b) {enableAxis(yLeft,b);}
00138 bool yLeftAxisEnabled() const {return axisEnabled(yLeft);};
00139
00140 void setAutoReplot(bool tf = true);
00141 bool autoReplot() const;
00142
00143 void print(QPaintDevice &p,
00144 const QwtPlotPrintFilter & = QwtPlotPrintFilter()) const;
00145 virtual void print(QPainter *, const QRect &rect,
00146 const QwtPlotPrintFilter & = QwtPlotPrintFilter()) const;
00147
00148
00149
00150 QwtPlotLayout *plotLayout();
00151 const QwtPlotLayout *plotLayout() const;
00152
00153 void setMargin(int margin);
00154 int margin() const;
00155
00156
00157
00158 void setTitle(const QString &);
00159 void setTitle(const QwtText &t);
00160 QwtText title() const;
00161
00162 QwtTextLabel *titleLabel();
00163 const QwtTextLabel *titleLabel() const;
00164
00165
00166
00167 QwtPlotCanvas *canvas();
00168 const QwtPlotCanvas *canvas() const;
00169
00170 void setCanvasBackground (const QColor &c);
00171 const QColor& canvasBackground() const;
00172
00173 void setCanvasLineWidth(int w);
00174 int canvasLineWidth() const;
00175
00176 virtual QwtScaleMap canvasMap(int axisId) const;
00177
00178 double invTransform(int axisId, int pos) const;
00179 int transform(int axisId, double value) const;
00180
00181
00182
00183 QwtScaleEngine *axisScaleEngine(int axisId);
00184 const QwtScaleEngine *axisScaleEngine(int axisId) const;
00185 void setAxisScaleEngine(int axisId, QwtScaleEngine *);
00186
00187 void setAxisAutoScale(int axisId);
00188 bool axisAutoScale(int axisId) const;
00189
00190 void enableAxis(int axisId, bool tf = true);
00191 bool axisEnabled(int axisId) const;
00192
00193 void setAxisFont(int axisId, const QFont &f);
00194 QFont axisFont(int axisId) const;
00195
00196 void setAxisScale(int axisId, double min, double max, double step = 0);
00197 void setAxisScaleDiv(int axisId, const QwtScaleDiv &);
00198 void setAxisScaleDraw(int axisId, QwtScaleDraw *);
00199
00200 const QwtScaleDiv *axisScaleDiv(int axisId) const;
00201 QwtScaleDiv *axisScaleDiv(int axisId);
00202
00203 const QwtScaleDraw *axisScaleDraw(int axisId) const;
00204 QwtScaleDraw *axisScaleDraw(int axisId);
00205
00206 const QwtScaleWidget *axisWidget(int axisId) const;
00207 QwtScaleWidget *axisWidget(int axisId);
00208
00209 #if QT_VERSION < 0x040000
00210 void setAxisLabelAlignment(int axisId, int);
00211 #else
00212 void setAxisLabelAlignment(int axisId, Qt::Alignment);
00213 #endif
00214 void setAxisLabelRotation(int axisId, double rotation);
00215
00216 void setAxisTitle(int axisId, const QString &);
00217 void setAxisTitle(int axisId, const QwtText &);
00218 QwtText axisTitle(int axisId) const;
00219
00220 void setAxisMaxMinor(int axisId, int maxMinor);
00221 int axisMaxMajor(int axisId) const;
00222 void setAxisMaxMajor(int axisId, int maxMajor);
00223 int axisMaxMinor(int axisId) const;
00224
00225
00226
00227 void insertLegend(QwtLegend *, LegendPosition = QwtPlot::RightLegend,
00228 double ratio = -1.0);
00229
00230 QwtLegend *legend();
00231 const QwtLegend *legend() const;
00232
00233
00234
00235 virtual void polish();
00236 virtual QSize sizeHint() const;
00237 virtual QSize minimumSizeHint() const;
00238
00239 void updateLayout();
00240
00241 virtual bool event(QEvent *);
00242
00243 signals:
00254 void legendClicked(QwtPlotItem *plotItem);
00255
00268 void legendChecked(QwtPlotItem *plotItem, bool on);
00269
00270 public slots:
00271 void clear();
00272
00273 virtual void replot();
00274 void autoRefresh();
00275
00276 protected slots:
00277 virtual void legendItemClicked();
00278 virtual void legendItemChecked(bool);
00279
00280 protected:
00281 static bool axisValid(int axisId);
00282
00283 virtual void drawCanvas(QPainter *);
00284 virtual void drawItems(QPainter *, const QRect &,
00285 const QwtArray<QwtScaleMap> &,
00286 const QwtPlotPrintFilter &) const;
00287
00288 virtual void updateTabOrder();
00289
00290 void updateAxes();
00291
00292 virtual void resizeEvent(QResizeEvent *e);
00293
00294 virtual void printLegendItem(QPainter *,
00295 const QWidget *, const QRect &) const;
00296
00297 virtual void printTitle(QPainter *, const QRect &) const;
00298 virtual void printScale(QPainter *, int axisId, int startDist, int endDist,
00299 int baseDist, const QRect &) const;
00300 virtual void printCanvas(QPainter *, const QRect &,
00301 const QwtArray<QwtScaleMap> &, const QwtPlotPrintFilter &) const;
00302 virtual void printLegend(QPainter *, const QRect &) const;
00303
00304 private:
00305 void initAxesData();
00306 void deleteAxesData();
00307 void updateScaleDiv();
00308
00309 void initPlot(const QwtText &title);
00310
00311 class AxisData;
00312 AxisData *d_axisData[axisCnt];
00313
00314 class PrivateData;
00315 PrivateData *d_data;
00316 };
00317
00318 #endif