-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTimerWidget.cpp
More file actions
76 lines (61 loc) · 2.29 KB
/
Copy pathTimerWidget.cpp
File metadata and controls
76 lines (61 loc) · 2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include "TimerWidget.h"
#include "Wod.h"
#include <QPainter>
#include <QFont>
#include <QFontMetrics>
TimerWidget::TimerWidget(QWidget *parent)
: QWidget(parent), m_timer(nullptr)
{
m_wod = new WOD2103;
setFocusPolicy(Qt::StrongFocus);
}
void TimerWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.fillRect(rect(), Qt::green);
if (!m_timer)
return;
int total_secs_passed = m_time.secsTo(QTime::currentTime());
int mins_passed = total_secs_passed / 60;
int secs_passed = total_secs_passed % 60;
QString currentExercise = m_wod->getCurrentExercise(mins_passed, secs_passed);
QString nextExercise = m_wod->getNextExercise(mins_passed, secs_passed);
nextExercise = QString("Next: ") + nextExercise;
QString elapsed_time = QString("%1:%2").arg(mins_passed).arg(secs_passed, 2, 10, QChar('0'));
QFont currentExerciseFont("Times", 50, QFont::Bold);
painter.setFont(currentExerciseFont);
QFontMetrics currentFontMetrics(currentExerciseFont);
int currentExerciseWidth = currentFontMetrics.width(currentExercise);
int currentExerciseHeight = currentFontMetrics.height();
painter.drawText(rect().width()/2 - currentExerciseWidth/2, currentExerciseHeight + 10, currentExercise);
QFont nextExerciseFont("Times", 20);
QFontMetrics nextFontMetrics(nextExerciseFont);
painter.setFont(nextExerciseFont);
painter.drawText((2 * rect().width()) / 3, currentExerciseHeight + 50, nextExercise);
QFont timerFont("Times", 100, QFont::Bold);
QFontMetrics timeFontMetrics(timerFont);
int timeWidth = timeFontMetrics.width(elapsed_time);
int timeHeight = nextFontMetrics.height();
painter.setFont(timerFont);
painter.setPen(Qt::red);
painter.drawText(rect().width()/2 - timeWidth/2, rect().height()/2 + timeHeight/2, elapsed_time);
}
void TimerWidget::keyPressEvent(QKeyEvent *event)
{
if (event->key() == Qt::Key_Space){
if (m_timer){
m_timer->stop();
delete m_timer;
m_timer = nullptr;
}else{
m_timer = new QTimer(this);
connect(m_timer, &QTimer::timeout, this, &TimerWidget::timerUpdate);
m_time.start();
m_timer->start(1000);
}
}
}
void TimerWidget::timerUpdate()
{
update();
}