Qwt User's Guide svn
qwt_scale_engine.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_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 QwtScaleTransformation;
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 ceil125( double x );
00031     static double floor125( double x );
00032 };
00033 
00047 class QWT_EXPORT QwtScaleEngine
00048 {
00049 public:
00056     enum Attribute
00057     {
00059         NoAttribute = 0x00,
00060 
00062         IncludeReference = 0x01,
00063 
00065         Symmetric = 0x02,
00066 
00074         Floating = 0x04,
00075 
00077         Inverted = 0x08
00078     };
00079 
00081     typedef QFlags<Attribute> Attributes;
00082 
00083     explicit QwtScaleEngine();
00084     virtual ~QwtScaleEngine();
00085 
00086     void setAttribute( Attribute, bool on = true );
00087     bool testAttribute( Attribute ) const;
00088 
00089     void setAttributes( Attributes );
00090     Attributes attributes() const;
00091 
00092     void setReference( double reference );
00093     double reference() const;
00094 
00095     void setMargins( double lower, double upper );
00096     double lowerMargin() const;
00097     double upperMargin() const;
00098 
00107     virtual void autoScale( int maxNumSteps,
00108         double &x1, double &x2, double &stepSize ) const = 0;
00109 
00120     virtual QwtScaleDiv divideScale( double x1, double x2,
00121         int maxMajSteps, int maxMinSteps,
00122         double stepSize = 0.0 ) const = 0;
00123 
00125     virtual QwtScaleTransformation *transformation() const = 0;
00126 
00127 protected:
00128     bool contains( const QwtInterval &, double val ) const;
00129     QList<double> strip( const QList<double>&, const QwtInterval & ) const;
00130     double divideInterval( double interval, int numSteps ) const;
00131 
00132     QwtInterval buildInterval( double v ) const;
00133 
00134 private:
00135     class PrivateData;
00136     PrivateData *d_data;
00137 };
00138 
00146 class QWT_EXPORT QwtLinearScaleEngine: public QwtScaleEngine
00147 {
00148 public:
00149     virtual void autoScale( int maxSteps,
00150         double &x1, double &x2, double &stepSize ) const;
00151 
00152     virtual QwtScaleDiv divideScale( double x1, double x2,
00153         int numMajorSteps, int numMinorSteps,
00154                                      double stepSize = 0.0 ) const;
00155 
00156     virtual QwtScaleTransformation *transformation() const;
00157 
00158 protected:
00159     QwtInterval align( const QwtInterval&, double stepSize ) const;
00160 
00161     void buildTicks(
00162         const QwtInterval &, double stepSize, int maxMinSteps,
00163         QList<double> ticks[QwtScaleDiv::NTickTypes] ) const;
00164 
00165     QList<double> buildMajorTicks(
00166         const QwtInterval &interval, double stepSize ) const;
00167 
00168     void buildMinorTicks(
00169         const QList<double>& majorTicks,
00170         int maxMinMark, double step,
00171         QList<double> &, QList<double> & ) const;
00172 };
00173 
00185 class QWT_EXPORT QwtLog10ScaleEngine: public QwtScaleEngine
00186 {
00187 public:
00188     virtual void autoScale( int maxSteps,
00189         double &x1, double &x2, double &stepSize ) const;
00190 
00191     virtual QwtScaleDiv divideScale( double x1, double x2,
00192         int numMajorSteps, int numMinorSteps,
00193         double stepSize = 0.0 ) const;
00194 
00195     virtual QwtScaleTransformation *transformation() const;
00196 
00197 protected:
00198     QwtInterval log10( const QwtInterval& ) const;
00199     QwtInterval pow10( const QwtInterval& ) const;
00200 
00201     QwtInterval align( const QwtInterval&, double stepSize ) const;
00202 
00203     void buildTicks(
00204         const QwtInterval &, double stepSize, int maxMinSteps,
00205         QList<double> ticks[QwtScaleDiv::NTickTypes] ) const;
00206 
00207     QList<double> buildMajorTicks(
00208         const QwtInterval &interval, double stepSize ) const;
00209 
00210     QList<double> buildMinorTicks(
00211         const QList<double>& majorTicks,
00212         int maxMinMark, double step ) const;
00213 };
00214 
00215 Q_DECLARE_OPERATORS_FOR_FLAGS( QwtScaleEngine::Attributes )
00216 
00217 #endif
qmi style