Qwt User's Guide  6.1-rc3
 All Classes Functions Variables Typedefs Enumerations Enumerator Pages
qwt_scale_engine.h
1 /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
2  * Qwt Widget Library
3  * Copyright (C) 1997 Josef Wilgen
4  * Copyright (C) 2002 Uwe Rathmann
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the Qwt License, Version 1.0
8  *****************************************************************************/
9 
10 #ifndef QWT_SCALE_ENGINE_H
11 #define QWT_SCALE_ENGINE_H
12 
13 #include "qwt_global.h"
14 #include "qwt_scale_div.h"
15 #include "qwt_interval.h"
16 
17 class QwtTransform;
18 
22 class QWT_EXPORT QwtScaleArithmetic
23 {
24 public:
25  static double ceilEps( double value, double intervalSize );
26  static double floorEps( double value, double intervalSize );
27 
28  static double divideEps( double interval, double steps );
29 
30  static double divideInterval( double interval,
31  int numSteps, uint base );
32 };
33 
45 class QWT_EXPORT QwtScaleEngine
46 {
47 public:
54  enum Attribute
55  {
57  NoAttribute = 0x00,
58 
60  IncludeReference = 0x01,
61 
63  Symmetric = 0x02,
64 
72  Floating = 0x04,
73 
75  Inverted = 0x08
76  };
77 
79  typedef QFlags<Attribute> Attributes;
80 
81  explicit QwtScaleEngine( uint base = 10 );
82  virtual ~QwtScaleEngine();
83 
84  void setBase( uint base );
85  uint base() const;
86 
87  void setAttribute( Attribute, bool on = true );
88  bool testAttribute( Attribute ) const;
89 
90  void setAttributes( Attributes );
91  Attributes attributes() const;
92 
93  void setReference( double reference );
94  double reference() const;
95 
96  void setMargins( double lower, double upper );
97  double lowerMargin() const;
98  double upperMargin() const;
99 
108  virtual void autoScale( int maxNumSteps,
109  double &x1, double &x2, double &stepSize ) const = 0;
110 
121  virtual QwtScaleDiv divideScale( double x1, double x2,
122  int maxMajorSteps, int maxMinorSteps,
123  double stepSize = 0.0 ) const = 0;
124 
125  void setTransformation( QwtTransform * );
126  QwtTransform *transformation() const;
127 
128 protected:
129  bool contains( const QwtInterval &, double val ) const;
130  QList<double> strip( const QList<double>&, const QwtInterval & ) const;
131 
132  double divideInterval( double interval, int numSteps ) const;
133 
134  QwtInterval buildInterval( double v ) const;
135 
136 private:
137  class PrivateData;
138  PrivateData *d_data;
139 };
140 
148 class QWT_EXPORT QwtLinearScaleEngine: public QwtScaleEngine
149 {
150 public:
151  QwtLinearScaleEngine( uint base = 10 );
152  virtual ~QwtLinearScaleEngine();
153 
154  virtual void autoScale( int maxSteps,
155  double &x1, double &x2, double &stepSize ) const;
156 
157  virtual QwtScaleDiv divideScale( double x1, double x2,
158  int numMajorSteps, int numMinorSteps,
159  double stepSize = 0.0 ) const;
160 
161 
162 protected:
163  QwtInterval align( const QwtInterval&, double stepSize ) const;
164 
165  void buildTicks(
166  const QwtInterval &, double stepSize, int maxMinSteps,
167  QList<double> ticks[QwtScaleDiv::NTickTypes] ) const;
168 
169  QList<double> buildMajorTicks(
170  const QwtInterval &interval, double stepSize ) const;
171 
172  void buildMinorTicks( const QList<double>& majorTicks,
173  int maxMinorSteps, double stepSize,
174  QList<double> &minorTicks, QList<double> &mediumTicks ) const;
175 };
176 
188 class QWT_EXPORT QwtLogScaleEngine: public QwtScaleEngine
189 {
190 public:
191  QwtLogScaleEngine( uint base = 10 );
192  virtual ~QwtLogScaleEngine();
193 
194  virtual void autoScale( int maxSteps,
195  double &x1, double &x2, double &stepSize ) const;
196 
197  virtual QwtScaleDiv divideScale( double x1, double x2,
198  int numMajorSteps, int numMinorSteps,
199  double stepSize = 0.0 ) const;
200 
201 protected:
202  QwtInterval align( const QwtInterval&, double stepSize ) const;
203 
204  void buildTicks(
205  const QwtInterval &, double stepSize, int maxMinSteps,
206  QList<double> ticks[QwtScaleDiv::NTickTypes] ) const;
207 
208  QList<double> buildMajorTicks(
209  const QwtInterval &interval, double stepSize ) const;
210 
211  void buildMinorTicks( const QList<double>& majorTicks,
212  int maxMinorSteps, double stepSize,
213  QList<double> &minorTicks, QList<double> &mediumTicks ) const;
214 };
215 
216 Q_DECLARE_OPERATORS_FOR_FLAGS( QwtScaleEngine::Attributes )
217 
218 #endif