diff options
author | Arseniy-Movshev <dodoradio@outlook.com> | 2023-06-08 00:25:53 +0100 |
---|---|---|
committer | Arseniy-Movshev <dodoradio@outlook.com> | 2023-06-11 10:17:52 +0100 |
commit | 3e411195ff961a641ad94d9b5058d3ad981834b8 (patch) | |
tree | 510d27b0dd85b36852d0415304b590e8260a4c7e /qmlplugin | |
parent | 2a1363a223cd8a59f08609c18022d09bda5d66df (diff) |
Remove HeartrateGraph QML element
After making several attempts at integrating this element into asteroid-health, I'm still not happy with the heartrate graph code.
The issue is that this element doesn't seem to be usable 'as is', and needs some sort of wrapper around it to make it fit with the style of asteroid-health. Effectively this would split the code in half across the two codebases. I also didn't want to specialise this graph code too much for asteroid-health, as I still wanted it to be somewhat generic and reusable.
I've decided that I'm going to move this code to asteroid-health. This would allow that graph code to be much more integrated, and would mean that sensorlogd should become much more generic and much easier to use.:q
Diffstat (limited to 'qmlplugin')
-rw-r--r-- | qmlplugin/CMakeLists.txt | 2 | ||||
-rw-r--r-- | qmlplugin/hrGraph.cpp | 155 | ||||
-rw-r--r-- | qmlplugin/hrGraph.h | 91 | ||||
-rw-r--r-- | qmlplugin/sensorlogdqmlplugin.cpp | 13 |
4 files changed, 5 insertions, 256 deletions
diff --git a/qmlplugin/CMakeLists.txt b/qmlplugin/CMakeLists.txt index 62dbef5..2b36163 100644 --- a/qmlplugin/CMakeLists.txt +++ b/qmlplugin/CMakeLists.txt @@ -6,8 +6,6 @@ add_library( stepsDataLoader.h loggerSettings.cpp loggerSettings.h - hrGraph.cpp - hrGraph.h ) target_link_libraries(sensorlogdqmlplugin diff --git a/qmlplugin/hrGraph.cpp b/qmlplugin/hrGraph.cpp deleted file mode 100644 index 34a3224..0000000 --- a/qmlplugin/hrGraph.cpp +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright (C) 2023 Arseniy Movshev <dodoradio@outlook.com> - * 2017 Florent Revest <revestflo@gmail.com> - * All rights reserved. - * - * You may use this file under the terms of BSD license as follows: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the author nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "hrGraph.h" -#include "stepsDataLoader.h" - -#include <QPainter> -#include <QDate> -#include <QFile> -#include <QVector> -#include <QSettings> -#include <QStandardPaths> - -HrGraph::HrGraph() -{ - setFlag(ItemHasContents, true); - setAntialiasing(true); - setRenderTarget(QQuickPaintedItem::FramebufferObject); - loadGraphData(); -} - -void HrGraph::paint(QPainter *painter) -{ - if (!m_fileLoadStatus) { - return; - } - int j = m_filedata.count(); - QPointF points[j]; - if (!graphRelative) { - minHrValue = 0; - } - float valueDelta = maxHrValue - minHrValue; - float timeDelta = maxTime - minTime; - float calculatedValue = 0; - float calculatedTimeSeconds = 0; - for(int i = 0; i < j; i++) { - calculatedTimeSeconds = (m_filedata.at(i).time - minTime)/timeDelta; - calculatedValue = 1 - (m_filedata.at(i).value - minHrValue)/valueDelta; - points[i] = QPointF(m_lineWidth + calculatedTimeSeconds*(width()-2*m_lineWidth), m_lineWidth + calculatedValue*(height()-2*m_lineWidth)); //these +2 -1 are here to make sure that the graph fits within the drawn area, as it will be clipped by qt if it doesn't. - } - QPen pen; - pen.setCapStyle(Qt::RoundCap); - pen.setJoinStyle(Qt::RoundJoin); - pen.setWidthF(m_lineWidth); - pen.setColor(m_color); - painter->setRenderHints(QPainter::Antialiasing); - painter->setPen(pen); - painter->drawPolyline(points,j); -} - -void HrGraph::loadGraphData(QDate date) { - m_fileLoadStatus = false; - QFile file(fileNameForDate(date, "heartrateSensor")); - if (!file.open(QIODevice::ReadWrite | QIODevice::Text)) { - qDebug() << "failed to open file"; - return; - } - m_fileLoadStatus = true; - QTextStream inStream(&file); - QString line; - int i = 0; - int currTime; - int currValue; - m_filedata.clear(); - while(!inStream.atEnd()) - { - line = inStream.readLine(); - currTime = line.split(":")[0].toInt(); - currValue = line.split(":")[1].toInt(); - HrDatapoint datapoint; - datapoint.time = currTime; - datapoint.value = currValue; - m_filedata.append(datapoint); - if(i == 0) { - minTime = currTime; - maxHrValue = currValue; - minHrValue = currValue; - } - if(currValue > maxHrValue) { maxHrValue = currValue; } - if(currValue < minHrValue) { minHrValue = currValue; } - i++; - } - maxTime = currTime; - qDebug() << "heartrate graph file loading done"; - file.close(); -} - -void HrGraph::setLineColor(QColor color) { - m_color = color; - update(); -} - -QColor HrGraph::lineColor() { - return m_color; -} - -void HrGraph::setLineWidth(float width) { - m_lineWidth = width; - update(); -} - -float HrGraph::lineWidth() { - return m_lineWidth; -} - -int HrGraph::getMaxHrValue() { - return maxHrValue; -} - -int HrGraph::getMinHrValue() { - return minHrValue; -} - -QDateTime HrGraph::getMaxTime() { - return QDateTime::fromSecsSinceEpoch(maxTime); -} - -QDateTime HrGraph::getMinTime() { - return QDateTime::fromSecsSinceEpoch(minTime); -} - -bool HrGraph::relative() { - return graphRelative; -} - -void HrGraph::setRelative(bool newRelative) { - graphRelative = newRelative; -} diff --git a/qmlplugin/hrGraph.h b/qmlplugin/hrGraph.h deleted file mode 100644 index 5811689..0000000 --- a/qmlplugin/hrGraph.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2017 Florent Revest <revestflo@gmail.com> - * All rights reserved. - * - * You may use this file under the terms of BSD license as follows: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the author nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef HRGRAPH_H -#define HRGRAPH_H - -#include <QQuickPaintedItem> -#include <QPixmap> -#include <QDateTime> -#include <QVector> - -class HrGraph : public QQuickPaintedItem -{ - Q_OBJECT - - Q_PROPERTY(float lineWidth READ lineWidth WRITE setLineWidth) - Q_PROPERTY(QColor lineColor READ lineColor WRITE setLineColor NOTIFY lineColorChanged) - Q_PROPERTY(int maxValue READ getMaxHrValue NOTIFY loadingDone) - Q_PROPERTY(int minValue READ getMinHrValue NOTIFY loadingDone) - Q_PROPERTY(QDateTime maxTime READ getMaxTime NOTIFY loadingDone) - Q_PROPERTY(QDateTime minTime READ getMinTime NOTIFY loadingDone) - Q_PROPERTY(bool relativeMode READ relative WRITE setRelative) - - struct HrDatapoint { - qint64 time; - int value; - }; - -public: - HrGraph(); - void paint(QPainter *painter) override; - -signals: - void loadingDone(); - void lineColorChanged(); - -public slots: - float lineWidth(); - void setLineWidth(float width); - QColor lineColor(); - void setLineColor(QColor color); - int getMaxHrValue(); - int getMinHrValue(); - QDateTime getMaxTime(); - QDateTime getMinTime(); - bool relative(); - void setRelative(bool newRelative); - -private: - void updateBasePixmap(); - void loadGraphData(QDate date = QDate::currentDate()); - - float m_lineWidth = 0; - QColor m_color = QColor(255,255,255); - QPixmap m_pixmap; - QList<HrDatapoint> m_filedata; - bool m_fileLoadStatus; - int minHrValue = 0; - int maxHrValue = 0; - int minTime; - int maxTime; - bool graphRelative; -}; - -#endif // ICON_H diff --git a/qmlplugin/sensorlogdqmlplugin.cpp b/qmlplugin/sensorlogdqmlplugin.cpp index 94d4e01..2bdf9a6 100644 --- a/qmlplugin/sensorlogdqmlplugin.cpp +++ b/qmlplugin/sensorlogdqmlplugin.cpp @@ -8,22 +8,19 @@ * You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ - #include "sensorlogdqmlplugin.h" -#include <QtQml> -#include "stepsDataLoader.h" #include "loggerSettings.h" -#include "hrGraph.h" +#include "stepsDataLoader.h" +#include <QtQml> -LogdPlugin::LogdPlugin(QObject *parent) : QQmlExtensionPlugin(parent) +LogdPlugin::LogdPlugin(QObject* parent) + : QQmlExtensionPlugin(parent) { } -void LogdPlugin::registerTypes(const char *uri) +void LogdPlugin::registerTypes(const char* uri) { Q_ASSERT(uri == QLatin1String("org.asteroid.sensorlogd")); qmlRegisterType<StepsDataLoader>(uri, 1, 0, "StepsDataLoader"); qmlRegisterType<LoggerSettings>(uri, 1, 0, "LoggerSettings"); - qmlRegisterType<HrGraph>(uri, 1, 0, "HeartrateGraph"); } - |