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
00077 class QWT_EXPORT QwtPlot: public QFrame, public QwtPlotDict
00078 {
00079 friend class QwtPlotCanvas;
00080
00081 Q_OBJECT
00082 Q_PROPERTY( QString propertiesDocument
00083 READ grabProperties WRITE applyProperties )
00084
00085 public:
00087 enum Axis
00088 {
00089 yLeft,
00090 yRight,
00091 xBottom,
00092 xTop,
00093
00094 axisCnt
00095 };
00096
00105 enum LegendPosition
00106 {
00107 LeftLegend,
00108 RightLegend,
00109 BottomLegend,
00110 TopLegend,
00111
00112 ExternalLegend
00113 };
00114
00115 explicit QwtPlot(QWidget * = NULL);
00116 explicit QwtPlot(const QwtText &title, QWidget *p = NULL);
00117 #if QT_VERSION < 0x040000
00118 explicit QwtPlot(QWidget *, const char* name);
00119 #endif
00120
00121 virtual ~QwtPlot();
00122
00123 void applyProperties(const QString &);
00124 QString grabProperties() const;
00125
00126 void setAutoReplot(bool tf = true);
00127 bool autoReplot() const;
00128
00129 void print(QPaintDevice &p,
00130 const QwtPlotPrintFilter & = QwtPlotPrintFilter()) const;
00131 virtual void print(QPainter *, const QRect &rect,
00132 const QwtPlotPrintFilter & = QwtPlotPrintFilter()) const;
00133
00134
00135
00136 QwtPlotLayout *plotLayout();
00137 const QwtPlotLayout *plotLayout() const;
00138
00139 void setMargin(int margin);
00140 int margin() const;
00141
00142
00143
00144 void setTitle(const QString &);
00145 void setTitle(const QwtText &t);
00146 QwtText title() const;
00147
00148 QwtTextLabel *titleLabel();
00149 const QwtTextLabel *titleLabel() const;
00150
00151
00152
00153 QwtPlotCanvas *canvas();
00154 const QwtPlotCanvas *canvas() const;
00155
00156 void setCanvasBackground (const QColor &c);
00157 const QColor& canvasBackground() const;
00158
00159 void setCanvasLineWidth(int w);
00160 int canvasLineWidth() const;
00161
00162 virtual QwtScaleMap canvasMap(int axisId) const;
00163
00164 double invTransform(int axisId, int pos) const;
00165 int transform(int axisId, double value) const;
00166
00167
00168
00169 QwtScaleEngine *axisScaleEngine(int axisId);
00170 const QwtScaleEngine *axisScaleEngine(int axisId) const;
00171 void setAxisScaleEngine(int axisId, QwtScaleEngine *);
00172
00173 void setAxisAutoScale(int axisId);
00174 bool axisAutoScale(int axisId) const;
00175
00176 void enableAxis(int axisId, bool tf = true);
00177 bool axisEnabled(int axisId) const;
00178
00179 void setAxisFont(int axisId, const QFont &f);
00180 QFont axisFont(int axisId) const;
00181
00182 void setAxisScale(int axisId, double min, double max, double step = 0);
00183 void setAxisScaleDiv(int axisId, const QwtScaleDiv &);
00184 void setAxisScaleDraw(int axisId, QwtScaleDraw *);
00185
00186 double axisStepSize(int axisId) const;
00187
00188 const QwtScaleDiv *axisScaleDiv(int axisId) const;
00189 QwtScaleDiv *axisScaleDiv(int axisId);
00190
00191 const QwtScaleDraw *axisScaleDraw(int axisId) const;
00192 QwtScaleDraw *axisScaleDraw(int axisId);
00193
00194 const QwtScaleWidget *axisWidget(int axisId) const;
00195 QwtScaleWidget *axisWidget(int axisId);
00196
00197 #if QT_VERSION < 0x040000
00198 void setAxisLabelAlignment(int axisId, int);
00199 #else
00200 void setAxisLabelAlignment(int axisId, Qt::Alignment);
00201 #endif
00202 void setAxisLabelRotation(int axisId, double rotation);
00203
00204 void setAxisTitle(int axisId, const QString &);
00205 void setAxisTitle(int axisId, const QwtText &);
00206 QwtText axisTitle(int axisId) const;
00207
00208 void setAxisMaxMinor(int axisId, int maxMinor);
00209 int axisMaxMajor(int axisId) const;
00210 void setAxisMaxMajor(int axisId, int maxMajor);
00211 int axisMaxMinor(int axisId) const;
00212
00213
00214
00215 void insertLegend(QwtLegend *, LegendPosition = QwtPlot::RightLegend,
00216 double ratio = -1.0);
00217
00218 QwtLegend *legend();
00219 const QwtLegend *legend() const;
00220
00221
00222
00223 virtual void polish();
00224 virtual QSize sizeHint() const;
00225 virtual QSize minimumSizeHint() const;
00226
00227 virtual void updateLayout();
00228
00229 virtual bool event(QEvent *);
00230
00231 signals:
00242 void legendClicked(QwtPlotItem *plotItem);
00243
00256 void legendChecked(QwtPlotItem *plotItem, bool on);
00257
00258 public slots:
00259 virtual void clear();
00260
00261 virtual void replot();
00262 void autoRefresh();
00263
00264 protected slots:
00265 virtual void legendItemClicked();
00266 virtual void legendItemChecked(bool);
00267
00268 protected:
00269 static bool axisValid(int axisId);
00270
00271 virtual void drawCanvas(QPainter *);
00272 virtual void drawItems(QPainter *, const QRect &,
00273 const QwtScaleMap maps[axisCnt],
00274 const QwtPlotPrintFilter &) const;
00275
00276 virtual void updateTabOrder();
00277
00278 void updateAxes();
00279
00280 virtual void resizeEvent(QResizeEvent *e);
00281
00282 virtual void printLegendItem(QPainter *,
00283 const QWidget *, const QRect &) const;
00284
00285 virtual void printTitle(QPainter *, const QRect &) const;
00286
00287 virtual void printScale(QPainter *, int axisId, int startDist, int endDist,
00288 int baseDist, const QRect &) const;
00289
00290 virtual void printCanvas(QPainter *,
00291 const QRect &boundingRect, const QRect &canvasRect,
00292 const QwtScaleMap maps[axisCnt], const QwtPlotPrintFilter &) const;
00293
00294 virtual void printLegend(QPainter *, const QRect &) const;
00295
00296 private:
00297 void initAxesData();
00298 void deleteAxesData();
00299 void updateScaleDiv();
00300
00301 void initPlot(const QwtText &title);
00302
00303 class AxisData;
00304 AxisData *d_axisData[axisCnt];
00305
00306 class PrivateData;
00307 PrivateData *d_data;
00308 };
00309
00310 #endif