Skip to content

Commit 885e02d

Browse files
authored
Merge pull request #2 from MeshAndrey/AlarmWidget-Time-Count
Alarm widget time count
2 parents 7aa0730 + 0c6700a commit 885e02d

File tree

7 files changed

+101
-63
lines changed

7 files changed

+101
-63
lines changed

SimpleTimerApp.pro

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ CONFIG += c++11
99
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
1010

1111
SOURCES += \
12+
src/TimeUtils.cpp \
1213
src/main.cpp \
1314
src/MainWindow.cpp \
1415
src/widgets/AlarmWidget.cpp \
@@ -17,6 +18,7 @@ SOURCES += \
1718

1819
HEADERS += \
1920
src/MainWindow.h \
21+
src/TimeUtils.h \
2022
src/widgets/AlarmWidget.h \
2123
src/widgets/InputWidget.h \
2224
src/widgets/TimerWidget.h

src/TimeUtils.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#include "TimeUtils.h"
2+
3+
4+
int TimeUtils::round(const int value)
5+
{
6+
if (value == 0)
7+
return value; // zero
8+
if ((value >= 1000) && (value % 1000 == 0))
9+
return value; // already round
10+
11+
if (((value % 1000) > 500) && ((value % 1000) <= 999))
12+
{
13+
return (value - (value % 1000) + 1000);
14+
}
15+
else if (((value % 1000) >= 1) && ((value % 1000) <= 500))
16+
{
17+
return (value - (value % 1000));
18+
}
19+
20+
return value;
21+
}
22+
23+
QString TimeUtils::convertToReadable(const int value)
24+
{
25+
if (value < 0)
26+
return "Error value";
27+
28+
const int h = value / (1000 * 60 * 60); // hours
29+
const int m = (value - (h * 1000 * 60 * 60)) / (1000 * 60); // minutes
30+
const int s = (value - (h * 1000 * 60 * 60) - (m * 1000 * 60)) / 1000; // seconds
31+
32+
if (h > 0)
33+
return QString("%1:%2:%3").arg(makeTimeString(QString::number(h)),
34+
makeTimeString(QString::number(m)),
35+
makeTimeString(QString::number(s)));
36+
37+
if (m > 0)
38+
return QString("%1:%2").arg(makeTimeString(QString::number(m)),
39+
makeTimeString(QString::number(s)));
40+
41+
if (s > 0)
42+
return makeTimeString(QString::number(s));
43+
44+
return "00";
45+
}
46+
47+
QString TimeUtils::makeTimeString(QString time) // don't know how to name this shit
48+
{
49+
if (time.isEmpty())
50+
return time;
51+
52+
return time.length() == 2 ? time : time.prepend("0");
53+
}

src/TimeUtils.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#ifndef TIMEUTILS_H
2+
#define TIMEUTILS_H
3+
4+
#include <QString>
5+
6+
class TimeUtils
7+
{
8+
private:
9+
TimeUtils() {};
10+
11+
public:
12+
static int round(const int value);
13+
static QString convertToReadable(const int value);
14+
static QString makeTimeString(QString time);
15+
};
16+
17+
#endif // TIMEUTILS_H

src/widgets/AlarmWidget.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include "InputWidget.h"
33
#include "TimerWidget.h"
44
#include "../MainWindow.h"
5+
#include "../TimeUtils.h"
56

67
AlarmWidget::AlarmWidget(QString name, int timerValue, QWidget *parent) : QWidget(parent)
78
{
@@ -12,6 +13,11 @@ AlarmWidget::AlarmWidget(QString name, int timerValue, QWidget *parent) : QWidge
1213
initLayout();
1314
initConnections();
1415

16+
updateTimer.setInterval(1 * 1000);
17+
elapsedTimer.start();
18+
19+
updateTimer.start();
20+
1521
alarmSound = new QSound(":/sounds/mixkit-urgent-simple-tone-loop-2976.wav");
1622
alarmSound->setLoops(QSound::Infinite);
1723
alarmSound->play();
@@ -21,6 +27,7 @@ void AlarmWidget::initWidgets()
2127
{
2228
repeatButton = new QPushButton("Repeat");
2329
stopButton = new QPushButton("Stop");
30+
timeLabel = new QLabel;
2431
}
2532

2633
void AlarmWidget::initLayout()
@@ -33,6 +40,7 @@ void AlarmWidget::initLayout()
3340

3441
centralLayout->addWidget(new QLabel(name), 0, Qt::AlignCenter);
3542
centralLayout->addWidget(new QLabel("Time is expired"), 0, Qt::AlignCenter);
43+
centralLayout->addWidget(timeLabel, 0, Qt::AlignCenter);
3644
centralLayout->addLayout(buttonLayout);
3745

3846
QPalette pal = QPalette();
@@ -49,6 +57,8 @@ void AlarmWidget::initConnections()
4957
this, &AlarmWidget::stopButtonClicked);
5058
connect(repeatButton, &QPushButton::clicked,
5159
this, &AlarmWidget::repeatButtonClicked);
60+
connect(&updateTimer, &QTimer::timeout,
61+
this, &AlarmWidget::updateTimerTimeout);
5262
}
5363

5464
void AlarmWidget::stopButtonClicked()
@@ -69,3 +79,9 @@ void AlarmWidget::repeatButtonClicked()
6979
this->timerValue,
7080
static_cast<QWidget*>(this->parent())));
7181
}
82+
83+
void AlarmWidget::updateTimerTimeout()
84+
{
85+
timeLabel->setText(TimeUtils::convertToReadable(
86+
TimeUtils::round(elapsedTimer.elapsed())).prepend("-- "));
87+
}

src/widgets/AlarmWidget.h

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,27 @@ class AlarmWidget : public QWidget
1111
Q_OBJECT
1212
private:
1313
int timerValue = 0;
14+
1415
QString name;
15-
QPushButton *stopButton = nullptr,
16+
QPushButton *stopButton = nullptr,
1617
*repeatButton = nullptr;
18+
QLabel *timeLabel = nullptr;
1719
QSound *alarmSound = nullptr;
1820

21+
QElapsedTimer elapsedTimer;
22+
QTimer updateTimer;
23+
1924
void initWidgets();
2025
void initLayout();
2126
void initConnections();
27+
2228
public:
2329
explicit AlarmWidget(QString name, int timerValue, QWidget *parent = nullptr);
2430

2531
private slots:
2632
void stopButtonClicked();
2733
void repeatButtonClicked();
28-
signals:
29-
34+
void updateTimerTimeout();
3035
};
3136

3237
#endif // ALARMWIDGET_H

src/widgets/TimerWidget.cpp

Lines changed: 5 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include "AlarmWidget.h"
33
#include "InputWidget.h"
44
#include "../MainWindow.h"
5+
#include "../TimeUtils.h"
56

67
TimerWidget::TimerWidget(QString name, int timerValue, QWidget *parent) : QWidget(parent)
78
{
@@ -20,7 +21,8 @@ TimerWidget::TimerWidget(QString name, int timerValue, QWidget *parent) : QWidge
2021
timer->start();
2122
updateTimer->start();
2223

23-
remainingTimeLabel->setText(convertToReadable(round(timerValue)));
24+
remainingTimeLabel->setText(TimeUtils::convertToReadable(
25+
TimeUtils::round(timerValue)));
2426
}
2527

2628
void TimerWidget::initWidgets()
@@ -115,58 +117,8 @@ void TimerWidget::timerTimeout()
115117
void TimerWidget::updateTimerTimeout()
116118
{
117119
if (timer->isActive())
118-
remainingTimeLabel->setText(convertToReadable(round(timer->remainingTime())));
119-
}
120-
121-
int TimerWidget::round(const int value)
122-
{
123-
if (value == 0)
124-
return value; // zero
125-
if ((value >= 1000) && (value % 1000 == 0))
126-
return value; // already round
127-
128-
if (((value % 1000) > 500) && ((value % 1000) <= 999))
129-
{
130-
return (value - (value % 1000) + 1000);
131-
}
132-
else if (((value % 1000) >= 1) && ((value % 1000) <= 500))
133-
{
134-
return (value - (value % 1000));
135-
}
136-
137-
return value;
138-
}
139-
140-
QString TimerWidget::convertToReadable(const int value)
141-
{
142-
if (value < 0)
143-
return "Error value";
144-
145-
const int h = value / (1000 * 60 * 60); // hours
146-
const int m = (value - (h * 1000 * 60 * 60)) / (1000 * 60); // minutes
147-
const int s = (value - (h * 1000 * 60 * 60) - (m * 1000 * 60)) / 1000; // seconds
148-
149-
if (h > 0)
150-
return QString("%1:%2:%3").arg(makeTimeString(QString::number(h)),
151-
makeTimeString(QString::number(m)),
152-
makeTimeString(QString::number(s)));
153-
154-
if (m > 0)
155-
return QString("%1:%2").arg(makeTimeString(QString::number(m)),
156-
makeTimeString(QString::number(s)));
157-
158-
if (s > 0)
159-
return makeTimeString(QString::number(s));
160-
161-
return "00";
162-
}
163-
164-
QString TimerWidget::makeTimeString(QString time) // don't know how to name this shit
165-
{
166-
if (time.isEmpty())
167-
return time;
168-
169-
return time.length() == 2 ? time : time.prepend("0");
120+
remainingTimeLabel->setText(TimeUtils::convertToReadable(
121+
TimeUtils::round(timer->remainingTime())));
170122
}
171123

172124
void TimerWidget::showMessageBox(const QString message)

src/widgets/TimerWidget.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,6 @@ class TimerWidget : public QWidget
2323
void initConnections();
2424
void showMessageBox(const QString message);
2525

26-
int round(const int value);
27-
QString convertToReadable(const int value);
28-
QString makeTimeString(QString time);
29-
3026
private slots:
3127
void pauseResumeButtonCLicked();
3228
void stopButtonClicked();
@@ -35,9 +31,6 @@ private slots:
3531

3632
public:
3733
explicit TimerWidget(QString name, int timerValue, QWidget *parent = nullptr);
38-
39-
signals:
40-
4134
};
4235

4336
#endif // TIMERWIDGET_H

0 commit comments

Comments
 (0)