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
00072 class QWT_EXPORT QwtPlot: public QFrame, public QwtPlotDict
00073 {
00074 Q_OBJECT
00075 Q_PROPERTY( QString propertiesDocument
00076 READ grabProperties WRITE applyProperties )
00077
00078 public:
00087 enum Axis
00088 {
00089 yLeft,
00090 yRight,
00091 xBottom,
00092 xTop,
00093
00094 axisCnt
00095 };
00096
00119 enum LegendPosition
00120 {
00121 LeftLegend,
00122 RightLegend,
00123 BottomLegend,
00124 TopLegend,
00125
00126 ExternalLegend
00127 };
00128
00129 explicit QwtPlot(QWidget * = NULL);
00130 explicit QwtPlot(const QwtText &title, QWidget *p = NULL);
00131 #if QT_VERSION < 0x040000
00132 explicit QwtPlot(QWidget *, const char* name);
00133 #endif
00134
00135 virtual ~QwtPlot();
00136
00137 void applyProperties(const QString &);
00138 QString grabProperties() const;
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 double axisStepSize(int axisId) const;
00201
00202 const QwtScaleDiv *axisScaleDiv(int axisId) const;
00203 QwtScaleDiv *axisScaleDiv(int axisId);
00204
00205 const QwtScaleDraw *axisScaleDraw(int axisId) const;
00206 QwtScaleDraw *axisScaleDraw(int axisId);
00207
00208 const QwtScaleWidget *axisWidget(int axisId) const;
00209 QwtScaleWidget *axisWidget(int axisId);
00210
00211 #if QT_VERSION < 0x040000
00212 void setAxisLabelAlignment(int axisId, int);
00213 #else
00214 void setAxisLabelAlignment(int axisId, Qt::Alignment);
00215 #endif
00216 void setAxisLabelRotation(int axisId, double rotation);
00217
00218 void setAxisTitle(int axisId, const QString &);
00219 void setAxisTitle(int axisId, const QwtText &);
00220 QwtText axisTitle(int axisId) const;
00221
00222 void setAxisMaxMinor(int axisId, int maxMinor);
00223 int axisMaxMajor(int axisId) const;
00224 void setAxisMaxMajor(int axisId, int maxMajor);
00225 int axisMaxMinor(int axisId) const;
00226
00227
00228
00229 void insertLegend(QwtLegend *, LegendPosition = QwtPlot::RightLegend,
00230 double ratio = -1.0);
00231
00232 QwtLegend *legend();
00233 const QwtLegend *legend() const;
00234
00235
00236
00237 virtual void polish();
00238 virtual QSize sizeHint() const;
00239 virtual QSize minimumSizeHint() const;
00240
00241 virtual void updateLayout();
00242 virtual void drawCanvas(QPainter *);
00243
00244 void updateAxes();
00245
00246 virtual bool event(QEvent *);
00247
00248 signals:
00259 void legendClicked(QwtPlotItem *plotItem);
00260
00273 void legendChecked(QwtPlotItem *plotItem, bool on);
00274
00275 public slots:
00276 virtual void clear();
00277
00278 virtual void replot();
00279 void autoRefresh();
00280
00281 protected slots:
00282 virtual void legendItemClicked();
00283 virtual void legendItemChecked(bool);
00284
00285 protected:
00286 static bool axisValid(int axisId);
00287
00288 virtual void drawItems(QPainter *, const QRect &,
00289 const QwtScaleMap maps[axisCnt],
00290 const QwtPlotPrintFilter &) const;
00291
00292 virtual void updateTabOrder();
00293
00294 virtual void resizeEvent(QResizeEvent *e);
00295
00296 virtual void printLegendItem(QPainter *,
00297 const QWidget *, const QRect &) const;
00298
00299 virtual void printTitle(QPainter *, const QRect &) const;
00300
00301 virtual void printScale(QPainter *, int axisId, int startDist, int endDist,
00302 int baseDist, const QRect &) const;
00303
00304 virtual void printCanvas(QPainter *,
00305 const QRect &boundingRect, const QRect &canvasRect,
00306 const QwtScaleMap maps[axisCnt], const QwtPlotPrintFilter &) const;
00307
00308 virtual void printLegend(QPainter *, const QRect &) const;
00309
00310 private:
00311 void initAxesData();
00312 void deleteAxesData();
00313 void updateScaleDiv();
00314
00315 void initPlot(const QwtText &title);
00316
00317 class AxisData;
00318 AxisData *d_axisData[axisCnt];
00319
00320 class PrivateData;
00321 PrivateData *d_data;
00322 };
00323
00324 #endif