Qwt User's Guide
svn
|
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