Open-Typer
Open source typewriting tutor program
Loading...
Searching...
No Matches
ExerciseValidator.h
1/*
2 * ExerciseValidator.h
3 * This file is part of Open-Typer
4 *
5 * Copyright (C) 2022-2023 - adazem009
6 *
7 * Open-Typer is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * Open-Typer is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with Open-Typer. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21#ifndef EXERCISEVALIDATOR_H
22#define EXERCISEVALIDATOR_H
23
24#include <QObject>
25#include "../IExerciseValidator.h"
26#include "MistakeRecord.h"
27#include "CharacterRecord.h"
28#include "global/ISettings.h"
29#include "global/IStringUtils.h"
30
32class Q_DECL_EXPORT ExerciseValidator : public IExerciseValidator
33{
34 Q_OBJECT
35 INJECT(ISettings, settings)
36 INJECT(IStringUtils, stringUtils)
37 Q_PROPERTY(QString exerciseText READ exerciseText WRITE setExerciseText NOTIFY exerciseTextChanged)
38 Q_PROPERTY(QString inputText READ inputText WRITE setInputText NOTIFY inputTextChanged)
39 Q_PROPERTY(QList<MistakeRecord> mistakes READ mistakes WRITE setMistakes NOTIFY mistakesChanged)
40 Q_PROPERTY(QList<CharacterRecord> characters READ characters WRITE setCharacters NOTIFY charactersChanged)
41 Q_PROPERTY(bool timed READ timed WRITE setTimed NOTIFY timedChanged)
42 Q_PROPERTY(qreal time READ time WRITE setTime NOTIFY timeChanged)
43 public:
44 QString exerciseText(void) override;
45 void setExerciseText(QString text) override;
46 QString inputText(void) override;
47 void setInputText(QString text) override;
48 Q_INVOKABLE void clearMistakes(void) override;
49 Q_INVOKABLE void addMistake(MistakeRecord mistake) override;
50 QList<MistakeRecord> mistakes(void) override;
51 void setMistakes(QList<MistakeRecord> mistakeList) override;
52 Q_INVOKABLE void clearCharacters(void) override;
53 Q_INVOKABLE void addCharacter(CharacterRecord character) override;
54 QList<CharacterRecord> characters(void) override;
55 void setCharacters(QList<CharacterRecord> characterList) override;
56 bool timed(void) override;
57 void setTimed(bool value) override;
58 qreal time(void) override;
59 void setTime(qreal seconds) override;
60 Q_INVOKABLE void validate(void) override;
61 Q_INVOKABLE void validate(int grossHits, QStringList errorWords) override;
62 Q_INVOKABLE int grossHits(void) override;
63 Q_INVOKABLE int mistakeCount(void) override;
64 Q_INVOKABLE QStringList errorWords(void) override;
65 Q_INVOKABLE void generateMistakeText(bool correctMistakes) override;
66 Q_INVOKABLE QString generatedInputText(void) override;
67 Q_INVOKABLE QString generatedMistakeText(void) override;
68 Q_INVOKABLE QString textWithMistakes(void) override;
69
70 private:
71 QList<MistakeRecord> compareLists(QList<QVariant> source, QList<QVariant> target, QVector<CharacterRecord> *recordedCharacters = nullptr, int *hits = nullptr, int *inputPos = nullptr);
72 QList<MistakeRecord> compareStrings(QString source, QString target, QVector<CharacterRecord> *recordedCharacters = nullptr, int *hits = nullptr, int *inputPos = nullptr);
73 QMap<int, MistakeRecord> generateDiffList(QStringList *sourceWords, QStringList *targetWords, QList<int> *mergeList = nullptr);
74 QList<MistakeRecord> findMistakes(QString exerciseText, QString input, QVector<CharacterRecord> recordedCharacters, int *totalHits = nullptr, QStringList *errorWords = nullptr);
75 QList<MistakeRecord> validateExercise(QString exerciseText, QString inputText, QVector<CharacterRecord> recordedCharacters, int *totalHits, int *mistakeCount, QStringList *errorWords = nullptr, bool timed = false, int timeSecs = 0);
76 QString addMistakes(QString exerciseText, QList<MistakeRecord *> recordedMistakes);
77 QStringList splitWordsByPunct(QStringList source);
78 QString m_exerciseText;
79 QString m_inputText;
80 QList<MistakeRecord> m_mistakes;
81 QList<CharacterRecord> m_characters;
82 bool m_timed = false;
83 qreal m_time = 0;
84 int m_grossHits = 0;
85 int m_mistakeCount = 0;
86 QStringList m_errorWords;
87 QString m_generatedInputText;
88 QString m_generatedMistakeText;
89};
90
91#endif // EXERCISEVALIDATOR_H
The CharacterRecord class can be used to store character records.
Definition CharacterRecord.h:32
The ExerciseValidator class provides methods for exercise validation to QML code.
Definition ExerciseValidator.h:33
Definition IExerciseValidator.h:30
Definition ISettings.h:31
Definition IStringUtils.h:28
The MistakeRecord class can be used to store mistake records.
Definition MistakeRecord.h:29