123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997 Josef Wilgen
- * Copyright (C) 2002 Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
- #ifndef QWT_SAMPLES_H
- #define QWT_SAMPLES_H 1
- #include "qwt_global.h"
- #include "qwt_interval.h"
- #include <qvector.h>
- #include <qrect.h>
- //! \brief A sample of the types (x1-x2, y) or (x, y1-y2)
- class QWT_EXPORT QwtIntervalSample
- {
- public:
- QwtIntervalSample();
- QwtIntervalSample( double, const QwtInterval & );
- QwtIntervalSample( double value, double min, double max );
- bool operator==( const QwtIntervalSample & ) const;
- bool operator!=( const QwtIntervalSample & ) const;
- //! Value
- double value;
- //! Interval
- QwtInterval interval;
- };
- /*!
- Constructor
- The value is set to 0.0, the interval is invalid
- */
- inline QwtIntervalSample::QwtIntervalSample():
- value( 0.0 )
- {
- }
- //! Constructor
- inline QwtIntervalSample::QwtIntervalSample(
- double v, const QwtInterval &intv ):
- value( v ),
- interval( intv )
- {
- }
- //! Constructor
- inline QwtIntervalSample::QwtIntervalSample(
- double v, double min, double max ):
- value( v ),
- interval( min, max )
- {
- }
- //! Compare operator
- inline bool QwtIntervalSample::operator==(
- const QwtIntervalSample &other ) const
- {
- return value == other.value && interval == other.interval;
- }
- //! Compare operator
- inline bool QwtIntervalSample::operator!=(
- const QwtIntervalSample &other ) const
- {
- return !( *this == other );
- }
- //! \brief A sample of the types (x1...xn, y) or (x, y1..yn)
- class QWT_EXPORT QwtSetSample
- {
- public:
- QwtSetSample();
- QwtSetSample( double, const QVector<double> & = QVector<double>() );
- bool operator==( const QwtSetSample &other ) const;
- bool operator!=( const QwtSetSample &other ) const;
- double added() const;
- //! value
- double value;
- //! Vector of values associated to value
- QVector<double> set;
- };
- /*!
- Constructor
- The value is set to 0.0
- */
- inline QwtSetSample::QwtSetSample():
- value( 0.0 )
- {
- }
- /*!
- Constructor
- \param v Value
- \param s Set of values
- */
- inline QwtSetSample::QwtSetSample( double v, const QVector< double > &s ):
- value( v ),
- set( s )
- {
- }
- //! Compare operator
- inline bool QwtSetSample::operator==( const QwtSetSample &other ) const
- {
- return value == other.value && set == other.set;
- }
- //! Compare operator
- inline bool QwtSetSample::operator!=( const QwtSetSample &other ) const
- {
- return !( *this == other );
- }
- //! \return All values of the set added
- inline double QwtSetSample::added() const
- {
- double y = 0.0;
- for ( int i = 0; i < set.size(); i++ )
- y += set[i];
- return y;
- }
- /*!
- \brief Open-High-Low-Close sample used in financial charts
- In financial charts the movement of a price in a time interval is often
- represented by the opening/closing prices and the lowest/highest prices
- in this interval.
- \sa QwtTradingChartData
- */
- class QWT_EXPORT QwtOHLCSample
- {
- public:
- QwtOHLCSample( double time = 0.0,
- double open = 0.0, double high = 0.0,
- double low = 0.0, double close = 0.0 );
- QwtInterval boundingInterval() const;
- bool isValid() const;
- /*!
- Time of the sample, usually a number representing
- a specific interval - like a day.
- */
- double time;
- //! Opening price
- double open;
- //! Highest price
- double high;
- //! Lowest price
- double low;
- //! Closing price
- double close;
- };
- /*!
- Constructor
- \param t Time value
- \param o Open value
- \param h High value
- \param l Low value
- \param c Close value
- */
- inline QwtOHLCSample::QwtOHLCSample( double t,
- double o, double h, double l, double c ):
- time( t ),
- open( o ),
- high( h ),
- low( l ),
- close( c )
- {
- }
- /*!
- \brief Check if a sample is valid
- A sample is valid, when all of the following checks are true:
- - low <= high
- - low <= open <= high
- - low <= close <= high
- \return True, when the sample is valid
- */
- inline bool QwtOHLCSample::isValid() const
- {
- return ( low <= high )
- && ( open >= low )
- && ( open <= high )
- && ( close >= low )
- && ( close <= high );
- }
- /*!
- \brief Calculate the bounding interval of the OHLC values
- For valid samples the limits of this interval are always low/high.
- \return Bounding interval
- \sa isValid()
- */
- inline QwtInterval QwtOHLCSample::boundingInterval() const
- {
- double minY = open;
- minY = qMin( minY, high );
- minY = qMin( minY, low );
- minY = qMin( minY, close );
- double maxY = open;
- maxY = qMax( maxY, high );
- maxY = qMax( maxY, low );
- maxY = qMax( maxY, close );
- return QwtInterval( minY, maxY );
- }
- #endif
|