File indexing completed on 2024-10-06 03:31:32
0001 // SPDX-FileCopyrightText: 2006-2010 Peter Hedlund <peter.hedlund@kdemail.net> 0002 // SPDX-FileCopyrightText: 2023 Carl Schwan <carl@carlschwan.eu> 0003 // SPDX-License-Identifier: GPL-2.0-or-later 0004 0005 #pragma once 0006 0007 #include <QAbstractListModel> 0008 #include <qsortfilterproxymodel.h> 0009 0010 #include "prefs.h" 0011 0012 class KWQCardModel; 0013 class KWQSortFilterModel; 0014 0015 /** 0016 @author Peter Hedlund <peter.hedlund@kdemail.net> 0017 */ 0018 class KWQQuizModel : public QAbstractListModel 0019 { 0020 Q_OBJECT 0021 0022 public: 0023 enum QuizIcon { 0024 IconLeftCol, IconRightCol, IconQuestion, IconCorrect, IconError, 0025 }; 0026 0027 explicit KWQQuizModel(QObject *parent = nullptr); 0028 0029 void setFilterModel(KWQCardModel *sourceModel); 0030 KWQCardModel *sourceModel() const; 0031 0032 bool init(); 0033 0034 void activateErrorList(); 0035 void activateBaseList(); 0036 0037 void finish(); 0038 void toNext(); 0039 bool atEnd(); 0040 bool checkAnswer(const QString & ); 0041 bool hasErrors(); 0042 QStringList multiOptions(); 0043 QString quizIcon(QuizIcon ico); 0044 QString yourAnswer(const QString &) const; 0045 QString hint(); 0046 0047 Prefs::EnumStartSession::type quizType() const {return m_quizType;} 0048 void setQuizType(Prefs::EnumStartSession::type qt); 0049 0050 int quizMode() const {return m_quizMode;} 0051 void setQuizMode(int qm); 0052 0053 int questionCount(); 0054 QString question(); 0055 QString blankAnswer(); 0056 QString answer(); 0057 QString langQuestion(); 0058 QString langAnswer(); 0059 QPixmap imageQuestion(); 0060 QPixmap imageAnswer(); 0061 QUrl soundQuestion(); 0062 QUrl soundAnswer(); 0063 0064 QString kbAnswer(); 0065 0066 QList<int> errorList() const {return m_errorList;} 0067 void removeLastError(); 0068 0069 Q_SIGNALS: 0070 void checkingAnswer(int ); 0071 0072 protected: 0073 bool lessThan(const QModelIndex & left, const QModelIndex & right) const override; 0074 0075 // Disable from external calls; use setFilterModel() instead 0076 // (It's not even implemented so will give a link error anyway.) 0077 //void setSourceModel(QAbstractItemModel * sourceModel); 0078 0079 private: 0080 KWQSortFilterModel * m_sourceModel; 0081 0082 QList<int> m_list; 0083 QList<int> m_errorList; 0084 QList<int> m_quizList; 0085 0086 int m_quizMode; 0087 int m_currentQuestion; 0088 int m_questionCount; 0089 0090 Prefs::EnumStartSession::type m_quizType; 0091 QString m_correctBlank; 0092 QString m_answerBlank; 0093 0094 bool isOdd(int ) const; 0095 int column(int ); 0096 }; 0097 0098 #endif // KWQQUIZMODEL_H