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_INTERVAL_H 00011 #define QWT_INTERVAL_H 00012 00013 #include "qwt_global.h" 00014 #ifndef QT_NO_DEBUG_STREAM 00015 #include <qdebug.h> 00016 #endif 00017 00024 class QWT_EXPORT QwtInterval 00025 { 00026 public: 00031 enum BorderFlag 00032 { 00034 IncludeBorders = 0x00, 00035 00037 ExcludeMinimum = 0x01, 00038 00040 ExcludeMaximum = 0x02, 00041 00043 ExcludeBorders = ExcludeMinimum | ExcludeMaximum 00044 }; 00045 00047 typedef QFlags<BorderFlag> BorderFlags; 00048 00049 QwtInterval(); 00050 QwtInterval( double minValue, double maxValue, 00051 BorderFlags = IncludeBorders ); 00052 00053 void setInterval( double minValue, double maxValue, 00054 BorderFlags = IncludeBorders ); 00055 00056 QwtInterval normalized() const; 00057 QwtInterval inverted() const; 00058 QwtInterval limited( double minValue, double maxValue ) const; 00059 00060 bool operator==( const QwtInterval & ) const; 00061 bool operator!=( const QwtInterval & ) const; 00062 00063 void setBorderFlags( BorderFlags ); 00064 BorderFlags borderFlags() const; 00065 00066 double minValue() const; 00067 double maxValue() const; 00068 00069 double width() const; 00070 00071 void setMinValue( double ); 00072 void setMaxValue( double ); 00073 00074 bool contains( double value ) const; 00075 00076 bool intersects( const QwtInterval & ) const; 00077 QwtInterval intersect( const QwtInterval & ) const; 00078 QwtInterval unite( const QwtInterval & ) const; 00079 00080 QwtInterval operator|( const QwtInterval & ) const; 00081 QwtInterval operator&( const QwtInterval & ) const; 00082 00083 QwtInterval &operator|=( const QwtInterval & ); 00084 QwtInterval &operator&=( const QwtInterval & ); 00085 00086 QwtInterval extend( double value ) const; 00087 QwtInterval operator|( double ) const; 00088 QwtInterval &operator|=( double ); 00089 00090 bool isValid() const; 00091 bool isNull() const; 00092 void invalidate(); 00093 00094 QwtInterval symmetrize( double value ) const; 00095 00096 private: 00097 double d_minValue; 00098 double d_maxValue; 00099 BorderFlags d_borderFlags; 00100 }; 00101 00102 Q_DECLARE_TYPEINFO(QwtInterval, Q_MOVABLE_TYPE); 00103 00110 inline QwtInterval::QwtInterval(): 00111 d_minValue( 0.0 ), 00112 d_maxValue( -1.0 ), 00113 d_borderFlags( IncludeBorders ) 00114 { 00115 } 00116 00126 inline QwtInterval::QwtInterval( 00127 double minValue, double maxValue, BorderFlags borderFlags ): 00128 d_minValue( minValue ), 00129 d_maxValue( maxValue ), 00130 d_borderFlags( borderFlags ) 00131 { 00132 } 00133 00141 inline void QwtInterval::setInterval( 00142 double minValue, double maxValue, BorderFlags borderFlags ) 00143 { 00144 d_minValue = minValue; 00145 d_maxValue = maxValue; 00146 d_borderFlags = borderFlags; 00147 } 00148 00155 inline void QwtInterval::setBorderFlags( BorderFlags borderFlags ) 00156 { 00157 d_borderFlags = borderFlags; 00158 } 00159 00164 inline QwtInterval::BorderFlags QwtInterval::borderFlags() const 00165 { 00166 return d_borderFlags; 00167 } 00168 00174 inline void QwtInterval::setMinValue( double minValue ) 00175 { 00176 d_minValue = minValue; 00177 } 00178 00184 inline void QwtInterval::setMaxValue( double maxValue ) 00185 { 00186 d_maxValue = maxValue; 00187 } 00188 00190 inline double QwtInterval::minValue() const 00191 { 00192 return d_minValue; 00193 } 00194 00196 inline double QwtInterval::maxValue() const 00197 { 00198 return d_maxValue; 00199 } 00200 00208 inline double QwtInterval::width() const 00209 { 00210 return isValid() ? ( d_maxValue - d_minValue ) : 0.0; 00211 } 00212 00217 inline QwtInterval QwtInterval::operator&( 00218 const QwtInterval &interval ) const 00219 { 00220 return intersect( interval ); 00221 } 00222 00227 inline QwtInterval QwtInterval::operator|( 00228 const QwtInterval &interval ) const 00229 { 00230 return unite( interval ); 00231 } 00232 00234 inline bool QwtInterval::operator==( const QwtInterval &other ) const 00235 { 00236 return ( d_minValue == other.d_minValue ) && 00237 ( d_maxValue == other.d_maxValue ) && 00238 ( d_borderFlags == other.d_borderFlags ); 00239 } 00240 00242 inline bool QwtInterval::operator!=( const QwtInterval &other ) const 00243 { 00244 return ( !( *this == other ) ); 00245 } 00246 00254 inline QwtInterval QwtInterval::operator|( double value ) const 00255 { 00256 return extend( value ); 00257 } 00258 00260 inline bool QwtInterval::isNull() const 00261 { 00262 return isValid() && d_minValue >= d_maxValue; 00263 } 00264 00270 inline bool QwtInterval::isValid() const 00271 { 00272 if ( ( d_borderFlags & ExcludeBorders ) == 0 ) 00273 return d_minValue <= d_maxValue; 00274 else 00275 return d_minValue < d_maxValue; 00276 } 00277 00284 inline void QwtInterval::invalidate() 00285 { 00286 d_minValue = 0.0; 00287 d_maxValue = -1.0; 00288 } 00289 00290 Q_DECLARE_OPERATORS_FOR_FLAGS( QwtInterval::BorderFlags ) 00291 00292 #ifndef QT_NO_DEBUG_STREAM 00293 QWT_EXPORT QDebug operator<<( QDebug, const QwtInterval & ); 00294 #endif 00295 00296 #endif