Skip to content

Commit c84fbc6

Browse files
committed
solution to 9.9.1.1
1 parent 3ed4951 commit c84fbc6

File tree

8 files changed

+57578
-0
lines changed

8 files changed

+57578
-0
lines changed

SOLUTIONS/Exercise 9.9.1.1/modified-speed-reader/canadian-english-small

Lines changed: 56835 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#include <QApplication>
2+
#include "mainwindow.h"
3+
4+
int main(int argc, char* argv[]) {
5+
QApplication app(argc, argv);
6+
MainWindow mw;
7+
mw.show();
8+
return app.exec();
9+
}
10+
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
#include <QTimer>
2+
#include "mainwindow.h"
3+
#include "ui_mainwindow.h"
4+
5+
6+
MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent),
7+
ui(new Ui::MainWindow), m_expInterval(0), m_durationInterval(0),
8+
m_trials(0), m_correctChars(0), m_totTrials(0),
9+
m_totCorrectChars(0) {
10+
11+
m_randStr = new RandomString(3, "canadian-english-small");
12+
totalLenTarget = 0;
13+
14+
//initialize ui
15+
ui->setupUi(this);
16+
ui->displayLabel->hide();
17+
ui->responseLabel->hide();
18+
ui->nextButton->hide();
19+
m_randStr->setStringLength(5);
20+
}
21+
22+
MainWindow::~MainWindow() {
23+
delete m_randStr;
24+
delete ui;
25+
}
26+
27+
void MainWindow::changeEvent(QEvent* e) {
28+
QMainWindow::changeEvent(e);
29+
switch (e->type()) {
30+
case QEvent::LanguageChange:
31+
ui->retranslateUi(this);
32+
break;
33+
default:
34+
break;
35+
}
36+
}
37+
38+
void MainWindow::on_exposureSlider_valueChanged(int value) {
39+
ui->exposureLCD->display(value);
40+
}
41+
42+
void MainWindow::on_lengthSlider_valueChanged(int value) {
43+
ui->lengthLCD->display(value);
44+
}
45+
46+
void MainWindow::on_startButton_clicked() {
47+
//hide start button
48+
ui->startButton->hide();
49+
50+
//show game panel
51+
ui->displayLabel->show();
52+
ui->targetString->show();
53+
ui->responseLabel->show();
54+
ui->responseString->show();
55+
ui->nextButton->show();
56+
57+
//disable settings
58+
ui->groupBox->setEnabled(false);
59+
60+
m_trials = 0;
61+
lenTarget = 0;
62+
63+
//initialize the score system
64+
m_correctChars = 0;
65+
66+
// start trials
67+
processTrial();
68+
}
69+
70+
//start
71+
void MainWindow::processTrial() {
72+
// get user defined values
73+
m_expInterval = ui->exposureSlider->value();
74+
m_durationInterval = ui->durationSlider->value();
75+
m_randStr->setStringLength(ui->lengthSlider->value());
76+
77+
//clear response text editor
78+
ui->responseString->setText("");
79+
//display the random string
80+
QString string = m_randStr->generateString();
81+
ui->targetString->setText(string);
82+
lenTarget += string.count();
83+
totalLenTarget += string.count();
84+
ui->responseString->setEnabled(false);
85+
ui->nextButton->setEnabled(false);
86+
//count the number of trials
87+
m_trials++;
88+
m_totTrials++;
89+
ui->nextButton->setText(QString("String %1").arg(m_trials));
90+
//begin exposure
91+
QTimer::singleShot(m_expInterval, this, SLOT(timerDisplayRandStr()));
92+
}
93+
94+
95+
void MainWindow::timerDisplayRandStr() {
96+
ui->targetString->setText(QString(""));
97+
//enable the response line editor and next button
98+
ui->responseString->setEnabled(true);
99+
ui->responseString->setFocus();
100+
ui->nextButton->setEnabled(true);
101+
clicked = false;
102+
QTimer::singleShot(m_durationInterval, this, SLOT(on_nextButton_clicked()));
103+
}
104+
105+
//end
106+
107+
void MainWindow::on_responseString_returnPressed() {
108+
on_nextButton_clicked(); //Pressing return has same effect as clicking next.
109+
}
110+
111+
112+
void MainWindow::on_nextButton_clicked() {
113+
114+
// prevents method from getting called twice, once from button and another from
115+
// timer
116+
if(clicked == false)
117+
clicked = true;
118+
else
119+
return;
120+
121+
int goodChars(m_randStr->numCorrectChars(ui->responseString->text()));
122+
m_correctChars += goodChars;
123+
m_totCorrectChars += goodChars;
124+
ui->correctCharFraction->setText(QString("%1 / %2").arg(m_correctChars).arg(lenTarget));
125+
ui->cumulativeFraction->setText(QString("%1 / %2").arg(m_totCorrectChars).arg(totalLenTarget));
126+
127+
if(m_trials == ui->trialsSpinBox->value()) {
128+
//hide game panel
129+
ui->startButton->show();
130+
//show start button
131+
ui->displayLabel->hide();
132+
ui->targetString->hide();
133+
ui->responseLabel->hide();
134+
ui->responseString->hide();
135+
ui->nextButton->hide();
136+
//Enble settings
137+
ui->groupBox->setEnabled(true);
138+
}
139+
else
140+
processTrial();
141+
}
142+
143+
144+
145+
void MainWindow::on_durationSlider_valueChanged(int value) {
146+
ui->durationLCD->display(value);
147+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#ifndef MAINWINDOW_H
2+
#define MAINWINDOW_H
3+
4+
#include <QMainWindow>
5+
#include "randomstring.h"
6+
7+
namespace Ui {
8+
class MainWindow;
9+
}
10+
//start
11+
class MainWindow : public QMainWindow {
12+
13+
Q_OBJECT
14+
15+
public:
16+
explicit MainWindow(QWidget* parent = 0);
17+
~MainWindow();
18+
19+
protected:
20+
void changeEvent(QEvent* e);
21+
void processTrial();
22+
23+
private:
24+
Ui::MainWindow* ui;
25+
26+
private slots:
27+
void on_nextButton_clicked();
28+
void on_responseString_returnPressed();
29+
void on_startButton_clicked();
30+
void on_lengthSlider_valueChanged(int value);
31+
void on_exposureSlider_valueChanged(int value);
32+
void on_durationSlider_valueChanged(int value);
33+
void timerDisplayRandStr();
34+
35+
private:
36+
int m_expInterval;
37+
int m_durationInterval;
38+
RandomString *m_randStr;
39+
int m_trials;
40+
int lenTarget;
41+
int totalLenTarget;
42+
int m_correctChars;
43+
int m_totTrials;
44+
int m_totCorrectChars;
45+
bool clicked;
46+
};
47+
//end
48+
#endif // MAINWINDOW_H

0 commit comments

Comments
 (0)