delete(label);
}
-quiz::quiz() : current(NULL), correct(0) {
+quiz::quiz() : current(NULL), subset(0), correct(0) {
QAction *choose;
window = new QWidget();
}
delete(timer);
questions.clear();
+ subset = 0;
correct = 0;
} else {
init_gui();
}
current = files.at(items.indexOf(item));
if(read_quiz(current->path.absolutePath().toStdString().c_str())) {
+ if (subset) {
+ trim_questions();
+ }
+ build_index();
menu->addAction(give_up);
display_score();
display_grid();
do {
getline(ifs, buffer);
} while (buffer[0] == '#');
+ if (! buffer.compare(0, strlen(SUBSET_PATTERN), SUBSET_PATTERN)) {
+ subset = atoi(buffer.substr(strlen(SUBSET_PATTERN)).c_str());
+ do {
+ getline(ifs, buffer);
+ } while (buffer[0] == '#');
+ }
total_time = atoi(buffer.c_str());
/* convert minutes to seconds */
total_time *= 60;
loc = parse_line.find(CHAR_DELIM);
if (loc == string::npos) {
cerr << "Wrong format in file " << filename << endl;
- return 0 ;
+ return 0;
}
hint = parse_line.substr(0, loc);
qanswer = qanswer.trimmed();
q = new question(QString::fromStdString(hint), qanswer );
questions.push_back(q);
- index[qanswer.toLower()] = i;
while (mloc != string::npos) {
parse_line = parse_line.substr(mloc + 1);
}
qanswer = QString::fromStdString(answer);
qanswer = qanswer.trimmed();
- index[qanswer.toLower()] = i;
+ q->alternate_answers.append(qanswer);
mloc = parse_line.find(ANSWER_DELIM);
}
i++;
return 1;
}
+void quiz::trim_questions() {
+ vector<question *> new_questions;
+ int number;
+ int nr_questions;
+
+ qsrand(QDateTime::currentDateTime().toTime_t());
+
+ nr_questions = subset;
+ while (nr_questions) {
+ number = qrand() % questions.size();
+ new_questions.push_back(questions.at(number));
+ questions.erase(questions.begin() + number);
+ nr_questions--;
+ }
+ questions.clear();
+ questions = new_questions;
+ total = subset;
+}
+
+void quiz::build_index() {
+ vector<question *>::iterator itr;
+ int position = 0;
+
+ for (itr = questions.begin(); itr != questions.end() ; itr++, position++) {
+ index[(*itr)->answer.toLower()] = position;
+ if (!(*itr)->alternate_answers.isEmpty()) {
+ QList<QString>::iterator list_itr;
+
+ for (list_itr = (*itr)->alternate_answers.begin();
+ list_itr != (*itr)->alternate_answers.end(); list_itr++)
+ index[(*list_itr).toLower()] = position;
+ }
+ }
+}
+
void quiz::init_gui() {
QHBoxLayout *menu_layout;
void quiz::display_grid() {
vector<question *>::iterator itrq;
- int i,j, nr_columns, nr_col_padding;
+ int i,j, nr_col_padding;
+ int nr_columns = 0;
int padding = 3;
int pixelsWide ;
QFont font;