void WordChecker::checkWord(const QString currentLine) { QString compareLine = mSpeedText.section('\n', mLine, mLine); QString compareString = compareLine.left(currentLine.length()); if (currentLine.compare(compareString) == 0) { // Update the number of correct characters entered. mNbrOfCharacters = mEnteredLines.length() + currentLine.length(); emit nbrOfCharactersChanged(mNbrOfCharacters); // Update the number of characters that is left to enter. mRemainingTextLength = mSpeedTextLength - mNbrOfCharacters; // Updates the Qstring holding the text that is not yet typed. mRemainingText = mSpeedText.right(mRemainingTextLength); emit remainingTextChanged(mRemainingText); if (compareLine.length() == currentLine.length()) { // If at the end of a line, update the line and enteredLines // property with the number of lines and the text entered so far mLine++; // Update the entered lines. mEnteredLines = mSpeedText.section('\n', 0, mLine - 1) + "\n"; emit enteredLinesChanged(mEnteredLines); // lineChanged signal needs to be emitted after enteredLinesChanged. If not, the // speedtext will be updated with the just entered line instead of a new one. emit lineChanged(mLine); // Start a new line by setting the current correct line to an empty string. mCurrentCorrectLine = ""; emit currentCorrectLineChanged(mCurrentCorrectLine); if (mNbrOfCharacters >= mSpeedTextLength) { // When the entire text has been correctly entered return end. emit ended(); } } else { mCurrentCorrectLine = currentLine; emit currentCorrectLineChanged(mCurrentCorrectLine); } setValid(true); } else { setValid(false); } }
WordResult WordChecker::checkWord(const QString currentLine) { QString compareLine = mSpeedText.section('\n', mLine, mLine); QString compareString = compareLine.left(currentLine.length()); if (currentLine.compare(compareString) == 0) { // Update the number of correct characters entered. mNbrOfCharacters = mEnteredLines.length() + currentLine.length(); emit nbrOfCharactersChanged(mNbrOfCharacters); if (mNbrOfCharacters >= mSpeedTextLength) { emit ended(); // When the entire text has been correctly entered return end. return WordResult_End; } if (compareLine.length() == currentLine.length()) { // If at the end of a line, update the line and enteredLines // property with the number of lines and the text entered so far mLine++; emit lineChanged(mLine); // Update the entered lines. mEnteredLines = mSpeedText.section('\n', 0, mLine - 1) + "\n"; emit enteredLinesChanged(mEnteredLines); // Start a new line by setting the current correct line to an empty string. mCurrentCorrectLine = ""; emit currentCorrectLineChanged(mCurrentCorrectLine); return WordResult_NewLine; } else { mCurrentCorrectLine = currentLine; emit currentCorrectLineChanged(mCurrentCorrectLine); } return WordResult_Correct; } return WordResult_Wrong; }