-
Notifications
You must be signed in to change notification settings - Fork 0
/
reactiontime.cpp
118 lines (101 loc) · 3.67 KB
/
reactiontime.cpp
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/* Copyright (c) 2013 Rich Mattes
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "reactiontime.h"
#include "ui_reactiontime.h"
#include <QDebug>
#include <QKeyEvent>
ReactionTime::ReactionTime(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::ReactionTime)
{
ui->setupUi(this);
// Seed the random number generator
QTime midnight(0, 0, 0);
srand(midnight.secsTo(QTime::currentTime()));
connect(ui->startButton, SIGNAL(clicked()), this, SLOT(startButtonHandler()));
connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(updateUI()));
m_normalPalette = ui->millisecondTime->palette();
m_donePalette = ui->millisecondTime->palette();
m_donePalette.setColor(QPalette::Text, QColor(0, 255, 0));
m_donePalette.setColor(QPalette::WindowText, QColor(0, 255, 0));
m_running = false;
m_paused = false;
m_totalTrials = 10;
m_updateTimer.start(30);
}
ReactionTime::~ReactionTime()
{
delete ui;
}
void ReactionTime::startButtonHandler()
{
ui->startButton->setEnabled(false);
ui->millisecondTime->setPalette(m_normalPalette);
ui->millisecondTime->display(0);
m_trialCount = 0;
m_totalTime = 0;
m_running = true;
m_paused = true;
m_time.start();
m_restartTime = QTime::currentTime().addMSecs(getDelayTime() * 1000.0);
}
void ReactionTime::keyPressEvent(QKeyEvent *event)
{
int finalTime;
if (m_running && !m_paused) {
if (event->key() == Qt::Key_Space) {
finalTime = m_time.elapsed();
ui->millisecondTime->display(finalTime);
++m_trialCount;
m_totalTime += finalTime;
if (m_trialCount >= m_totalTrials) {
m_running = false;
ui->startButton->setEnabled(true);
qDebug() << QString("Average time: %1").arg(m_totalTime / m_trialCount);
ui->millisecondTime->display(m_totalTime / m_trialCount);
ui->millisecondTime->setPalette(m_donePalette);
} else {
m_paused = true;
m_restartTime = QTime::currentTime().addMSecs(getDelayTime()*1000.0);
}
}
}
}
void ReactionTime::updateUI()
{
if (m_running) {
if (m_paused) {
if (QTime::currentTime().msecsTo(m_restartTime) <= 0) {
m_paused = false;
m_time.restart();
}
} else {
ui->millisecondTime->display(m_time.elapsed());
}
}
}
double ReactionTime::getDelayTime()
{
double randomNumber = ((double)rand() / static_cast<double>( RAND_MAX ) * 6.0) + 2.0;
qDebug() << QString("Random Number: %1").arg(randomNumber);
return randomNumber;
}