C

Qt Quick Ultralite Watch Demo

// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial

#include "HealthModel.h"

#include <platform/platform.h>
#include <algorithm>

namespace {
const int MIN_HEART_RATE = 50;
const int MAX_HEART_RATE = 160;
const int MIN_HEART_RATE_CHANGE = -2;
const int MAX_HEART_RATE_CHANGE = 2;
const int DEFAULT_HEART_RATE = 60;

int GetRandomNumber(int from, int to)
{
    return static_cast<int>(round(from + Qul::Platform::getPlatformInstance()->rand() * (to - from)));
}
} // namespace

HealthModel::HealthModel()
    : HeartRate(DEFAULT_HEART_RATE)
    , MinHeartRate(DEFAULT_HEART_RATE)
    , MaxHeartRate(DEFAULT_HEART_RATE)
{
    update();
}

void HealthModel::update()
{
    const int delta = GetRandomNumber(MIN_HEART_RATE_CHANGE, MAX_HEART_RATE_CHANGE);
    int heartRate = HeartRate.value();

    heartRate += delta;
    heartRate = std::max(heartRate, MIN_HEART_RATE);
    heartRate = std::min(heartRate, MAX_HEART_RATE);

    HeartRate.setValue(heartRate);

    if (heartRate > MaxHeartRate.value()) {
        MaxHeartRate.setValue(heartRate);
    }

    if (heartRate < MinHeartRate.value()) {
        MinHeartRate.setValue(heartRate);
    }
}