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_plot_dict.h"
00017 #include "qwt_scale_map.h"
00018 #include "qwt_plot_printfilter.h"
00019
00020 class QLabel;
00021 class QwtPlotLayout;
00022 class QwtLegend;
00023 class QwtScaleWidget;
00024 class QwtScaleEngine;
00025 class QwtScaleDiv;
00026 class QwtScaleDraw;
00027 class QwtPlotCanvas;
00028 class QwtPlotPrintFilter;
00029
00074 class QWT_EXPORT QwtPlot: public QFrame, public QwtPlotDict
00075 {
00076 friend class QwtPlotCanvas;
00077
00078 Q_OBJECT
00079
00080 Q_ENUMS( Axis Position )
00081
00082
00083 Q_PROPERTY( bool autoReplot READ autoReplot WRITE setAutoReplot )
00084
00085
00086 Q_PROPERTY( QColor canvasBackground READ canvasBackground
00087 WRITE setCanvasBackground )
00088 Q_PROPERTY( int canvasLineWidth READ canvasLineWidth
00089 WRITE setCanvasLineWidth )
00090
00091
00092 Q_PROPERTY( bool xBottomAxis READ xBottomAxisEnabled
00093 WRITE enableXBottomAxis )
00094 Q_PROPERTY( bool xTopAxis READ xTopAxisEnabled WRITE enableXTopAxis )
00095 Q_PROPERTY( bool yLeftAxis READ yLeftAxisEnabled WRITE enableYLeftAxis )
00096 Q_PROPERTY( bool yRightAxis READ yRightAxisEnabled WRITE enableYRightAxis )
00097
00098
00099 Q_PROPERTY( QString title READ title WRITE setTitle )
00100 Q_PROPERTY( QFont titleFont READ titleFont WRITE setTitleFont )
00101
00102 public:
00104 enum Axis
00105 {
00106 yLeft,
00107 yRight,
00108 xBottom,
00109 xTop,
00110 axisCnt
00111 };
00112
00114 enum LegendPosition
00115 {
00116 LeftLegend,
00117 RightLegend,
00118 BottomLegend,
00119 TopLegend
00120 };
00121
00122 explicit QwtPlot(QWidget *p = 0);
00123 explicit QwtPlot(const QString &title, QWidget *p = NULL);
00124 virtual ~QwtPlot();
00125
00127 void enableXBottomAxis(bool b) {enableAxis(xBottom,b);}
00129 bool xBottomAxisEnabled() const {return axisEnabled(xBottom);};
00131 void enableXTopAxis(bool b) {enableAxis(xTop,b);}
00133 bool xTopAxisEnabled() const {return axisEnabled(xTop);};
00135 void enableYRightAxis(bool b) {enableAxis(yRight,b);}
00137 bool yRightAxisEnabled() const {return axisEnabled(yRight);};
00139 void enableYLeftAxis(bool b) {enableAxis(yLeft,b);}
00141 bool yLeftAxisEnabled() const {return axisEnabled(yLeft);};
00142
00143 void setAutoReplot(bool tf = true);
00144 bool autoReplot() const;
00145
00146 void print(QPaintDevice &p,
00147 const QwtPlotPrintFilter & = QwtPlotPrintFilter()) const;
00148 virtual void print(QPainter *, const QRect &rect,
00149 const QwtPlotPrintFilter & = QwtPlotPrintFilter()) const;
00150
00151
00152
00153 QwtPlotLayout *plotLayout();
00154 const QwtPlotLayout *plotLayout() const;
00155
00156 void setMargin(int margin);
00157 int margin() const;
00158
00159
00160
00161 void setTitle(const QString &t);
00162 QString title() const;
00163 void setTitleFont (const QFont &f);
00164 QFont titleFont() const;
00165
00166 QLabel *titleLabel();
00167 const QLabel *titleLabel() const;
00168
00169
00170
00171 QwtPlotCanvas *canvas();
00172 const QwtPlotCanvas *canvas() const;
00173
00174 void setCanvasBackground (const QColor &c);
00175 const QColor& canvasBackground() const;
00176
00177 void setCanvasLineWidth(int w);
00178 int canvasLineWidth() const;
00179
00180 QwtScaleMap canvasMap(int axisId) const;
00181
00182 double invTransform(int axisId, int pos) const;
00183 int transform(int axisId, double value) const;
00184
00185
00186
00187 QwtScaleEngine *axisScaleEngine(int axisId);
00188 const QwtScaleEngine *axisScaleEngine(int axisId) const;
00189 void setAxisScaleEngine(int axisId, QwtScaleEngine *);
00190
00191 void setAxisAutoScale(int axisId);
00192 bool axisAutoScale(int axisId) const;
00193
00194 void enableAxis(int axisId, bool tf = true);
00195 bool axisEnabled(int axisId) const;
00196
00197 void setAxisFont(int axisId, const QFont &f);
00198 QFont axisFont(int axisId) const;
00199
00200 void setAxisScale(int axisId, double min, double max, double step = 0);
00201 void setAxisScaleDiv(int axisId, const QwtScaleDiv &);
00202 void setAxisScaleDraw(int axisId, QwtScaleDraw *);
00203
00204 const QwtScaleDiv *axisScaleDiv(int axisId) const;
00205 QwtScaleDiv *axisScaleDiv(int axisId);
00206
00207 const QwtScaleDraw *axisScaleDraw(int axisId) const;
00208
00209 const QwtScaleWidget *axisWidget(int axisId) const;
00210 QwtScaleWidget *axisWidget(int axisId);
00211
00212 void setAxisLabelFormat(int axisId, char f, int prec, int fieldwidth = 0);
00213 void axisLabelFormat(int axisId, char &f, int &prec, int &fieldwidth) const;
00214
00215 void setAxisLabelFlags(int axisId, int flags);
00216 void setAxisLabelRotation(int axisId, double rotation);
00217
00218 void setAxisTitle(int axisId, const QString &t);
00219 QString axisTitle(int axisId) const;
00220 void setAxisTitleFont(int axisId, const QFont &f);
00221 QFont axisTitleFont(int axisId) const;
00222 void setAxisTitleFlags(int axisId, int flags);
00223 int axisTitleFlags(int axisId) const;
00224
00225 void setAxisMaxMinor(int axisId, int maxMinor);
00226 int axisMaxMajor(int axisId) const;
00227 void setAxisMaxMajor(int axisId, int maxMajor);
00228 int axisMaxMinor(int axisId) const;
00229
00230
00231
00232 void insertLegend(QwtLegend *, LegendPosition = QwtPlot::RightLegend,
00233 double ratio = -1.0);
00234
00235 QwtLegend *legend();
00236 const QwtLegend *legend() const;
00237
00238
00239
00240 virtual void polish();
00241 virtual QSize sizeHint() const;
00242 virtual QSize minimumSizeHint() const;
00243
00244 virtual bool event(QEvent *);
00245
00246 signals:
00257 void legendClicked(QwtPlotItem *);
00258 void legendChecked(QwtPlotItem *, bool on);
00259
00260 public slots:
00261 void clear();
00262
00263 virtual void replot();
00264 void autoRefresh();
00265
00266 protected slots:
00267 virtual void legendItemClicked();
00268 virtual void legendItemChecked(bool);
00269
00270 protected:
00271 static bool axisValid(int axisId);
00272
00273 virtual void drawCanvas(QPainter *);
00274 virtual void drawItems(QPainter *, const QRect &,
00275 const QwtArray<QwtScaleMap> &,
00276 const QwtPlotPrintFilter &) const;
00277
00278 virtual void updateTabOrder();
00279
00280 void updateAxes();
00281 void updateLayout();
00282
00283 virtual void resizeEvent(QResizeEvent *e);
00284
00285 virtual void printLegendItem(QPainter *,
00286 const QWidget *, const QRect &) const;
00287
00288 virtual void printTitle(QPainter *, const QRect &) const;
00289 virtual void printScale(QPainter *, int axisId, int startDist, int endDist,
00290 int baseDist, const QRect &) const;
00291 virtual void printCanvas(QPainter *, const QRect &,
00292 const QwtArray<QwtScaleMap> &, const QwtPlotPrintFilter &) const;
00293 virtual void printLegend(QPainter *, const QRect &) const;
00294
00295 private:
00296 void initAxesData();
00297 void deleteAxesData();
00298 void updateScaleDiv();
00299
00300 void initPlot(const QString &title = QString::null);
00301
00302 class AxisData;
00303 AxisData *d_axisData[axisCnt];
00304
00305 class PrivateData;
00306 PrivateData *d_data;
00307 };
00308
00309 #endif