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

parley

  • sources
  • kde-4.14
  • kdeedu
  • parley
  • src
  • collection
collection.cpp
Go to the documentation of this file.
1 /***************************************************************************
2 
3  Copyright 2007-2008 Frederik Gladhorn <frederik.gladhorn@kdemail.net>
4 
5  ***************************************************************************/
6 
7 /***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 
16 #include "collection.h"
17 
18 #include <QTimer>
19 
20 // KDE
21 #include <KEMailSettings>
22 #include <KGlobal>
23 #include <KLocale>
24 
25 // KEduVocDocument library
26 #include <keduvoclesson.h>
27 #include <keduvocleitnerbox.h>
28 #include <keduvocexpression.h>
29 #include <keduvocwordtype.h>
30 
31 // Parley
32 #include "../config-parley.h"
33 #include "../utils.h"
34 #include "prefs.h"
35 #include "entryfilter.h"
36 
37 
38 // ----------------------------------------------------------------
39 
40 
41 void fetchGrammar(KEduVocDocument* doc, int languageIndex)
42 {
43  QString locale = doc->identifier(languageIndex).locale();
44 
45  KUrl location(QString("http://edu.kde.org/parley/locale/") + locale + QString(".kvtml"));
46 
47  KEduVocDocument grammarDoc;
48  if (grammarDoc.open(location) == KEduVocDocument::NoError) {
49  doc->identifier(languageIndex).setArticle(grammarDoc.identifier(0).article());
50  doc->identifier(languageIndex).setPersonalPronouns(grammarDoc.identifier(0).personalPronouns());
51  // @todo m_doc->identifier(index).setDeclension(grammarDoc.identifier(0).declension());
52  doc->identifier(languageIndex).setTenseList(grammarDoc.identifier(0).tenseList());
53  } else {
54  kDebug() << "Download of " << location.url() << " failed.";
55  }
56 }
57 
58 Collection::Collection(KEduVocDocument *doc, QObject* parent)
59  : QObject(parent)
60  , m_doc(doc)
61  , m_backupTimer(0)
62 {
63 }
64 
65 Collection::Collection(KUrl *url, QObject* parent)
66  : QObject(parent)
67  , m_doc(new KEduVocDocument(this))
68  , m_backupTimer(0)
69 {
70  // We ignore file locks here because we open the file for readonly
71  // purposes only.
72  m_doc->open(*url, KEduVocDocument::FileOpenReadOnly);
73 }
74 
75 Collection::~Collection()
76 {
77  close();
78 
79  // NOTE: No saving here because at this point the Collection class is a
80  // read-only wrapper around KEduVocDocument.
81  if (m_doc) {
82  emit documentChanged(0);
83  m_doc->deleteLater();
84  m_doc = 0;
85  }
86 
87  delete m_backupTimer;
88 }
89 
90 
91 KEduVocDocument *Collection::eduVocDocument()
92 {
93  // If there is no present vocabulary document, create an empty one.
94  if (!m_doc) {
95  m_doc = new KEduVocDocument();
96  }
97 
98  return m_doc;
99 }
100 
101 void Collection::setTitle(const QString& title)
102 {
103  m_doc->setTitle(title);
104 }
105 
106 
107 
108 void Collection::enableAutoBackup(bool enable)
109 {
110  if (!enable) {
111  if (m_backupTimer) {
112  m_backupTimer->stop();
113  }
114  } else {
115  if (!m_backupTimer) {
116  m_backupTimer = new QTimer(this);
117  connect(m_backupTimer, SIGNAL(timeout()), this, SLOT(save()));
118  }
119  m_backupTimer->start(Prefs::backupTime() * 60 * 1000);
120  }
121 }
122 
123 void Collection::numDueWords(WordCount &wc)
124 {
125  // Get the entries from the collection. Cache them for future use.
126  if (m_allTestEntries.isEmpty()) {
127  EntryFilter filter(m_doc, this);
128  m_allTestEntries = filter.entries(false);
129  }
130 
131  // Count the number of words due for each grade level.
132  // TODO: Also take into account pregrades.
133  foreach (const TestEntry *entry, m_allTestEntries) {
134  int languageTo = entry->languageTo();
135  KEduVocExpression *exp = entry->entry();
136 
137  int grade = exp->translation(languageTo)->grade();
138  int pregrade = exp->translation(languageTo)->preGrade();
139  if (exp->translation(languageTo)->text().isEmpty()) {
140  wc.invalid++;
141  }
142  else if (pregrade > 0) {
143  wc.pregrades[pregrade]++;
144  wc.initialWords++;
145  wc.grades[0]++;
146  }
147  else {
148  wc.grades[grade]++;
149  }
150  }
151 
152  wc.totalWords = m_allTestEntries.count();
153  //kDebug() << m_doc->title() << wc.totalWords << "entries";
154 }
155 
156 
157 // Slots
158 
159 
160 void Collection::close()
161 {
162  enableAutoBackup(false);
163  m_doc->close();
164 }
165 
166 
167 // ----------------------------------------------------------------
168 // private functions
169 
170 
171 void Collection::setDefaultDocumentProperties(KEduVocDocument *doc)
172 {
173  KEMailSettings emailSettings;
174  emailSettings.setProfile(emailSettings.defaultProfileName());
175  doc->setAuthor(emailSettings.getSetting(KEMailSettings::RealName));
176  doc->setAuthorContact(emailSettings.getSetting(KEMailSettings::EmailAddress));
177 
178  doc->setLicense(i18n("Public Domain"));
179  doc->setCategory(i18n("Languages"));
180 
181  QString locale = KGlobal::locale()->language();
182 
183  doc->appendIdentifier();
184  doc->appendIdentifier();
185  doc->identifier(0).setName(KGlobal::locale()->languageCodeToName(locale));
186  doc->identifier(0).setLocale(locale);
187  doc->identifier(1).setName(i18n("A Second Language"));
188  doc->identifier(1).setLocale(locale);
189 
190  KEduVocLesson* lesson = new KEduVocLesson(i18n("Lesson 1"), doc->lesson());
191  doc->lesson()->appendChildContainer(lesson);
192 
193  // add some entries
194  for (int i = 0; i < 15 ; i++) {
195  lesson->appendEntry(new KEduVocExpression());
196  }
197 
198  doc->setModified(false);
199 }
200 
201 void Collection::initializeDefaultGrammar(KEduVocDocument *doc)
202 {
203  KEduVocWordType *root = doc->wordTypeContainer();
204  KEduVocWordType *noun = new KEduVocWordType(i18n("Noun"), root);
205  noun->setWordType(KEduVocWordFlag::Noun);
206  root->appendChildContainer(noun);
207 
208  KEduVocWordType *nounChild = new KEduVocWordType(i18n("Masculine"), noun);
209  nounChild->setWordType(KEduVocWordFlag::Noun | KEduVocWordFlag::Masculine);
210  noun->appendChildContainer(nounChild);
211  nounChild = new KEduVocWordType(i18n("Feminine"), noun);
212  nounChild->setWordType(KEduVocWordFlag::Noun | KEduVocWordFlag::Feminine);
213  noun->appendChildContainer(nounChild);
214  nounChild = new KEduVocWordType(i18n("Neuter"), noun);
215  nounChild->setWordType(KEduVocWordFlag::Noun | KEduVocWordFlag::Neuter);
216  noun->appendChildContainer(nounChild);
217 
218  KEduVocWordType *verb = new KEduVocWordType(i18n("Verb"), root);
219  verb->setWordType(KEduVocWordFlag::Verb);
220  root->appendChildContainer(verb);
221 
222  KEduVocWordType *adjective = new KEduVocWordType(i18n("Adjective"), root);
223  adjective->setWordType(KEduVocWordFlag::Adjective);
224  root->appendChildContainer(adjective);
225 
226  KEduVocWordType *adverb = new KEduVocWordType(i18n("Adverb"), root);
227  adverb->setWordType(KEduVocWordFlag::Adverb);
228  root->appendChildContainer(adverb);
229 
230  KEduVocWordType *conjunction = new KEduVocWordType(i18n("Conjunction"), root);
231  conjunction->setWordType(KEduVocWordFlag::Conjunction);
232  root->appendChildContainer(conjunction);
233 }
TestEntry::entry
KEduVocExpression * entry() const
Definition: testentry.cpp:149
WordCount::invalid
int invalid
Definition: utils.h:41
EntryFilter
Definition: entryfilter.h:31
Collection::enableAutoBackup
void enableAutoBackup(bool enable)
Enable/disable the timed auto backup.
Definition: collection.cpp:108
Collection::Collection
Collection(KEduVocDocument *doc, QObject *parent=0)
Definition: collection.cpp:58
prefs.h
Collection::documentChanged
void documentChanged(KEduVocDocument *newDocument)
Emitted when the document pointer is changed.
entryfilter.h
WordCount
Definition: utils.h:30
Collection::~Collection
~Collection()
Definition: collection.cpp:75
fetchGrammar
void fetchGrammar(KEduVocDocument *doc, int languageIndex)
Definition: collection.cpp:41
Collection::eduVocDocument
KEduVocDocument * eduVocDocument()
Definition: collection.cpp:91
QList::count
int count(const T &value) const
Collection::close
void close()
close the document
Definition: collection.cpp:160
QTimer
QObject
QList::isEmpty
bool isEmpty() const
WordCount::initialWords
int initialWords
Definition: utils.h:43
Collection::setTitle
void setTitle(const QString &title)
Definition: collection.cpp:101
QString
WordCount::totalWords
int totalWords
Definition: utils.h:45
QTimer::stop
void stop()
WordCount::pregrades
int pregrades[KV_MAX_GRADE+1]
Definition: utils.h:40
Prefs::backupTime
static int backupTime()
Get Time interval between two automatic backups.
Definition: prefs.h:222
Collection::numDueWords
void numDueWords(WordCount &wc)
Definition: collection.cpp:123
QTimer::start
void start(int msec)
collection.h
WordCount::grades
int grades[KV_MAX_GRADE+1]
Definition: utils.h:39
TestEntry::languageTo
int languageTo() const
Definition: testentry.cpp:114
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
EntryFilter::entries
QList< TestEntry * > entries(bool showDialog=true)
Returns the list of test entries after filtering out invalid entries according to the settings...
Definition: entryfilter.cpp:71
TestEntry
Definition: testentry.h:22
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:15:56 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
  • 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