• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

parley

  • sources
  • kde-4.12
  • kdeedu
  • parley
  • src
  • practice
genderbackendmode.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  Copyright 2010 Frederik Gladhorn <gladhorn@kde.org>
3  ***************************************************************************/
4 
5 /***************************************************************************
6  * *
7  * This program 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  ***************************************************************************/
13 
14 
15 #include "genderbackendmode.h"
16 
17 #include <klocale.h>
18 
19 #include <keduvocdocument.h>
20 #include <keduvocwordtype.h>
21 
22 using namespace Practice;
23 
24 GenderBackendMode::GenderBackendMode(const PracticeOptions& practiceOptions, AbstractFrontend* frontend, QObject* parent, Practice::TestEntryManager* testEntryManager, KEduVocDocument* doc)
25 : MultipleChoiceBackendMode(practiceOptions, frontend, parent, testEntryManager)
26 {
27  m_articles = doc->identifier(Prefs::solutionLanguage()).article();
28 
29  KEduVocWordFlag::Flags singular = KEduVocWordFlag::Singular;
30  KEduVocWordFlag::Flags definite = KEduVocWordFlag::Definite;
31  KEduVocWordFlag::Flags indefinite = KEduVocWordFlag::Indefinite;
32  KEduVocWordFlag::Flags masculine = KEduVocWordFlag::Masculine;
33  KEduVocWordFlag::Flags feminine = KEduVocWordFlag::Feminine;
34  KEduVocWordFlag::Flags neuter = KEduVocWordFlag::Neuter;
35 
36  m_masculine = m_articles.article( singular | definite | masculine );
37  if (m_masculine.isEmpty()) {
38  m_masculine = m_articles.article( singular | indefinite | masculine );
39  }
40 
41  m_feminine = m_articles.article( singular | definite | feminine );
42  if (m_feminine.isEmpty()) {
43  m_feminine = m_articles.article( singular | indefinite | feminine );
44  }
45 
46  m_neuter = m_articles.article( singular | definite | neuter );
47  if (m_neuter.isEmpty()) {
48  m_neuter = m_articles.article( singular | indefinite | neuter );
49  }
50 
51  // best bet... if it is defined, it must exist, or if none of them is defined
52  m_neuterExists = (!m_neuter.isEmpty()) || (m_masculine.isEmpty() && m_feminine.isEmpty());
53 }
54 
55 void GenderBackendMode::prepareChoices(TestEntry* entry)
56 {
57  Q_ASSERT(entry->entry()->translation(m_practiceOptions.languageTo())->wordType()->wordType() & KEduVocWordFlag::Noun);
58 
59  setQuestion(i18n("Choose the right article for \"%1\"", entry->entry()->translation(m_practiceOptions.languageFrom())->text()));
60 
61  // set the word (possibly without the article)
62  QString noun = entry->entry()->translation(Prefs::solutionLanguage())->text();
63 
64  // strip the article
65  QStringList qsl = noun.split(QRegExp("\\s"), QString::SkipEmptyParts);
66  QMutableStringListIterator qsli(qsl);
67  while (qsli.hasNext())
68  if (m_articles.isArticle(qsli.next()))
69  qsli.remove();
70 
71  noun = qsl.join(" ");
72 
73  QString solution(noun);
74 
75  // set the choices
76  QStringList choices;
77 
78  if (!m_masculine.isEmpty()) {
79  choices.append(m_masculine + ' ' + noun);
80  } else {
81  choices.append(i18nc("@label the gender of the word: masculine", "%1 is masculine", noun));
82  }
83  if (!m_feminine.isEmpty()) {
84  choices.append(m_feminine + ' ' + noun);
85  } else {
86  choices.append(i18nc("@label the gender of the word: feminine", "%1 is feminine", noun));
87  }
88  if (m_neuterExists && !m_neuter.isEmpty()) {
89  choices.append(m_neuter + ' ' + noun);
90  } else {
91  choices.append(i18nc("@label the gender of the word: neuter", "%1 is neuter", noun));
92  }
93 
94  setChoices(choices);
95 
96  kDebug() << entry->entry()->translation(m_practiceOptions.languageTo())->wordType()->wordType();
97  if (entry->entry()->translation(m_practiceOptions.languageTo())->wordType()->wordType() & KEduVocWordFlag::Masculine) {
98  setCorrectAnswer(0);
99  kDebug() << "male";
100  } else if (entry->entry()->translation(m_practiceOptions.languageTo())->wordType()->wordType() & KEduVocWordFlag::Feminine) {
101  setCorrectAnswer(1);
102  kDebug() << "female";
103  } else {
104  setCorrectAnswer(2);
105  kDebug() << "neuter";
106  }
107 }
108 
109 void GenderBackendMode::updateGrades()
110 {
111  if (m_frontend->resultState() == AbstractFrontend::AnswerCorrect) {
112  kDebug() << "article right - old grade: " << m_current->entry()->translation(m_practiceOptions.languageTo())->article().grade();
113  KEduVocText articleGrade = m_current->entry()->translation(m_practiceOptions.languageTo())->article();
114  articleGrade.incGrade();
115  articleGrade.incPracticeCount();
116  articleGrade.setPracticeDate( QDateTime::currentDateTime() );
117  m_current->entry()->translation(m_practiceOptions.languageTo())->setArticle(articleGrade);
118  kDebug() << "article right - new grade: " << m_current->entry()->translation(m_practiceOptions.languageTo())->article().grade();
119  } else {
120  kDebug() << "article wrong";
121  KEduVocText articleGrade = m_current->entry()->translation(m_practiceOptions.languageTo())->article();
122  articleGrade.setGrade(KV_LEV1_GRADE);
123  articleGrade.incPracticeCount();
124  articleGrade.incBadCount();
125  m_current->entry()->translation(m_practiceOptions.languageTo())->setArticle(articleGrade);
126  }
127 }
128 
129 
130 #include "genderbackendmode.moc"
Practice::MultipleChoiceBackendMode::setCorrectAnswer
void setCorrectAnswer(int index)
The correct solution, index of the choices.
Definition: multiplechoicebackendmode.cpp:83
Practice::PracticeOptions
Definition: practiceoptions.h:22
Practice::MultipleChoiceBackendMode::setChoices
void setChoices(const QStringList &choices)
This must include the correct answer.
Definition: multiplechoicebackendmode.cpp:78
Practice::PracticeOptions::languageFrom
int languageFrom() const
Definition: practiceoptions.h:27
Practice::GenderBackendMode::updateGrades
virtual void updateGrades()
Change the grades for the current entry.
Definition: genderbackendmode.cpp:109
Practice::TestEntryManager
Definition: testentrymanager.h:31
genderbackendmode.h
QObject
Practice::AbstractBackendMode::m_frontend
AbstractFrontend * m_frontend
Definition: abstractbackendmode.h:83
Practice::AbstractBackendMode::m_current
TestEntry * m_current
Definition: abstractbackendmode.h:84
Practice::MultipleChoiceBackendMode
Definition: multiplechoicebackendmode.h:23
Practice::PracticeOptions::languageTo
int languageTo() const
Definition: practiceoptions.h:28
Practice::AbstractFrontend::AnswerCorrect
Definition: abstractfrontend.h:41
Practice::GenderBackendMode::GenderBackendMode
GenderBackendMode(const PracticeOptions &PracticeOptions, AbstractFrontend *frontend, QObject *parent, Practice::TestEntryManager *testEntryManager, KEduVocDocument *doc)
Definition: genderbackendmode.cpp:24
Practice::AbstractFrontend
Definition: abstractfrontend.h:25
Practice::AbstractBackendMode::m_practiceOptions
PracticeOptions m_practiceOptions
Definition: abstractbackendmode.h:82
Practice::MultipleChoiceBackendMode::setQuestion
void setQuestion(const QString &question)
Set the question/original language.
Definition: multiplechoicebackendmode.cpp:68
Practice::GenderBackendMode::prepareChoices
virtual void prepareChoices(TestEntry *current)
set the list of possible answers.
Definition: genderbackendmode.cpp:55
Practice::AbstractFrontend::resultState
virtual ResultState resultState()=0
Prefs::solutionLanguage
static int solutionLanguage()
Get The language in which the user has to answer.
Definition: prefs.h:1186
TestEntry::entry
KEduVocExpression * entry()
Definition: testentry.cpp:134
TestEntry
Definition: testentry.h:22
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:42:05 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

parley

Skip menu "parley"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • kstars
  • libkdeedu
  •   keduvocdocument
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal