From 19d485261dbb9f990935b4e677692207cf6422d3 Mon Sep 17 00:00:00 2001 From: Arseniy Movshev Date: Sun, 2 Jul 2023 14:23:53 +0100 Subject: Rename hrgraph to linegraph because it's not actually heartrate specific --- src/CMakeLists.txt | 2 +- src/cpp/hrGraph.cpp | 139 ------------------------------------------------- src/cpp/hrGraph.h | 87 ------------------------------- src/cpp/lineGraph.cpp | 139 +++++++++++++++++++++++++++++++++++++++++++++++++ src/cpp/lineGraph.h | 87 +++++++++++++++++++++++++++++++ src/graphs/HrGraph.qml | 2 +- src/main.cpp | 4 +- 7 files changed, 230 insertions(+), 230 deletions(-) delete mode 100644 src/cpp/hrGraph.cpp delete mode 100644 src/cpp/hrGraph.h create mode 100644 src/cpp/lineGraph.cpp create mode 100644 src/cpp/lineGraph.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 881c3ba..44c8ba1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,4 @@ -add_library(asteroid-health main.cpp cpp/hrGraph.cpp cpp/hrGraph.h resources.qrc) +add_library(asteroid-health main.cpp cpp/lineGraph.cpp cpp/lineGraph.h resources.qrc) set_target_properties(asteroid-health PROPERTIES PREFIX "") target_link_libraries(asteroid-health PUBLIC diff --git a/src/cpp/hrGraph.cpp b/src/cpp/hrGraph.cpp deleted file mode 100644 index ccec424..0000000 --- a/src/cpp/hrGraph.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright (C) 2023 Arseniy Movshev - * 2017 Florent Revest - * 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 -#include -#include -#include -#include -#include -#include - -HrGraph::HrGraph() -{ - setFlag(ItemHasContents, true); - setAntialiasing(true); - setRenderTarget(QQuickPaintedItem::FramebufferObject); -} - -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[i].x() - minTime)/timeDelta; - calculatedValue = 1 - (m_filedata[i].y() - 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(QVariant fileDataInput) { - qDebug() << "loadGraphData called"; - QList fileDataAsList = fileDataInput.toList(); - if (fileDataAsList.count() < 1) { - qDebug() << "no heartrate data to show, failing load"; - return; - } - int j = fileDataAsList.count(); - minTime = fileDataAsList[0].toPoint().x(); - maxTime = fileDataAsList[j-1].toPoint().x(); - minHrValue = fileDataAsList[0].toPoint().y(); - maxHrValue = minHrValue; - m_filedata.clear(); - for(int i = 0; i < j; i++) { - m_filedata.append(fileDataAsList[i].toPoint()); - if (minHrValue > m_filedata[i].y()) minHrValue = m_filedata[i].y(); - if (maxHrValue < m_filedata[i].y()) maxHrValue = m_filedata[i].y(); - } - emit loadingDone(); - update(); -} - -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/src/cpp/hrGraph.h b/src/cpp/hrGraph.h deleted file mode 100644 index 63d2f17..0000000 --- a/src/cpp/hrGraph.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (C) 2017 Florent Revest - * 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 -#include -#include -#include -#include - -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) - -public: - Q_INVOKABLE void loadGraphData(QVariant fileDataInput); - 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(); - - float m_lineWidth = 0; - QColor m_color = QColor(255,255,255); - QPixmap m_pixmap; - QList m_filedata; - bool m_fileLoadStatus; - int minHrValue = 0; - int maxHrValue = 0; - int minTime; - int maxTime; - bool graphRelative; -}; - -#endif // ICON_H diff --git a/src/cpp/lineGraph.cpp b/src/cpp/lineGraph.cpp new file mode 100644 index 0000000..be6fd86 --- /dev/null +++ b/src/cpp/lineGraph.cpp @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2023 Arseniy Movshev + * 2017 Florent Revest + * 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 "lineGraph.h" + +#include +#include +#include +#include +#include +#include +#include + +LineGraph::LineGraph() +{ + setFlag(ItemHasContents, true); + setAntialiasing(true); + setRenderTarget(QQuickPaintedItem::FramebufferObject); +} + +void LineGraph::paint(QPainter *painter) +{ + if (!m_fileLoadStatus) { + return; + } + int j = m_filedata.count(); + QPointF points[j]; + if (!graphRelative) { + minValue = 0; + } + float valueDelta = maxValue - minValue; + float timeDelta = maxTime - minTime; + float calculatedValue = 0; + float calculatedTimeSeconds = 0; + for(int i = 0; i < j; i++) { + calculatedTimeSeconds = (m_filedata[i].x() - minTime)/timeDelta; + calculatedValue = 1 - (m_filedata[i].y() - minValue)/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 LineGraph::loadGraphData(QVariant fileDataInput) { + qDebug() << "loadGraphData called"; + QList fileDataAsList = fileDataInput.toList(); + if (fileDataAsList.count() < 1) { + qDebug() << "no heartrate data to show, failing load"; + return; + } + int j = fileDataAsList.count(); + minTime = fileDataAsList[0].toPoint().x(); + maxTime = fileDataAsList[j-1].toPoint().x(); + minValue = fileDataAsList[0].toPoint().y(); + maxValue = minValue; + m_filedata.clear(); + for(int i = 0; i < j; i++) { + m_filedata.append(fileDataAsList[i].toPoint()); + if (minValue > m_filedata[i].y()) minValue = m_filedata[i].y(); + if (maxValue < m_filedata[i].y()) maxValue = m_filedata[i].y(); + } + emit loadingDone(); + update(); +} + +void LineGraph::setLineColor(QColor color) { + m_color = color; + update(); +} + +QColor LineGraph::lineColor() { + return m_color; +} + +void LineGraph::setLineWidth(float width) { + m_lineWidth = width; + update(); +} + +float LineGraph::lineWidth() { + return m_lineWidth; +} + +int LineGraph::getMaxValue() { + return maxValue; +} + +int LineGraph::getMinValue() { + return minValue; +} + +QDateTime LineGraph::getMaxTime() { + return QDateTime::fromSecsSinceEpoch(maxTime); +} + +QDateTime LineGraph::getMinTime() { + return QDateTime::fromSecsSinceEpoch(minTime); +} + +bool LineGraph::relative() { + return graphRelative; +} + +void LineGraph::setRelative(bool newRelative) { + graphRelative = newRelative; +} diff --git a/src/cpp/lineGraph.h b/src/cpp/lineGraph.h new file mode 100644 index 0000000..59cbb68 --- /dev/null +++ b/src/cpp/lineGraph.h @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2017 Florent Revest + * 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 LINEGRAPH_H +#define LINEGRAPH_H + +#include +#include +#include +#include +#include + +class LineGraph : 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 getMaxValue NOTIFY loadingDone) + Q_PROPERTY(int minValue READ getMinValue 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) + +public: + Q_INVOKABLE void loadGraphData(QVariant fileDataInput); + LineGraph(); + 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 getMaxValue(); + int getMinValue(); + QDateTime getMaxTime(); + QDateTime getMinTime(); + bool relative(); + void setRelative(bool newRelative); + +private: + void updateBasePixmap(); + + float m_lineWidth = 0; + QColor m_color = QColor(255,255,255); + QPixmap m_pixmap; + QList m_filedata; + bool m_fileLoadStatus; + int minValue = 0; + int maxValue = 0; + int minTime; + int maxTime; + bool graphRelative; +}; + +#endif // LINEGRAPH_H diff --git a/src/graphs/HrGraph.qml b/src/graphs/HrGraph.qml index 84a408e..ac5113e 100644 --- a/src/graphs/HrGraph.qml +++ b/src/graphs/HrGraph.qml @@ -81,7 +81,7 @@ Item { } } } - HeartrateGraph { + LineGraph { id: hrGraph anchors { left: markerParent.right diff --git a/src/main.cpp b/src/main.cpp index 48fa468..57f1353 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -18,10 +18,10 @@ #include #include -#include "cpp/hrGraph.h" +#include "cpp/lineGraph.h" int main(int argc, char *argv[]) { - qmlRegisterType("org.asteroid.health", 1, 0, "HeartrateGraph"); + qmlRegisterType("org.asteroid.health", 1, 0, "LineGraph"); return AsteroidApp::main(argc, argv); } -- cgit v1.2.3-54-g00ecf