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_INTERVAL_H 00011 #define QWT_INTERVAL_H 00012 00013 #include "qwt_global.h" 00014 #include <qmetatype.h> 00015 00016 #ifndef QT_NO_DEBUG_STREAM 00017 #include <qdebug.h> 00018 #endif 00019 00026 class QWT_EXPORT QwtInterval 00027 { 00028 public: 00033 enum BorderFlag 00034 { 00036 IncludeBorders = 0x00, 00037 00039 ExcludeMinimum = 0x01, 00040 00042 ExcludeMaximum = 0x02, 00043 00045 ExcludeBorders = ExcludeMinimum | ExcludeMaximum 00046 }; 00047 00049 typedef QFlags<BorderFlag> BorderFlags; 00050 00051 QwtInterval(); 00052 QwtInterval( double minValue, double maxValue, 00053 BorderFlags = IncludeBorders ); 00054 00055 void setInterval( double minValue, double maxValue, 00056 BorderFlags = IncludeBorders ); 00057 00058 QwtInterval normalized() const; 00059 QwtInterval inverted() const; 00060 QwtInterval limited( double minValue, double maxValue ) const; 00061 00062 bool operator==( const QwtInterval & ) const; 00063 bool operator!=( const QwtInterval & ) const; 00064 00065 void setBorderFlags( BorderFlags ); 00066 BorderFlags borderFlags() const; 00067 00068 double minValue() const; 00069 double maxValue() const; 00070 00071 double width() const; 00072 00073 void setMinValue( double ); 00074 void setMaxValue( double ); 00075 00076 bool contains( double value ) const; 00077 00078 bool intersects( const QwtInterval & ) const; 00079 QwtInterval intersect( const QwtInterval & ) const; 00080 QwtInterval unite( const QwtInterval & ) const; 00081 00082 QwtInterval operator|( const QwtInterval & ) const; 00083 QwtInterval operator&( const QwtInterval & ) const; 00084 00085 QwtInterval &operator|=( const QwtInterval & ); 00086 QwtInterval &operator&=( const QwtInterval & ); 00087 00088 QwtInterval extend( double value ) const; 00089 QwtInterval operator|( double ) const; 00090 QwtInterval &operator|=( double ); 00091 00092 bool isValid() const; 00093 bool isNull() const; 00094 void invalidate(); 00095 00096 QwtInterval symmetrize( double value ) const; 00097 00098 private: 00099 double d_minValue; 00100 double d_maxValue; 00101 BorderFlags d_borderFlags; 00102 }; 00103 00104 Q_DECLARE_TYPEINFO(QwtInterval, Q_MOVABLE_TYPE); 00105 00112 inline QwtInterval::QwtInterval(): 00113 d_minValue( 0.0 ), 00114 d_maxValue( -1.0 ), 00115 d_borderFlags( IncludeBorders ) 00116 { 00117 } 00118 00128 inline QwtInterval::QwtInterval( 00129 double minValue, double maxValue, BorderFlags borderFlags ): 00130 d_minValue( minValue ), 00131 d_maxValue( maxValue ), 00132 d_borderFlags( borderFlags ) 00133 { 00134 } 00135 00143 inline void QwtInterval::setInterval( 00144 double minValue, double maxValue, BorderFlags borderFlags ) 00145 { 00146 d_minValue = minValue; 00147 d_maxValue = maxValue; 00148 d_borderFlags = borderFlags; 00149 } 00150 00157 inline void QwtInterval::setBorderFlags( BorderFlags borderFlags ) 00158 { 00159 d_borderFlags = borderFlags; 00160 } 00161 00166 inline QwtInterval::BorderFlags QwtInterval::borderFlags() const 00167 { 00168 return d_borderFlags; 00169 } 00170 00176 inline void QwtInterval::setMinValue( double minValue ) 00177 { 00178 d_minValue = minValue; 00179 } 00180 00186 inline void QwtInterval::setMaxValue( double maxValue ) 00187 { 00188 d_maxValue = maxValue; 00189 } 00190 00192 inline double QwtInterval::minValue() const 00193 { 00194 return d_minValue; 00195 } 00196 00198 inline double QwtInterval::maxValue() const 00199 { 00200 return d_maxValue; 00201 } 00202 00210 inline bool QwtInterval::isValid() const 00211 { 00212 if ( ( d_borderFlags & ExcludeBorders ) == 0 ) 00213 return d_minValue <= d_maxValue; 00214 else 00215 return d_minValue < d_maxValue; 00216 } 00217 00227 inline double QwtInterval::width() const 00228 { 00229 return isValid() ? ( d_maxValue - d_minValue ) : 0.0; 00230 } 00231 00240 inline QwtInterval QwtInterval::operator&( 00241 const QwtInterval &other ) const 00242 { 00243 return intersect( other ); 00244 } 00245 00254 inline QwtInterval QwtInterval::operator|( 00255 const QwtInterval &other ) const 00256 { 00257 return unite( other ); 00258 } 00259 00266 inline bool QwtInterval::operator==( const QwtInterval &other ) const 00267 { 00268 return ( d_minValue == other.d_minValue ) && 00269 ( d_maxValue == other.d_maxValue ) && 00270 ( d_borderFlags == other.d_borderFlags ); 00271 } 00278 inline bool QwtInterval::operator!=( const QwtInterval &other ) const 00279 { 00280 return ( !( *this == other ) ); 00281 } 00282 00290 inline QwtInterval QwtInterval::operator|( double value ) const 00291 { 00292 return extend( value ); 00293 } 00294 00296 inline bool QwtInterval::isNull() const 00297 { 00298 return isValid() && d_minValue >= d_maxValue; 00299 } 00300 00307 inline void QwtInterval::invalidate() 00308 { 00309 d_minValue = 0.0; 00310 d_maxValue = -1.0; 00311 } 00312 00313 Q_DECLARE_OPERATORS_FOR_FLAGS( QwtInterval::BorderFlags ) 00314 Q_DECLARE_METATYPE( QwtInterval ) 00315 00316 #ifndef QT_NO_DEBUG_STREAM 00317 QWT_EXPORT QDebug operator<<( QDebug, const QwtInterval & ); 00318 #endif 00319 00320 #endif