Qwt User's Guide
qwt_interval.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_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
 All Classes Functions Variables Typedefs Enumerations Enumerator