Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

qwt_plot.h

00001 /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
00002  * Qwt Widget Library
00003  * Copyright (C) 1997   Josef Wilgen
00004  * Copyright (C) 2002   Uwe Rathmann
00005  *
00006  * This library is free software; you can redistribute it and/or
00007  * modify it under the terms of the Qwt License, Version 1.0
00008  *****************************************************************************/
00009 
00010 // vim: expandtab
00011 
00012 #ifndef QWT_PLOT_H
00013 #define QWT_PLOT_H
00014 
00015 #include <qframe.h>
00016 #include "qwt_global.h"
00017 #include "qwt_array.h"
00018 #include "qwt_grid.h"
00019 #include "qwt_autoscl.h"
00020 #include "qwt_scldraw.h"
00021 #include "qwt_symbol.h"
00022 #include "qwt_curve.h"
00023 #include "qwt_marker.h"
00024 #include "qwt_legend.h"
00025 #include "qwt_plot_printfilter.h"
00026 #include "qwt_plot_classes.h"
00027 #include "qwt_plot_dict.h"
00028 
00029 class QLabel;
00030 class QwtPlotLayout;
00031 class QwtScale;
00032 class QwtPlotItem;
00033 class QwtPlotCanvas;
00034 class QwtPlotPrintFilter;
00035 
00085 class QWT_EXPORT QwtPlot: public QFrame
00086 {
00087     friend class QwtPlotItem;
00088     friend class QwtPlotCanvas;
00089     friend class QwtPlotPrintFilter;
00090 
00091     Q_OBJECT
00092 
00093     Q_ENUMS( Axis Position )
00094         
00095     // plot
00096     Q_PROPERTY( bool autoReplot READ autoReplot WRITE setAutoReplot )
00097 
00098     // canvas
00099     Q_PROPERTY( QColor canvasBackground READ canvasBackground 
00100         WRITE setCanvasBackground )
00101     Q_PROPERTY( int canvasLineWidth READ canvasLineWidth 
00102         WRITE setCanvasLineWidth )
00103 
00104     // axes  
00105     Q_PROPERTY( bool xBottomAxis READ xBottomAxisEnabled 
00106         WRITE enableXBottomAxis )
00107     Q_PROPERTY( bool xTopAxis READ xTopAxisEnabled WRITE enableXTopAxis )
00108     Q_PROPERTY( bool yLeftAxis READ yLeftAxisEnabled WRITE enableYLeftAxis )
00109     Q_PROPERTY( bool yRightAxis READ yRightAxisEnabled WRITE enableYRightAxis )
00110 
00111     // title
00112     Q_PROPERTY( QString title READ title WRITE setTitle )
00113     Q_PROPERTY( QFont titleFont READ titleFont WRITE setTitleFont )
00114 
00115     // grid
00116     Q_PROPERTY( bool xGrid READ gridXEnabled WRITE enableGridX )
00117     Q_PROPERTY( bool xMinGrid READ gridXMinEnabled WRITE enableGridX )
00118     Q_PROPERTY( bool yGrid READ gridYEnabled WRITE enableGridY )
00119     Q_PROPERTY( bool yMinGrid READ gridYMinEnabled WRITE enableGridY )
00120 
00121     // legend
00122     Q_PROPERTY( bool autoLegend READ autoLegend WRITE setAutoLegend )
00123     Q_PROPERTY( QFont legendFont READ legendFont WRITE setLegendFont )
00124     Q_PROPERTY( Position legendPosition READ legendPosition
00125         WRITE setLegendPosition)
00126 
00127 public:
00129     enum Axis { yLeft, yRight, xBottom, xTop, axisCnt };
00131     // The enums QwtPlot::Position and Qwt::Position must match,
00132     // because deprecated functions like
00133     // QwtPlot::setLegendPos(Qwt::Left)
00134     // are now implemented in terms of functions like
00135     // QwtPlot::setLegendPosition(QwtPlot::Left).
00136     enum Position {
00137         Left = Qwt::Left,
00138         Right = Qwt::Right,
00139         Bottom = Qwt::Bottom,
00140         Top = Qwt::Top
00141     };
00142 
00143     QwtPlot(QWidget *p = 0, const char *name = 0);
00144     QwtPlot(const QString &title, QWidget *p = 0, const char *name = 0);
00145     virtual ~QwtPlot();
00146 
00148     void enableXBottomAxis(bool b) {enableAxis(xBottom,b);}     
00150     bool xBottomAxisEnabled() const {return axisEnabled(xBottom);};
00152     void enableXTopAxis(bool b) {enableAxis(xTop,b);}       
00154     bool xTopAxisEnabled() const {return axisEnabled(xTop);};
00156     void enableYRightAxis(bool b) {enableAxis(yRight,b);}       
00158     bool yRightAxisEnabled() const {return axisEnabled(yRight);};
00160     void enableYLeftAxis(bool b) {enableAxis(yLeft,b);}     
00162     bool yLeftAxisEnabled() const {return axisEnabled(yLeft);};
00163 
00164     void setAutoReplot(bool tf = TRUE);
00165     bool autoReplot() const;
00166 
00167     void print(QPaintDevice &p,
00168         const QwtPlotPrintFilter & = QwtPlotPrintFilter()) const;
00169     virtual void print(QPainter *, const QRect &rect,
00170         const QwtPlotPrintFilter & = QwtPlotPrintFilter()) const;
00171 
00172 
00173 #ifndef QWT_NO_COMPAT
00174     // Outline
00175 
00176     void enableOutline(bool tf);
00177     bool outlineEnabled() const;
00178     void setOutlineStyle(Qwt::Shape os);
00179     Qwt::Shape outlineStyle() const;
00180     void setOutlinePen(const QPen &pn);
00181     const QPen& outlinePen() const;
00182 #endif
00183 
00184     // Layout
00185 
00186     QwtPlotLayout *plotLayout();
00187     const QwtPlotLayout *plotLayout() const;
00188 
00189     void setMargin(int margin);
00190     int margin() const;
00191 
00192     // Title
00193 
00194     void setTitle(const QString &t);
00195     QString title() const;
00196     void setTitleFont (const QFont &f);
00197     QFont titleFont() const;
00198 
00199     QLabel *titleLabel();
00200     const QLabel *titleLabel() const;
00201 
00202     // Canvas
00203 
00204     QwtPlotCanvas *canvas();
00205     const QwtPlotCanvas *canvas() const;
00206 
00207     void setCanvasBackground (const QColor &c);
00208     const QColor& canvasBackground() const;
00209 
00210     void setCanvasLineWidth(int w);
00211     int canvasLineWidth() const;
00212 
00213     QwtPlotCurveIterator curveIterator() const;
00214     QwtPlotMarkerIterator markerIterator() const;
00215 
00216     QwtDiMap canvasMap(int axis) const;
00217 
00218     double invTransform(int axis, int pos) const;
00219     int transform(int axis, double value) const;
00220 
00221     // Curves
00222 
00223     long insertCurve(QwtPlotCurve *);
00224     long insertCurve(const QString &title,
00225         int xAxis = xBottom, int yAxis = yLeft);
00226 
00227     QwtPlotCurve *curve(long key);
00228     const QwtPlotCurve *curve(long key) const;
00229 
00230     QwtArray<long> curveKeys() const;
00231 
00232     long closestCurve(int xpos, int ypos, int &dist) const;
00233     long closestCurve(int xpos, int ypos, int &dist,
00234         double &xval, double &yval, int &index) const;
00235 
00236     bool setCurveBaseline(long key, double ref);
00237     double curveBaseline(long key) const;
00238 
00239     bool setCurveRawData(long key, const double *x, const double *y, int size);
00240     bool setCurveData(long key, const double *x, const double *y, int size);
00241     bool setCurveData(long key, 
00242         const QwtArray<double> &x, const QwtArray<double> &y);
00243     bool setCurveData(long key, const QwtArray<QwtDoublePoint> &data);
00244     bool setCurveData(long key, const QwtData &data);
00245 
00246     bool setCurveOptions(long key, int t);
00247     int curveOptions(long key) const;
00248 
00249     bool setCurvePen(long key, const QPen &pen);
00250     QPen curvePen(long key) const;
00251 
00252     bool setCurveBrush(long key, const QBrush &brush);
00253     QBrush curveBrush(long key) const;
00254 
00255     bool setCurveSplineSize(long key, int s);
00256     int curveSplineSize(long key) const;
00257 
00258     bool setCurveStyle(long key, int s, int options = 0);
00259     int curveStyle(long key) const;
00260 
00261     bool setCurveSymbol(long key, const QwtSymbol &s);
00262     QwtSymbol curveSymbol(long key) const;
00263 
00264     bool setCurveTitle(long key, const QString &s);
00265     QString curveTitle(long key) const;
00266 
00267     bool setCurveXAxis(long key, int axis);
00268     int curveXAxis(long key) const;
00269     bool setCurveYAxis(long key, int axis);
00270     int curveYAxis(long key) const;
00271 
00272     void drawCurve(long key, int from = 0, int to = -1);
00273 
00274     //  Grid
00275 
00276     void enableGridX(bool tf = TRUE);
00277     void enableGridXMin(bool tf = TRUE);
00278     void enableGridY(bool tf = TRUE);
00279     void enableGridYMin(bool tf = TRUE);
00280 
00281     bool gridXEnabled() const;
00282     bool gridXMinEnabled() const;
00283     bool gridYEnabled() const;
00284     bool gridYMinEnabled() const;
00285 
00286     void setGridXAxis(int axis);
00287     int gridXAxis() const;
00288     void setGridYAxis(int axis);
00289     int gridYAxis() const;
00290 
00291     void setGridPen(const QPen &p);
00292     void setGridMajPen(const QPen &p);
00293     const QPen& gridMajPen() const;
00294     void setGridMinPen(const QPen &p);
00295     const QPen& gridMinPen() const;
00296 
00297     QwtPlotGrid &grid();
00298     const QwtPlotGrid &grid() const;
00299 
00300     // Axes
00301 
00302     void setAxisAutoScale(int axis);
00303     bool axisAutoScale(int axis) const;
00304 
00305     void enableAxis(int axis, bool tf = TRUE);
00306     bool axisEnabled(int axis) const;
00307 
00308     void changeAxisOptions(int axis, int opt, bool value);
00309     void setAxisOptions(int axis, int opt);
00310     int axisOptions(int axis) const;
00311 
00312     void setAxisFont(int axis, const QFont &f);
00313     QFont axisFont(int axis) const;
00314 
00315     void setAxisMargins(int axis, double mlo, double mhi);
00316     bool axisMargins(int axis, double &mlo, double &mhi) const;
00317 
00318     void setAxisScale(int axis, double min, double max, double step = 0);
00319     void setAxisScaleDraw(int axis, QwtScaleDraw *);
00320     const QwtScaleDiv *axisScale(int axis) const;
00321     const QwtScaleDraw *axisScaleDraw(int axis) const;
00322     const QwtScale *axis(int axis) const;
00323 
00324     void setAxisLabelFormat(int axis, char f, int prec, int fieldwidth = 0);
00325     void axisLabelFormat(int axis, char &f, int &prec, int &fieldwidth) const;
00326 
00327     void setAxisLabelAlignment(int axis, int alignment);
00328     void setAxisLabelRotation(int axis, double rotation);
00329 
00330     void setAxisTitle(int axis, const QString &t);
00331     QString axisTitle(int axis) const;
00332     void setAxisTitleFont(int axis, const QFont &f);
00333     QFont axisTitleFont(int axis) const;
00334     void setAxisTitleAlignment(int axis, int align);
00335     int axisTitleAlignment(int axis) const;
00336 
00337     void setAxisMaxMinor(int axis, int maxMinor);
00338     int axisMaxMajor(int axis) const;
00339     void setAxisMaxMajor(int axis, int maxMajor);
00340     int axisMaxMinor(int axis) const;
00341 
00342     void setAxisReference(int axis, double value);
00343     double axisReference(int axis) const;
00344 
00345     //  Markers
00346 
00347     long insertMarker(QwtPlotMarker *);
00348     long insertMarker(const QString &label = QString::null,
00349                 int xAxis = xBottom, int yAxis = yLeft);
00350     long insertLineMarker(const QString &label, int axis);
00351 
00352     QwtPlotMarker *marker(long key);
00353     const QwtPlotMarker *marker(long key) const;
00354 
00355     long closestMarker(int xpos, int ypos, int &dist) const;
00356     QwtArray<long> markerKeys() const;
00357 
00358     bool setMarkerXAxis(long key, int axis);
00359     int markerXAxis(long key) const;
00360     bool setMarkerYAxis(long key, int axis);
00361     int markerYAxis(long key) const;
00362 
00363     bool setMarkerPos(long key, double xval, double yVal);
00364     bool setMarkerXPos(long key, double val);
00365     bool setMarkerYPos(long key, double val);
00366     void markerPos(long key, double &mx, double &my) const;
00367 
00368     bool setMarkerFont(long key, const QFont &f);
00369     QFont markerFont(long key) const;
00370     bool setMarkerPen(long key, const QPen &p);
00371 
00372     bool setMarkerLabel(long key, const QString &text,
00373         const QFont &font = QFont(), const QColor &color = QColor(),
00374         const QPen &pen = QPen(Qt::NoPen),
00375         const QBrush &brush = QBrush(Qt::NoBrush));
00376 
00377     bool setMarkerLabelText(long key, const QString &text);
00378     const QString markerLabel(long key) const;
00379     bool setMarkerLabelAlign(long key, int align);
00380     int markerLabelAlign(long key) const;
00381     bool setMarkerLabelPen(long key, const QPen &p);
00382     QPen markerLabelPen(long key) const;
00383 
00384     bool setMarkerLinePen(long key, const QPen &p);
00385     QPen markerLinePen(long key) const;
00386     bool setMarkerLineStyle(long key, QwtMarker::LineStyle st);
00387     QwtMarker::LineStyle markerLineStyle(long key) const;
00388 
00389     bool setMarkerSymbol(long key, const QwtSymbol &s);
00390     QwtSymbol markerSymbol(long key) const;
00391 
00392     // Legend 
00393 
00394     void setAutoLegend(bool enabled);
00395     bool autoLegend() const;
00396 
00397     void enableLegend(bool tf, long curveKey = -1);
00398     bool legendEnabled(long curveKey) const;
00399 
00400     void setLegendPosition(Position pos, double ratio);
00401 
00402     void setLegendPosition(Position pos);
00403     Position legendPosition() const;
00404 
00405 #ifndef QWT_NO_COMPAT
00406     void setLegendPos(int pos, double ratio = 0.0);
00407     int legendPos() const;
00408 #endif
00409 
00410     void setLegendFont(const QFont &f);
00411     const QFont legendFont() const;
00412 
00413     void setLegendFrameStyle(int st);
00414     int legendFrameStyle() const;
00415 
00416     QwtLegend *legend();
00417     const QwtLegend *legend() const;
00418 
00419     void setLegendDisplayPolicy(
00420         QwtLegend::LegendDisplayPolicy, int mode = -1);
00421 
00422     // Misc
00423     virtual QSize sizeHint() const;
00424     virtual QSize minimumSizeHint() const;
00425 
00426     virtual bool event(QEvent *);
00427 
00428 public slots:
00429     void clear();
00430 
00431     bool removeCurve(long key);
00432     void removeCurves();
00433 
00434     bool removeMarker(long key);
00435     void removeMarkers();
00436 
00437     virtual void replot();
00438 
00439 protected slots:
00440     virtual void lgdClicked();
00441 
00442 #ifndef QWT_NO_COMPAT
00443 signals:
00456     void plotMousePressed(const QMouseEvent &e);
00457 
00471     void plotMouseReleased(const QMouseEvent &e);
00472 
00485     void plotMouseMoved(const QMouseEvent &e);
00486 #else
00487 private:
00488     // needed for mocs #ifdef ignorance
00489     void plotMousePressed(const QMouseEvent &);
00490     void plotMouseReleased(const QMouseEvent &);
00491     void plotMouseMoved(const QMouseEvent &);
00492 #endif // !QWT_NO_COMPAT
00493 
00494 signals:
00507     void legendClicked(long key);
00508 
00509 protected:
00510     void autoRefresh();
00511     static bool axisValid(int axis);
00512 
00513     virtual void drawCanvas(QPainter *);
00514     virtual void drawCanvasItems(QPainter *, const QRect &,
00515         const QwtArray<QwtDiMap> &, const QwtPlotPrintFilter &) const;
00516     virtual void drawContents( QPainter* p );
00517 
00518     virtual void updateTabOrder();
00519 
00520     void updateAxes();
00521     void updateLayout();
00522 
00523     virtual void resizeEvent(QResizeEvent *e);
00524 
00525     virtual void insertLegendItem(long curveKey);
00526     virtual void updateLegendItem(long curveKey);
00527     virtual void printLegendItem(QPainter *, 
00528         const QWidget *, const QRect &) const;
00529 
00530     void updateLegendItem(const QwtPlotCurve *, QwtLegendItem *);
00531 
00532     virtual void printTitle(QPainter *, const QRect &) const;
00533     virtual void printScale(QPainter *, int axis, int startDist, int endDist,
00534         int baseDist, const QRect &) const;
00535     virtual void printCanvas(QPainter *, const QRect &,
00536         const QwtArray<QwtDiMap> &, const QwtPlotPrintFilter &) const;
00537     virtual void printLegend(QPainter *, const QRect &) const;
00538 
00539 private:
00540     void initAxes();
00541     long newCurveKey();
00542     long newMarkerKey();
00543     void initPlot(const QString &title = QString::null);
00544 
00545     QLabel *d_lblTitle;
00546     QwtPlotCanvas *d_canvas;
00547     QwtLegend *d_legend;
00548     QwtPlotLayout *d_layout;
00549 
00550     bool d_axisEnabled[axisCnt];
00551     QwtScale *d_scale[axisCnt];
00552     QwtAutoScale d_as[axisCnt];
00553 
00554     QwtCurveDict *d_curves;
00555     QwtMarkerDict *d_markers;
00556     QwtPlotGrid *d_grid;
00557 
00558     bool d_autoReplot;
00559     bool d_autoLegend;
00560 
00561 };
00562 
00563 #endif
00564 
00565 // Local Variables:
00566 // mode: C++
00567 // c-file-style: "stroustrup"
00568 // indent-tabs-mode: nil
00569 // End:

Generated on Sun Nov 21 11:12:43 2004 for Qwt User's Guide by doxygen 1.3.5