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"