File indexing completed on 2023-05-30 10:45:24

0001 /*
0002     SPDX-FileCopyrightText: 2003-2010 Peter Hedlund <peter.hedlund@kdemail.net>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "flashview.h"
0007 
0008 #include <QTimer>
0009 
0010 #include <KLocalizedString>
0011 #include <KNotification>
0012 
0013 #include "kwqquizmodel.h"
0014 #include "kwqscorewidget.h"
0015 #include "prefs.h"
0016 
0017 FlashView::FlashView(QWidget *parent, KActionCollection *actionCollection) : KWQQuizView(parent, actionCollection)
0018 {
0019   setupUi(this);
0020   m_timer = new QTimer(this);
0021   connect(m_timer, &QTimer::timeout, this, &FlashView::slotTimer);
0022 }
0023 
0024 void FlashView::init()
0025 {
0026   score->clear();
0027   score->setQuestionCount(m_quiz->questionCount());
0028   score->setAsPercent(Prefs::percent());
0029 
0030   m_actionCollection->action(QStringLiteral("quiz_check"))->setEnabled(true);
0031   m_actionCollection->action(QStringLiteral("flash_know"))->setEnabled(true);
0032   m_actionCollection->action(QStringLiteral("flash_dont_know"))->setEnabled(true);
0033   m_actionCollection->action(QStringLiteral("quiz_repeat_errors"))->setEnabled(false);
0034   m_actionCollection->action(QStringLiteral("quiz_export_errors"))->setEnabled(false);
0035   m_actionCollection->action(QStringLiteral("quiz_audio_play"))->setEnabled(false);
0036 
0037   // reset last file
0038   audioPlayFile(QUrl(), true);
0039 
0040   connect(flashcard, SIGNAL(cardClicked()), this, SLOT(slotCheck()), Qt::UniqueConnection);
0041 
0042   m_showFirst = true;
0043   slotCheck();
0044 }
0045 
0046 void FlashView::keepDiscardCard(bool keep)
0047 {
0048   if (!keep) {
0049     score->countIncrement(KWQScoreWidget::cdCorrect);
0050     KNotification::event(QStringLiteral("QuizCorrect"), i18n("Your answer was correct!"));
0051   }
0052   else {
0053     m_quiz->checkAnswer(QLatin1String(""));
0054     score->countIncrement(KWQScoreWidget::cdError);
0055     KNotification::event(QStringLiteral("QuizError"), i18n("Your answer was incorrect."));
0056   }
0057 
0058   m_showFirst = true;
0059 
0060   m_quiz->toNext();
0061   if (!m_quiz->atEnd()) {
0062     slotCheck();
0063   }
0064   else {
0065     m_quiz->finish();
0066     m_actionCollection->action(QStringLiteral("quiz_check"))->setEnabled(false);
0067     m_actionCollection->action(QStringLiteral("flash_know"))->setEnabled(false);
0068     m_actionCollection->action(QStringLiteral("flash_dont_know"))->setEnabled(false);
0069     m_actionCollection->action(QStringLiteral("quiz_repeat_errors"))->setEnabled(m_quiz->hasErrors());
0070     m_actionCollection->action(QStringLiteral("quiz_export_errors"))->setEnabled(m_quiz->hasErrors());
0071     m_actionCollection->action(QStringLiteral("quiz_audio_play"))->setEnabled(false);
0072     disconnect(flashcard, SIGNAL(cardClicked()), 0, 0);
0073   }
0074 }
0075 
0076 void FlashView::slotCheck()
0077 {
0078   if (m_showFirst) {
0079     flashcard->setCardColor(Prefs::frontCardColor());
0080     flashcard->setTextColor(Prefs::frontTextColor());
0081     flashcard->setFrameColor(Prefs::frontFrameColor());
0082     flashcard->setTextFont(Prefs::frontFont());
0083     flashcard->setIdentifier(m_quiz ->langQuestion());
0084     flashcard->setImage(m_quiz->imageQuestion());
0085     flashcard->setText(m_quiz->question());
0086     audioPlayQuestion();
0087     m_showFirst = false;
0088   }
0089   else {
0090     flashcard->setCardColor(Prefs::backCardColor());
0091     flashcard->setTextColor(Prefs::backTextColor());
0092     flashcard->setFrameColor(Prefs::backFrameColor());
0093     flashcard->setTextFont(Prefs::backFont());
0094     flashcard->setIdentifier(m_quiz->langAnswer());
0095     flashcard->setImage(m_quiz->imageAnswer());
0096     flashcard->setText(m_quiz->answer());
0097     audioPlayAnswer();
0098     m_showFirst = true;
0099   }
0100 
0101   if (Prefs::autoFlip()) {
0102     m_timer->setSingleShot(true);
0103     m_timer->start(Prefs::flipDelay() * 1000);
0104   }
0105   else
0106     m_timer->stop();
0107 }
0108 
0109 void FlashView::slotKnow()
0110 {
0111   keepDiscardCard(false);
0112 }
0113 
0114 void FlashView::slotDontKnow()
0115 {
0116   keepDiscardCard(true);
0117 }
0118 
0119 void FlashView::slotTimer( )
0120 {
0121   if (!m_showFirst)
0122     slotCheck();
0123   else
0124     if (Prefs::keepDiscard())
0125       slotDontKnow();
0126     else
0127       slotKnow();
0128 }
0129 
0130 void FlashView::slotApplySettings( )
0131 {
0132   if (!m_showFirst) {
0133     flashcard->setCardColor(Prefs::frontCardColor());
0134     flashcard->setTextColor(Prefs::frontTextColor());
0135     flashcard->setFrameColor(Prefs::frontFrameColor());
0136     flashcard->setTextFont(Prefs::frontFont());
0137   }
0138   else {
0139     flashcard->setCardColor(Prefs::backCardColor());
0140     flashcard->setTextColor(Prefs::backTextColor());
0141     flashcard->setFrameColor(Prefs::backFrameColor());
0142     flashcard->setTextFont(Prefs::backFont());
0143   }
0144 
0145   if (Prefs::autoFlip()) {
0146     m_timer->setSingleShot(true);
0147     m_timer->start(Prefs::flipDelay() * 1000);
0148   }
0149   else
0150     m_timer->stop();
0151 
0152   score ->setAsPercent(Prefs::percent());
0153 }