// Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause import QtQuick import QtQuick.Controls as QQC2 import QtQuick.Shapes import Wearable import WearableStyle import "fitness.js" as FitnessData Item { component AngularProgressBar : Shape { id: apb preferredRendererType: Shape.CurveRenderer property real value: 0.5 property int rad: 75 ShapePath { id: bgR strokeColor: UIStyle.buttonBackground strokeWidth: 8 capStyle: ShapePath.RoundCap fillColor: "#00000000" property real sA: (90 + 45) / 180 * Math.PI property real eA: (360 + 45) / 180 * Math.PI property real mA: (sA + eA) / 2 startX: apb.rad * Math.cos(bgR.sA) startY: apb.rad * Math.sin(bgR.sA) PathArc { x: apb.rad * Math.cos(bgR.mA) y: apb.rad * Math.sin(bgR.mA) radiusX: apb.rad radiusY: apb.rad } PathArc { x: apb.rad * Math.cos(bgR.eA) y: apb.rad * Math.sin(bgR.eA) radiusX: apb.rad radiusY: apb.rad } } ShapePath { id: fgR strokeColor: UIStyle.buttonProgress strokeWidth: 8 capStyle: ShapePath.RoundCap fillColor: "#00000000" property real sA: bgR.sA property real eA: sA + (bgR.eA - sA) * apb.value property real mA: (sA + eA) / 2 startX: apb.rad * Math.cos(fgR.sA) startY: apb.rad * Math.sin(fgR.sA) PathArc { x: apb.rad * Math.cos(fgR.mA) y: apb.rad * Math.sin(fgR.mA) radiusX: apb.rad radiusY: apb.rad } PathArc { x: apb.rad * Math.cos(fgR.eA) y: apb.rad * Math.sin(fgR.eA) radiusX: apb.rad radiusY: apb.rad } } } QQC2.SwipeView { id: svFitnessContainer anchors.fill: parent SwipeViewPage { id: fitnessPage1 Image { id: walkingDude anchors.centerIn: parent source: UIStyle.themeImagePath("fitness-man-walking") } AngularProgressBar { anchors.horizontalCenter: walkingDude.horizontalCenter anchors.bottom: walkingDude.bottom anchors.horizontalCenterOffset: 40 value: FitnessData.getWalkingSteps() / FitnessData.getWalkingGoal() } Column { anchors.top: walkingDude.bottom anchors.topMargin: 15 anchors.horizontalCenter: parent.horizontalCenter spacing: -7 Item { width: childrenRect.width height: childrenRect.height Text { id: steps text: FitnessData.getWalkingSteps() font: UIStyle.h2 color: UIStyle.textColor } Text { anchors.bottom: steps.bottom anchors.left: steps.right anchors.leftMargin: 5 text: qsTr("steps") font: UIStyle.p2 color: UIStyle.textColor } } Item { width: childrenRect.width height: childrenRect.height Text { id: time text: FitnessData.getWalkingTime() font: UIStyle.h2 color: UIStyle.textColor } Text { anchors.bottom: time.bottom anchors.left: time.right anchors.leftMargin: 5 text: qsTr("min") font: UIStyle.p2 color: UIStyle.textColor } } Item { width: childrenRect.width height: childrenRect.height Text { id: cal text: FitnessData.getWalkingCalories() font: UIStyle.h2 color: UIStyle.textColor } Text { anchors.bottom: cal.bottom anchors.left: cal.right anchors.leftMargin: 5 text: qsTr("cal") font: UIStyle.p2 color: UIStyle.textColor } } } } SwipeViewPage { id: fitnessPage2 Image { id: runningDude anchors.centerIn: parent source: UIStyle.themeImagePath("fitness-man-running") } AngularProgressBar { anchors.horizontalCenter: runningDude.horizontalCenter anchors.bottom: runningDude.bottom anchors.horizontalCenterOffset: 40 value: FitnessData.getRunningDistance() / FitnessData.getRunningGoal() } Row { anchors.top: runningDude.bottom anchors.horizontalCenter: runningDude.horizontalCenter anchors.topMargin: 15 spacing: 10 Item { width: childrenRect.width height: childrenRect.height Text { id: goal text: qsTr("Goal") font: UIStyle.p2 color: UIStyle.textColor } Text { anchors.bottom: goal.bottom anchors.left: goal.right anchors.leftMargin: 5 text: FitnessData.getRunningGoal() + " km" font: UIStyle.h2 color: UIStyle.textColor } } Rectangle { width: 1 height: 75 color: UIStyle.textColor } Column { spacing: -7 Item { width: childrenRect.width height: childrenRect.height Text { id: distance text: qsTr("Distance") font: UIStyle.p2 color: UIStyle.textColor } Text { anchors.bottom: distance.bottom anchors.left: distance.right anchors.leftMargin: 5 text: FitnessData.getRunningDistance() + " km" font: UIStyle.h2 color: UIStyle.textColor } } Item { width: childrenRect.width height: childrenRect.height Text { id: runningtime text: FitnessData.getRunningTime() font: UIStyle.h2 color: UIStyle.textColor } Text { anchors.bottom: runningtime.bottom anchors.left: runningtime.right anchors.leftMargin: 5 text: "min" font: UIStyle.p2 color: UIStyle.textColor } } Item { width: childrenRect.width height: childrenRect.height Text { id: runningcal text: FitnessData.getRunningCalories() font: UIStyle.h2 color: UIStyle.textColor } Text { anchors.bottom: runningcal.bottom anchors.left: runningcal.right anchors.leftMargin: 5 text: qsTr("calories") font: UIStyle.p2 color: UIStyle.textColor } } } } } } QQC2.PageIndicator { count: svFitnessContainer.count currentIndex: svFitnessContainer.currentIndex anchors.bottom: svFitnessContainer.bottom anchors.horizontalCenter: parent.horizontalCenter } }