Qwt User's Guide svn
qwt_plot_curve.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 #ifndef QWT_PLOT_CURVE_H
00011 #define QWT_PLOT_CURVE_H
00012 
00013 #include "qwt_global.h"
00014 #include "qwt_plot_seriesitem.h"
00015 #include "qwt_series_data.h"
00016 #include "qwt_text.h"
00017 #include <qpen.h>
00018 #include <qstring.h>
00019 
00020 class QPainter;
00021 class QPolygonF;
00022 class QwtScaleMap;
00023 class QwtSymbol;
00024 class QwtCurveFitter;
00025 
00055 class QWT_EXPORT QwtPlotCurve: public QwtPlotSeriesItem<QPointF>
00056 {
00057 public:
00062     enum CurveStyle
00063     {
00067         NoCurve = -1,
00068 
00074         Lines,
00075 
00080         Sticks,
00081 
00087         Steps,
00088 
00095         Dots,
00096 
00102         UserCurve = 100
00103     };
00104 
00109     enum CurveAttribute
00110     {
00115         Inverted = 0x01,
00116 
00127         Fitted = 0x02
00128     };
00129 
00131     typedef QFlags<CurveAttribute> CurveAttributes;
00132 
00140     enum LegendAttribute
00141     {
00146         LegendNoAttribute = 0x00,
00147 
00152         LegendShowLine = 0x01,
00153 
00157         LegendShowSymbol = 0x02,
00158 
00163         LegendShowBrush = 0x04
00164     };
00165 
00167     typedef QFlags<LegendAttribute> LegendAttributes;
00168 
00175     enum PaintAttribute
00176     {
00182         ClipPolygons = 0x01,
00183 
00190         CacheSymbols = 0x02
00191     };
00192 
00194     typedef QFlags<PaintAttribute> PaintAttributes;
00195 
00196     explicit QwtPlotCurve( const QString &title = QString::null );
00197     explicit QwtPlotCurve( const QwtText &title );
00198 
00199     virtual ~QwtPlotCurve();
00200 
00201     virtual int rtti() const;
00202 
00203     void setPaintAttribute( PaintAttribute, bool on = true );
00204     bool testPaintAttribute( PaintAttribute ) const;
00205 
00206     void setLegendAttribute( LegendAttribute, bool on = true );
00207     bool testLegendAttribute( LegendAttribute ) const;
00208 
00209 #ifndef QWT_NO_COMPAT
00210     void setRawSamples( const double *xData, const double *yData, int size );
00211     void setSamples( const double *xData, const double *yData, int size );
00212     void setSamples( const QVector<double> &xData, const QVector<double> &yData );
00213 #endif
00214     void setSamples( const QVector<QPointF> & );
00215 
00216     int closestPoint( const QPoint &pos, double *dist = NULL ) const;
00217 
00218     double minXValue() const;
00219     double maxXValue() const;
00220     double minYValue() const;
00221     double maxYValue() const;
00222 
00223     void setCurveAttribute( CurveAttribute, bool on = true );
00224     bool testCurveAttribute( CurveAttribute ) const;
00225 
00226     void setPen( const QPen & );
00227     const QPen &pen() const;
00228 
00229     void setBrush( const QBrush & );
00230     const QBrush &brush() const;
00231 
00232     void setBaseline( double ref );
00233     double baseline() const;
00234 
00235     void setStyle( CurveStyle style );
00236     CurveStyle style() const;
00237 
00238     void setSymbol( const QwtSymbol *s );
00239     const QwtSymbol *symbol() const;
00240 
00241     void setCurveFitter( QwtCurveFitter * );
00242     QwtCurveFitter *curveFitter() const;
00243 
00244     virtual void drawSeries( QPainter *,
00245         const QwtScaleMap &xMap, const QwtScaleMap &yMap,
00246         const QRectF &canvasRect, int from, int to ) const;
00247 
00248     virtual void updateLegend( QwtLegend * ) const;
00249     virtual void drawLegendIdentifier( QPainter *, const QRectF & ) const;
00250 
00251 protected:
00252 
00253     void init();
00254 
00255     virtual void drawCurve( QPainter *p, int style,
00256         const QwtScaleMap &xMap, const QwtScaleMap &yMap,
00257         const QRectF &canvasRect, int from, int to ) const;
00258 
00259     virtual void drawSymbols( QPainter *p, const QwtSymbol &,
00260         const QwtScaleMap &xMap, const QwtScaleMap &yMap,
00261         const QRectF &canvasRect, int from, int to ) const;
00262 
00263     void drawLines( QPainter *p,
00264         const QwtScaleMap &xMap, const QwtScaleMap &yMap,
00265         const QRectF &canvasRect, int from, int to ) const;
00266 
00267     void drawSticks( QPainter *p,
00268         const QwtScaleMap &xMap, const QwtScaleMap &yMap,
00269         const QRectF &canvasRect, int from, int to ) const;
00270 
00271     void drawDots( QPainter *p,
00272         const QwtScaleMap &xMap, const QwtScaleMap &yMap,
00273         const QRectF &canvasRect, int from, int to ) const;
00274 
00275     void drawSteps( QPainter *p,
00276         const QwtScaleMap &xMap, const QwtScaleMap &yMap,
00277         const QRectF &canvasRect, int from, int to ) const;
00278 
00279     virtual void fillCurve( QPainter *,
00280         const QwtScaleMap &, const QwtScaleMap &, 
00281         const QRectF &canvasRect, QPolygonF & ) const;
00282 
00283     void closePolyline( QPainter *,
00284         const QwtScaleMap &, const QwtScaleMap &, QPolygonF & ) const;
00285 
00286 private:
00287     class PrivateData;
00288     PrivateData *d_data;
00289 };
00290 
00292 inline double QwtPlotCurve::minXValue() const
00293 {
00294     return boundingRect().left();
00295 }
00296 
00298 inline double QwtPlotCurve::maxXValue() const
00299 {
00300     return boundingRect().right();
00301 }
00302 
00304 inline double QwtPlotCurve::minYValue() const
00305 {
00306     return boundingRect().top();
00307 }
00308 
00310 inline double QwtPlotCurve::maxYValue() const
00311 {
00312     return boundingRect().bottom();
00313 }
00314 
00315 Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotCurve::PaintAttributes )
00316 Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotCurve::LegendAttributes )
00317 Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotCurve::CurveAttributes )
00318 
00319 #endif
qmi style