83 lines
2.0 KiB
C
83 lines
2.0 KiB
C
![]() |
/******************************************************************************
|
||
|
* QSkinny - Copyright (C) 2016 Uwe Rathmann
|
||
|
* This file may be used under the terms of the 3-clause BSD License
|
||
|
*****************************************************************************/
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#include <QskIntervalF.h>
|
||
|
|
||
|
#include <qobject.h>
|
||
|
#include <qvector.h>
|
||
|
#include <qrect.h>
|
||
|
|
||
|
class QskPlotCorridorSample
|
||
|
{
|
||
|
public:
|
||
|
qreal value = 0.0;
|
||
|
QskIntervalF boundary;
|
||
|
};
|
||
|
|
||
|
Q_DECLARE_TYPEINFO( QskPlotCorridorSample, Q_MOVABLE_TYPE );
|
||
|
|
||
|
// Hiding the layout of the data behind an abstract API
|
||
|
class QskPlotCorridorData : public QObject
|
||
|
{
|
||
|
Q_OBJECT
|
||
|
|
||
|
public:
|
||
|
QskPlotCorridorData( QObject* parent = nullptr );
|
||
|
virtual ~QskPlotCorridorData();
|
||
|
|
||
|
virtual qsizetype count() const = 0;
|
||
|
virtual QskPlotCorridorSample sampleAt( qsizetype index ) const = 0;
|
||
|
|
||
|
virtual QRectF boundingRect() const;
|
||
|
|
||
|
int upperIndex( qreal value ) const;
|
||
|
QskPlotCorridorSample interpolatedSample( qreal value ) const;
|
||
|
|
||
|
Q_SIGNALS:
|
||
|
void changed();
|
||
|
|
||
|
protected:
|
||
|
mutable QRectF m_boundingRect;
|
||
|
};
|
||
|
|
||
|
// A simple implementation using QVector< CorridorSample >
|
||
|
class QskPlotCorridorSamples : public QskPlotCorridorData
|
||
|
{
|
||
|
Q_OBJECT
|
||
|
|
||
|
using Inherited = QskPlotCorridorData;
|
||
|
|
||
|
public:
|
||
|
QskPlotCorridorSamples( QObject* parent = nullptr );
|
||
|
QskPlotCorridorSamples(
|
||
|
const QVector< QskPlotCorridorSample >&, QObject* parent = nullptr );
|
||
|
|
||
|
void setSamples( const QVector< QskPlotCorridorSample >& );
|
||
|
QVector< QskPlotCorridorSample > samples() const;
|
||
|
|
||
|
qsizetype count() const override;
|
||
|
QskPlotCorridorSample sampleAt( qsizetype index ) const override;
|
||
|
|
||
|
private:
|
||
|
QVector< QskPlotCorridorSample > m_samples;
|
||
|
};
|
||
|
|
||
|
inline QVector< QskPlotCorridorSample > QskPlotCorridorSamples::samples() const
|
||
|
{
|
||
|
return m_samples;
|
||
|
}
|
||
|
|
||
|
inline qsizetype QskPlotCorridorSamples::count() const
|
||
|
{
|
||
|
return m_samples.count();
|
||
|
}
|
||
|
|
||
|
inline QskPlotCorridorSample QskPlotCorridorSamples::sampleAt( qsizetype index ) const
|
||
|
{
|
||
|
return m_samples.at( index );
|
||
|
}
|