diff options
Diffstat (limited to 'examples/charts/audio/xyseriesiodevice.cpp')
-rw-r--r-- | examples/charts/audio/xyseriesiodevice.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/examples/charts/audio/xyseriesiodevice.cpp b/examples/charts/audio/xyseriesiodevice.cpp new file mode 100644 index 00000000..5440771f --- /dev/null +++ b/examples/charts/audio/xyseriesiodevice.cpp @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the Qt Enterprise Charts Add-on. +** +** $QT_BEGIN_LICENSE$ +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "xyseriesiodevice.h" +#include <QXYSeries> + +XYSeriesIODevice::XYSeriesIODevice(QXYSeries * series, QObject *parent) : + QIODevice(parent), + m_series(series) +{ +} + +qint64 XYSeriesIODevice::readData(char * data, qint64 maxSize) +{ + Q_UNUSED(data) + Q_UNUSED(maxSize) + return -1; +} + +qint64 XYSeriesIODevice::writeData(const char * data, qint64 maxSize) +{ + qint64 range = 2000; + QList<QPointF> oldPoints = m_series->points(); + QList<QPointF> points; + int resolution = 4; + + if (oldPoints.count() < range) { + points = m_series->points(); + } else { + for (int i = maxSize/resolution; i < oldPoints.count(); i++) + points.append(QPointF(i - maxSize/resolution, oldPoints.at(i).y())); + } + + qint64 size = points.count(); + for (int k = 0; k < maxSize/resolution; k++) + points.append(QPointF(k + size, ((quint8)data[resolution * k] - 128)/128.0)); + + m_series->replace(points); + return maxSize; +} |