Qwt User's Guide
|
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_SCALE_ENGINE_H 00011 #define QWT_SCALE_ENGINE_H 00012 00013 #include "qwt_global.h" 00014 #include "qwt_scale_div.h" 00015 #include "qwt_interval.h" 00016 00017 class QwtTransform; 00018 00022 class QWT_EXPORT QwtScaleArithmetic 00023 { 00024 public: 00025 static double ceilEps( double value, double intervalSize ); 00026 static double floorEps( double value, double intervalSize ); 00027 00028 static double divideEps( double interval, double steps ); 00029 00030 static double divideInterval( double interval, 00031 int numSteps, uint base ); 00032 }; 00033 00045 class QWT_EXPORT QwtScaleEngine 00046 { 00047 public: 00054 enum Attribute 00055 { 00057 NoAttribute = 0x00, 00058 00060 IncludeReference = 0x01, 00061 00063 Symmetric = 0x02, 00064 00072 Floating = 0x04, 00073 00075 Inverted = 0x08 00076 }; 00077 00079 typedef QFlags<Attribute> Attributes; 00080 00081 explicit QwtScaleEngine( uint base = 10 ); 00082 virtual ~QwtScaleEngine(); 00083 00084 void setBase( uint base ); 00085 uint base() const; 00086 00087 void setAttribute( Attribute, bool on = true ); 00088 bool testAttribute( Attribute ) const; 00089 00090 void setAttributes( Attributes ); 00091 Attributes attributes() const; 00092 00093 void setReference( double reference ); 00094 double reference() const; 00095 00096 void setMargins( double lower, double upper ); 00097 double lowerMargin() const; 00098 double upperMargin() const; 00099 00108 virtual void autoScale( int maxNumSteps, 00109 double &x1, double &x2, double &stepSize ) const = 0; 00110 00123 virtual QwtScaleDiv divideScale( double x1, double x2, 00124 int maxMajorSteps, int maxMinorSteps, 00125 double stepSize = 0.0 ) const = 0; 00126 00127 void setTransformation( QwtTransform * ); 00128 QwtTransform *transformation() const; 00129 00130 protected: 00131 bool contains( const QwtInterval &, double val ) const; 00132 QList<double> strip( const QList<double>&, const QwtInterval & ) const; 00133 00134 double divideInterval( double interval, int numSteps ) const; 00135 00136 QwtInterval buildInterval( double v ) const; 00137 00138 private: 00139 class PrivateData; 00140 PrivateData *d_data; 00141 }; 00142 00150 class QWT_EXPORT QwtLinearScaleEngine: public QwtScaleEngine 00151 { 00152 public: 00153 QwtLinearScaleEngine( uint base = 10 ); 00154 virtual ~QwtLinearScaleEngine(); 00155 00156 virtual void autoScale( int maxSteps, 00157 double &x1, double &x2, double &stepSize ) const; 00158 00159 virtual QwtScaleDiv divideScale( double x1, double x2, 00160 int numMajorSteps, int numMinorSteps, 00161 double stepSize = 0.0 ) const; 00162 00163 00164 protected: 00165 QwtInterval align( const QwtInterval&, double stepSize ) const; 00166 00167 void buildTicks( 00168 const QwtInterval &, double stepSize, int maxMinSteps, 00169 QList<double> ticks[QwtScaleDiv::NTickTypes] ) const; 00170 00171 QList<double> buildMajorTicks( 00172 const QwtInterval &interval, double stepSize ) const; 00173 00174 void buildMinorTicks( const QList<double>& majorTicks, 00175 int maxMinorSteps, double stepSize, 00176 QList<double> &minorTicks, QList<double> &mediumTicks ) const; 00177 }; 00178 00190 class QWT_EXPORT QwtLogScaleEngine: public QwtScaleEngine 00191 { 00192 public: 00193 QwtLogScaleEngine( uint base = 10 ); 00194 virtual ~QwtLogScaleEngine(); 00195 00196 virtual void autoScale( int maxSteps, 00197 double &x1, double &x2, double &stepSize ) const; 00198 00199 virtual QwtScaleDiv divideScale( double x1, double x2, 00200 int numMajorSteps, int numMinorSteps, 00201 double stepSize = 0.0 ) const; 00202 00203 protected: 00204 QwtInterval align( const QwtInterval&, double stepSize ) const; 00205 00206 void buildTicks( 00207 const QwtInterval &, double stepSize, int maxMinSteps, 00208 QList<double> ticks[QwtScaleDiv::NTickTypes] ) const; 00209 00210 QList<double> buildMajorTicks( 00211 const QwtInterval &interval, double stepSize ) const; 00212 00213 void buildMinorTicks( const QList<double>& majorTicks, 00214 int maxMinorSteps, double stepSize, 00215 QList<double> &minorTicks, QList<double> &mediumTicks ) const; 00216 }; 00217 00218 Q_DECLARE_OPERATORS_FOR_FLAGS( QwtScaleEngine::Attributes ) 00219 00220 #endif