File indexing completed on 2024-06-23 05:45:41
0001 /* 0002 * Copyright 2020 Han Young <hanyoung@protonmail.com> 0003 * Copyright 2020-2021 Devin Lin <devin@kde.org> 0004 * 0005 * SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #pragma once 0009 0010 #include <QDateTime> 0011 #include <QObject> 0012 #include <QTimer> 0013 0014 class StopwatchTimer : public QObject 0015 { 0016 Q_OBJECT 0017 Q_PROPERTY(int elapsedTime READ elapsedTime NOTIFY timeChanged) 0018 Q_PROPERTY(QString hours READ hoursDisplay NOTIFY timeChanged) 0019 Q_PROPERTY(QString minutes READ minutesDisplay NOTIFY timeChanged) 0020 Q_PROPERTY(QString seconds READ secondsDisplay NOTIFY timeChanged) 0021 Q_PROPERTY(QString small READ smallDisplay NOTIFY timeChanged) 0022 0023 public: 0024 explicit StopwatchTimer(QObject *parent = nullptr); 0025 0026 long long hours() const; 0027 long long minutes() const; 0028 long long seconds() const; 0029 long long small() const; 0030 QString hoursDisplay() const; 0031 QString minutesDisplay() const; 0032 QString secondsDisplay() const; 0033 QString smallDisplay() const; 0034 0035 long long elapsedTime() const; 0036 0037 Q_INVOKABLE void reset(); 0038 Q_INVOKABLE void toggle(); 0039 0040 Q_SIGNALS: 0041 void timeChanged(); 0042 0043 private Q_SLOTS: 0044 void updateTime(); 0045 0046 private: 0047 static QString displayZeroOrAmount(const int &amount); 0048 0049 const int m_interval = 41; // 24fps 0050 0051 long long timerStartStamp = QDateTime::currentMSecsSinceEpoch(); 0052 long long pausedStamp = QDateTime::currentMSecsSinceEpoch(); 0053 long long pausedElapsed = 0; 0054 0055 bool stopped = true, paused = false; 0056 QTimer *m_timer; 0057 };