File indexing completed on 2024-04-21 03:41:51
0001 /*************************************************************************** 0002 * Copyright (C) 2004-2007 by Albert Astals Cid * 0003 * aacid@kde.org * 0004 * * 0005 * This program is free software; you can redistribute it and/or modify * 0006 * it under the terms of the GNU General Public License as published by * 0007 * the Free Software Foundation; either version 2 of the License, or * 0008 * (at your option) any later version. * 0009 ***************************************************************************/ 0010 0011 #include "askwidget.h" 0012 0013 #include <KLocalizedString> 0014 #include <KMessageBox> 0015 0016 #include <QApplication> 0017 #include <QLabel> 0018 #include <QLayout> 0019 0020 #include "map.h" 0021 0022 askWidget::askWidget(QWidget *parent, KGmap *m, QWidget *w, uint count, bool showLabel) : QWidget(parent), p_map(m), p_count(count) 0023 { 0024 connect(&m_timer, &QTimer::timeout, this, &askWidget::resetLabelColor); 0025 if (showLabel) 0026 { 0027 p_answers = new QLabel(w); 0028 w -> layout() -> addWidget(p_answers); 0029 p_answers -> setAlignment(Qt::AlignTop | Qt::AlignHCenter); 0030 resetAnswers(); 0031 p_answers -> show(); 0032 } 0033 else p_answers = nullptr; 0034 } 0035 0036 askWidget::~askWidget() 0037 { 0038 delete p_answers; 0039 } 0040 0041 int askWidget::correctAnswers() const 0042 { 0043 return p_correctAnswers; 0044 } 0045 0046 QVector<userAnswer> askWidget::userAnswers() const 0047 { 0048 return p_userAnswers; 0049 } 0050 0051 void askWidget::setMovement(bool) 0052 { 0053 } 0054 0055 void askWidget::setZoom(bool b) 0056 { 0057 if (b) QApplication::setOverrideCursor(Qt::CrossCursor); 0058 else QApplication::restoreOverrideCursor(); 0059 } 0060 0061 void askWidget::setOriginalZoom() 0062 { 0063 } 0064 0065 void askWidget::setAutomaticZoom(bool) 0066 { 0067 } 0068 0069 void askWidget::clearAsked() 0070 { 0071 p_asked.clear(); 0072 } 0073 0074 QString askWidget::lastDivisionAsked() 0075 { 0076 return p_asked.last(); 0077 } 0078 0079 void askWidget::nextQuestion() 0080 { 0081 QString aux; 0082 if (p_asked.count() < p_count) 0083 { 0084 division *div; 0085 do 0086 { 0087 div = p_map -> getRandomDivision(askMode()); 0088 aux = div -> getUntranslatedName(); 0089 } while (p_asked.indexOf(aux) != -1); 0090 p_asked << aux; 0091 nextQuestionHook(div); 0092 } 0093 else Q_EMIT questionsEnded(); 0094 } 0095 0096 void askWidget::questionAnswered(bool wasCorrect) 0097 { 0098 p_currentAnswer.setAnswerCorrect(wasCorrect); 0099 p_userAnswers.append(p_currentAnswer); 0100 QPalette pal = p_answers -> palette(); 0101 0102 p_answers -> setAutoFillBackground(true); 0103 if (wasCorrect) 0104 { 0105 pal.setColor(QPalette::Window, QColor(0, 0xbb, 0)); 0106 p_answers -> setPalette(pal); 0107 p_correctAnswers++; 0108 } 0109 else 0110 { 0111 pal.setColor(QPalette::Window, QColor(0xbb, 0, 0)); 0112 p_answers -> setPalette(pal); 0113 p_incorrectAnswers++; 0114 } 0115 updateLabel(); 0116 m_timer.start(850); 0117 } 0118 0119 void askWidget::resetAnswers() 0120 { 0121 p_correctAnswers = 0; 0122 p_incorrectAnswers = 0; 0123 updateLabel(); 0124 } 0125 0126 void askWidget::resetLabelColor() 0127 { 0128 p_answers -> setAutoFillBackground(false); 0129 p_answers -> setPalette(QPalette()); 0130 } 0131 0132 void askWidget::updateLabel() 0133 { 0134 p_answers -> setText(i18n("Correct answers: %1/%2", p_correctAnswers, p_correctAnswers + p_incorrectAnswers)); 0135 } 0136 0137 #include "moc_askwidget.cpp"