summaryrefslogtreecommitdiffstats
path: root/examples/audiolevels/audiolevelsiodevice.cpp
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2013-09-04 10:51:33 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2013-09-04 11:30:37 +0300
commit4e2ee15086da3cb1e2d16caac7928b80e2bcdb26 (patch)
tree9c45d7bd0bcc90ba704d54f7d582b7e44efe4d34 /examples/audiolevels/audiolevelsiodevice.cpp
parent3aa0c8d52af26ba8752450c08865bf674814bcb2 (diff)
Made audiolevels example show something sensible
+ Fixed zoom level setting via API Task-number: QTRD-2244 Change-Id: Iab8d877361c480ba4010a79e93af8a0121239b5d Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'examples/audiolevels/audiolevelsiodevice.cpp')
-rw-r--r--examples/audiolevels/audiolevelsiodevice.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/examples/audiolevels/audiolevelsiodevice.cpp b/examples/audiolevels/audiolevelsiodevice.cpp
new file mode 100644
index 00000000..46e5aadb
--- /dev/null
+++ b/examples/audiolevels/audiolevelsiodevice.cpp
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 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 QtDataVis3D module.
+**
+** 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
+**
+****************************************************************************/
+
+#include "audiolevelsiodevice.h"
+#include <QDebug>
+
+QT_DATAVIS3D_USE_NAMESPACE
+
+AudioLevelsIODevice::AudioLevelsIODevice(QBarDataProxy *proxy, QObject *parent)
+ : QIODevice(parent),
+ m_proxy(proxy)
+{
+}
+
+// Implementation required for this pure virtual function
+qint64 AudioLevelsIODevice::readData(char *data, qint64 maxSize)
+{
+ Q_UNUSED(data)
+ Q_UNUSED(maxSize)
+ return -1;
+}
+
+qint64 AudioLevelsIODevice::writeData(const char *data, qint64 maxSize)
+{
+ static const int resolution = 8;
+ static const int maxRowSize = 1000;
+
+ int newDataSize = maxSize / resolution;
+
+ const QBarDataRow *oldRow = m_proxy->rowAt(0);
+
+ int rowSize = qMin((newDataSize + oldRow->size()), maxRowSize);
+
+ QBarDataRow *row = new QBarDataRow(rowSize);
+
+ // Insert data in reverse order, so that newest data is always at the front of the row
+ for (int i = newDataSize - 1; i >= 0; i--)
+ (*row)[i].setValue(((quint8)data[resolution * i] - 128) / 2.0);
+
+ // Append old data to new row
+ for (int i = newDataSize; i < rowSize; i++)
+ (*row)[i].setValue(oldRow->at(i - newDataSize).value());
+
+ m_proxy->setRow(0, row);
+
+ return maxSize;
+}
+
+