summaryrefslogtreecommitdiffstats
path: root/kwordquiz/src/multipleview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kwordquiz/src/multipleview.cpp')
-rw-r--r--kwordquiz/src/multipleview.cpp290
1 files changed, 290 insertions, 0 deletions
diff --git a/kwordquiz/src/multipleview.cpp b/kwordquiz/src/multipleview.cpp
new file mode 100644
index 00000000..9c050a86
--- /dev/null
+++ b/kwordquiz/src/multipleview.cpp
@@ -0,0 +1,290 @@
+/* This file is part of KWordQuiz
+ Copyright (C) 2003 Peter Hedlund <peter.hedlund@kdemail.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <qlabel.h>
+#include <qradiobutton.h>
+
+#include <kiconloader.h>
+#include <klocale.h>
+#include <knotifyclient.h>
+
+#include "kwordquiz.h"
+#include "multipleview.h"
+#include "prefs.h"
+
+MultipleView::MultipleView(QWidget *parent, const char *name, WFlags f)
+ : MultipleViewBase(parent, name, f)
+{
+ m_score = new WQScore();
+}
+
+
+MultipleView::~MultipleView()
+{}
+
+void MultipleView::setQuiz(WQQuiz *quiz)
+{
+ m_quiz = quiz;
+}
+
+void MultipleView::init()
+{
+
+ m_score ->setQuestionCount(m_quiz->questionCount());
+ m_score ->setAsPercent(Prefs::percent());
+ m_question = 0;
+ m_error = 0;
+
+ opt1->show();
+ opt2->show();
+ opt3->show();
+
+ lblQuestion -> setFont(Prefs::editorFont());
+ lblPreviousQuestion -> setFont(Prefs::editorFont());
+ lblYourAnswer -> setFont(Prefs::editorFont());
+ lblCorrect -> setFont(Prefs::editorFont());
+ opt1->setFont(Prefs::editorFont());
+ opt2->setFont(Prefs::editorFont());
+ opt3->setFont(Prefs::editorFont());
+
+ picAnswered->clear();
+ picCorrect->clear();
+ picError->clear();
+
+ lblPreviousQuestionHeader->clear();
+ lblPreviousQuestion->clear();
+ lblYourAnswerHeader->clear();
+ lblYourAnswer->clear();
+ lblCorrectHeader->clear();
+ lblCorrect->clear();
+
+ picPrevious->clear();
+ picYourAnswer->clear();
+ picCorrectAnswer->clear();
+
+ KWordQuizApp *win=(KWordQuizApp *) parent();
+ win->actionCollection()->action("quiz_check")->setEnabled(true);
+ win->actionCollection()->action("quiz_repeat_errors")->setEnabled(false);
+
+ updateScore();
+ showQuestion(0);
+}
+
+void MultipleView::slotCheck()
+{
+ KWordQuizApp *win=(KWordQuizApp *) parent();
+ if (win->actionCollection()->action("quiz_check")->isEnabled())
+ {
+
+ QString ans;
+ bool oneIsChecked = false;
+
+ if (opt1->isChecked())
+ {
+ ans = opt1->text().mid(3, opt1->text().length());
+ oneIsChecked = true;
+ }
+
+ if (opt2->isChecked())
+ {
+ ans = opt2->text().mid(3, opt2->text().length());
+ oneIsChecked = true;
+ }
+
+ if (opt3->isChecked())
+ {
+ ans = opt3->text().mid(3, opt3->text().length());
+ oneIsChecked = true;
+ }
+
+ if (!oneIsChecked)
+ return;
+
+ bool fIsCorrect = m_quiz->checkAnswer(m_question, ans);
+
+ if (fIsCorrect)
+ {
+
+ picYourAnswer->setPixmap(KGlobal::iconLoader()->loadIcon("check", KIcon::Panel));
+ lblCorrectHeader->clear();
+ picCorrectAnswer->clear();
+ lblCorrect->clear();
+ m_score->countIncrement(WQScore::cdCorrect);
+ updateScore();
+ KNotifyClient::event(winId(), "QuizCorrect", i18n("Your answer was correct!"));
+ }
+ else
+ {
+ m_error++;
+
+ picYourAnswer->setPixmap(KGlobal::iconLoader()->loadIcon("error", KIcon::Panel));
+
+ lblCorrect->setText(m_quiz->answer(m_question));
+ //lblCorrect->setFont(m_quiz->fontAnswer(m_question));
+ picCorrectAnswer->setPixmap(KGlobal::iconLoader()->loadIcon("check", KIcon::Panel));
+ lblCorrectHeader->setText(i18n("Correct Answer"));
+ m_score->countIncrement(WQScore::cdError);
+ updateScore();
+ KNotifyClient::event(winId(), "QuizError", i18n("Your answer was incorrect."));
+ }
+
+ lblPreviousQuestionHeader->setText(i18n("Previous Question"));
+ lblPreviousQuestion->setText(m_quiz->question(m_question));
+ //lblPreviousQuestion->setFont(m_quiz->fontQuestion(m_question));
+ picPrevious->setPixmap(KGlobal::iconLoader()->loadIcon("question", KIcon::Panel));
+
+ lblYourAnswerHeader->setText(i18n("Your Answer"));
+ lblYourAnswer->setText(m_quiz->yourAnswer(m_question, ans));
+ //lblYourAnswer->setFont(m_quiz->fontAnswer(m_question));
+
+ if (++m_question < m_quiz->questionCount())
+ {
+ showQuestion(m_question);
+ }
+ else
+ {
+ m_quiz->finish();
+ win->actionCollection()->action("quiz_check")->setEnabled(false);
+ win->actionCollection()->action("quiz_repeat_errors")->setEnabled((m_error > 0));
+
+ lblQuestionLanguage->setText(i18n("Summary"));
+ lblQuestion->clear();
+ lblAnswerLanguage->clear();
+ opt1->hide();
+ opt2->hide();
+ opt3->hide();
+ picQuestion->setPixmap(KGlobal::iconLoader()->loadIcon("kwordquiz", KIcon::Panel));
+ picAnswer->clear();
+ }
+ }
+}
+
+void MultipleView::slotOpt1Clicked()
+{
+ if (Prefs::autoCheck())
+ slotCheck();
+ else
+ {
+ opt2->setChecked(false);
+ opt3->setChecked(false);
+ }
+}
+
+void MultipleView::slotOpt2Clicked()
+{
+ if (Prefs::autoCheck())
+ slotCheck();
+ else
+ {
+ opt1->setChecked(false);
+ opt3->setChecked(false);
+ }
+}
+
+void MultipleView::slotOpt3Clicked()
+{
+ if (Prefs::autoCheck())
+ slotCheck();
+ else
+ {
+ opt1->setChecked(false);
+ opt2->setChecked(false);
+ }
+}
+
+void MultipleView::slotRestart()
+{
+ m_quiz->activateBaseList();
+ init();
+}
+
+void MultipleView::slotRepeat()
+{
+ m_quiz->activateErrorList();
+ init();
+}
+
+void MultipleView::updateScore()
+{
+ QString s;
+ s = s.setNum(m_quiz->questionCount(), 10);
+ lblScoreCount->setText(s);
+ picCount->setPixmap(KGlobal::iconLoader()->loadIcon("kwordquiz", KIcon::Panel));
+
+ s = m_score->answerText();
+ lblScoreAnswered->setText(s);
+ if (!s.isEmpty())
+ picAnswered->setPixmap(KGlobal::iconLoader()->loadIcon("question", KIcon::Panel));
+
+ s = m_score->correctText();
+ lblScoreCorrect->setText(s);
+ if (!s.isEmpty())
+ picCorrect->setPixmap(KGlobal::iconLoader()->loadIcon("check", KIcon::Panel));
+
+ s = m_score->errorText();
+ lblScoreError->setText(s);
+ if (!s.isEmpty())
+ picError->setPixmap(KGlobal::iconLoader()->loadIcon("error", KIcon::Panel));
+}
+
+
+/*!
+ \fn MultipleView::showQuestion(int i)
+ */
+void MultipleView::showQuestion(int i)
+{
+
+ lblQuestionLanguage -> setText(m_quiz ->langQuestion(i));
+ lblQuestion -> setText(m_quiz ->question(i));
+ //lblQuestion -> setFont(m_quiz->fontQuestion(i));
+
+ picQuestion->setPixmap(KGlobal::iconLoader()->loadIcon(m_quiz->quizIcon(i, WQQuiz::qiLeftCol), KIcon::Panel));
+
+ lblAnswerLanguage -> setText(m_quiz ->langAnswer(i));
+
+ //opt1->setFont(m_quiz->fontAnswer(i));
+ //opt2->setFont(m_quiz->fontAnswer(i));
+ //opt3->setFont(m_quiz->fontAnswer(i));
+
+ QStringList sl = m_quiz->multiOptions(i);
+ QString s[10];
+ int j = 0;
+ for(QStringList::Iterator it = sl.begin(); it != sl.end(); ++it)
+ {
+ s[j] = *it;
+ j++;
+ }
+
+ opt1->setText("&1 " + s[0]);
+ opt2->setText("&2 " + s[1]);
+ opt3->setText("&3 " + s[2]);
+
+ opt1->setChecked(false);
+ opt2->setChecked(false);
+ opt3->setChecked(false);
+
+ picAnswer->setPixmap(KGlobal::iconLoader()->loadIcon(m_quiz->quizIcon(i, WQQuiz::qiRightCol), KIcon::Panel));
+}
+
+void MultipleView::slotApplySettings( )
+{
+ m_score ->setAsPercent(Prefs::percent());
+ updateScore();
+}
+
+#include "multipleview.moc"