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  * Copyright 2021 Boris Petrov <boris.v.petrov@protonmail.com>
0005  *
0006  * SPDX-License-Identifier: GPL-2.0-or-later
0007  */
0008 
0009 #pragma once
0010 
0011 #include "timerinterface.h"
0012 
0013 #include <QObject>
0014 #include <QTimer>
0015 #include <QUuid>
0016 
0017 class Timer : public QObject
0018 {
0019     Q_OBJECT
0020     Q_PROPERTY(int length READ length WRITE setLength NOTIFY lengthChanged)
0021     Q_PROPERTY(QString lengthPretty READ lengthPretty NOTIFY lengthChanged)
0022     Q_PROPERTY(int elapsed READ elapsed NOTIFY elapsedChanged)
0023     Q_PROPERTY(QString elapsedPretty READ elapsedPretty NOTIFY elapsedChanged)
0024     Q_PROPERTY(QString label READ label WRITE setLabel NOTIFY labelChanged)
0025     Q_PROPERTY(QString commandTimeout READ commandTimeout WRITE setCommandTimeout NOTIFY commandTimeoutChanged)
0026     Q_PROPERTY(bool running READ running NOTIFY runningChanged)
0027     Q_PROPERTY(bool looping READ looping NOTIFY loopingChanged)
0028     Q_PROPERTY(bool ringing READ ringing NOTIFY ringingChanged)
0029 
0030 public:
0031     explicit Timer(const QString &uuid = QString{}, QObject *parent = nullptr);
0032 
0033     const QUuid &uuid();
0034 
0035     int length() const;
0036     QString lengthPretty() const;
0037     void setLength(int length);
0038 
0039     int elapsed() const;
0040     QString elapsedPretty() const;
0041 
0042     QString label() const;
0043     void setLabel(const QString &label);
0044 
0045     QString commandTimeout() const;
0046     void setCommandTimeout(const QString &commandTimeout);
0047 
0048     bool running() const;
0049 
0050     bool looping() const;
0051 
0052     bool ringing() const;
0053 
0054     Q_INVOKABLE void toggleRunning();
0055     Q_INVOKABLE void toggleLooping();
0056     Q_INVOKABLE void reset();
0057     Q_INVOKABLE void addMinute();
0058     Q_INVOKABLE void dismiss();
0059 
0060 Q_SIGNALS:
0061     void lengthChanged();
0062     void elapsedChanged();
0063     void labelChanged();
0064     void commandTimeoutChanged();
0065     void runningChanged();
0066     void loopingChanged();
0067     void ringingChanged();
0068 
0069 private Q_SLOTS:
0070     void updateLength();
0071     void updateElapsed();
0072     void updateLabel();
0073     void updateCommandTimeout();
0074     void updateRunning();
0075     void updateLooping();
0076     void updateRinging();
0077 
0078 private:
0079     void animation(bool start);
0080 
0081     int m_length;
0082     int m_elapsed;
0083 
0084     QString m_label;
0085     QString m_commandTimeout;
0086 
0087     bool m_running;
0088     bool m_looping;
0089     bool m_ringing;
0090 
0091     QUuid m_uuid;
0092 
0093     org::kde::kclock::Timer *m_interface;
0094 
0095     QTimer *m_animationTimer;
0096 };