X-Git-Url: https://www.flypig.org.uk/git/?p=harbour-pedalo.git;a=blobdiff_plain;f=qml%2Fpages%2FStats.qml;h=8e13f97fe8d40486b37efe36ecec6300fbbad44e;hp=f6e319c60c9dd0cbe32be7243443cee3fd9128c6;hb=dc14479d561196e19417c4ecf78e847ec4b43b7c;hpb=0108947ead4cc9e0ff23fee82db2fb1fd7cb2dad diff --git a/qml/pages/Stats.qml b/qml/pages/Stats.qml index f6e319c..8e13f97 100644 --- a/qml/pages/Stats.qml +++ b/qml/pages/Stats.qml @@ -1,5 +1,6 @@ import QtQuick 2.0 import Sailfish.Silica 1.0 +import harbour.pedalo.graph 1.0 import "../components" Page { @@ -11,58 +12,159 @@ Page { SilicaFlickable { id: statsView anchors.fill: parent - contentHeight: statsColumn.implicitHeight + contentHeight: statsColumn.implicitHeight + headerItem.height VerticalScrollDecorator {} + PageHeader { + id: headerItem + title: qsTr("Stats") + } + Column { id: statsColumn spacing: Theme.paddingLarge - width: parent.width - - PageHeader { - title: qsTr("Stats") - } + width: isPortrait ? parent.width : parent.width * 0.5 + y: headerItem.height InfoRow { label: qsTr("Journeys:") - value: "0" + value: currentStatus.getJourneyCount() midlineRatio: 0.7 midlineMin: Theme.fontSizeSmall * 10 - midlineMax: Theme.fontSizeSmall * 15 + midlineMax: Theme.fontSizeSmall * 20 pixelSize: Theme.fontSizeMedium labelTextBold: true + horizontalAlignment: Text.AlignRight } InfoRow { label: qsTr("Time spent cycling:") - value: "0" - midlineRatio: 0.7 + value: currentStatus.getFormattedTime(currentStatus.getTimeSpentCycling(), 0, 5) + midlineRatio: 0.5 midlineMin: Theme.fontSizeSmall * 10 - midlineMax: Theme.fontSizeSmall * 15 + midlineMax: Theme.fontSizeSmall * 20 pixelSize: Theme.fontSizeMedium labelTextBold: true + horizontalAlignment: Text.AlignRight } InfoRow { label: qsTr("Average journey duration:") - value: "0" - midlineRatio: 0.7 + value: currentStatus.getFormattedTime(currentStatus.getAverageDuration(), 1, 5) + midlineRatio: 0.6 midlineMin: Theme.fontSizeSmall * 10 - midlineMax: Theme.fontSizeSmall * 15 + midlineMax: Theme.fontSizeSmall * 20 pixelSize: Theme.fontSizeMedium labelTextBold: true + horizontalAlignment: Text.AlignRight } InfoRow { label: qsTr("Speed percentile:") - value: "0%" + value: Math.round(100.0 - currentStatus.getSpeedPercentile() * 100) + "%" midlineRatio: 0.7 midlineMin: Theme.fontSizeSmall * 10 - midlineMax: Theme.fontSizeSmall * 15 + midlineMax: Theme.fontSizeSmall * 20 pixelSize: Theme.fontSizeMedium labelTextBold: true + horizontalAlignment: Text.AlignRight + } + } + + SlideshowView { + id: graphsView + width: isPortrait ? parent.width : parent.width * 0.5 + height: (isPortrait ? statsPage.height / 2.0 : statsPage.height) - Theme.paddingLarge + itemWidth: width + clip: true + anchors.left: isPortrait ? statsColumn.left : statsColumn.right + anchors.leftMargin: 0 + + y: (isPortrait ? (statsPage.height / 2.0) : statsColumn.y) + + onModelChanged: { + console.log("Model changed"); + model.updateAll(); + } + + model: statsmodel + delegate: Rectangle { + width: graphsView.itemWidth + height: graphsView.height + color: "transparent" + + SectionHeader { + id: sectionHeaderItem + text: title + } + + Graph { + id: graph + width: parent.width - Theme.horizontalPageMargin + anchors.top: sectionHeaderItem.bottom + height: (isPortrait ? (statsPage.height / 2.0) - Theme.paddingLarge : statsPage.height - Theme.paddingLarge - headerItem.height) - sectionHeaderItem.height + anchors.left: parent.left + model: values + labelsx: labels + //labelsy: ["0%", "10%", "20%", "30%", "40%", "50%", "60%", "70%", "80%", "90%", "100%"] + unitsy: units + primary: Theme.primaryColor + secondary: Theme.highlightColor + highlight: Theme.highlightColor + miny: minval + maxy: maxval + stepy: step + gap: 0.1 + fontsize: Theme.fontSizeExtraSmall + /* + PropertyAnimation on animate { + id: animx + duration: 2000 + easing.type: Easing.InOutExpo + from: 0.0 + to: 1.0 + } + */ + } + + } + } + + /* + Column { + id: graphsColumn + spacing: Theme.paddingLarge + width: isPortrait ? parent.width : parent.width * 0.5 + y: (isPortrait ? (statsPage.height / 2.0) : statsColumn.y) + anchors.left: isPortrait ? statsColumn.left : statsColumn.right + anchors.leftMargin: Theme.horizontalPageMargin + + + Graph { + id: graph + width: parent.width - 2 * Theme.horizontalPageMargin + height: isPortrait ? (statsPage.height / 2.0) - Theme.paddingLarge : statsPage.height - Theme.paddingLarge - headerItem.height + model: currentStatus.getGraphData() + labelsx: ["M", "T", "W", "Th", "F", "S", "Su", "A", "B", "C"] + //labelsy: ["0%", "10%", "20%", "30%", "40%", "50%", "60%", "70%", "80%", "90%", "100%"] + unitsy: "%" + primary: Theme.primaryColor + secondary: Theme.highlightColor + highlight: Theme.highlightColor + miny: 0.0 + maxy: 1.0 + stepy: 0.1 + gap: 0.1 + fontsize: Theme.fontSizeExtraSmall + PropertyAnimation on animate { + duration: 2000 + easing.type: Easing.InOutExpo + from: 0.0 + to: 1.0 + } } } + */ } }