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 }