// other lessons in the tree
KEduVocContainer *m_parentContainer;
- QList<KEduVocContainer*> m_childContainers;
+ QList < KEduVocContainer * > m_childContainers;
EnumContainerType m_type;
+ QSet < KEduVocExpression* > m_childLessonEntries;
+
/// Image url
KUrl m_imageUrl;
};
{
d->m_childContainers.append(child);
child->d->m_parentContainer = this;
+
+ d->m_childLessonEntries.unite(child->entries(Recursive).toSet());
}
KEduVocContainer * KEduVocContainer::childContainer(int row)
{
kDebug() << "Delete of container - check entry deletion!";
delete d->m_childContainers.takeAt(row);
+
+ resetChildLessonEntries();
}
void KEduVocContainer::removeChildContainer(int row)
foreach(KEduVocExpression *entry, entries() ) {
entry->removeTranslation( translation );
}
+ if (parent()) {
+ parent()->resetChildLessonEntries();
+ }
}
QList< KEduVocExpression * > KEduVocContainer::entriesRecursive()
child->d->m_parentContainer = this;
}
-
+void KEduVocContainer::resetChildLessonEntries()
+{
+ d->m_childLessonEntries.clear();
+ foreach(KEduVocContainer *childContainer, d->m_childContainers) {
+ d->m_childLessonEntries.unite(childContainer->entries(Recursive).toSet());
+ }
+}
#include "keduvocexpression.h"
+#include <KDebug>
+
#include <QtCore/QList>
#include <QtCore/QSet>
QList<KEduVocTranslation*> m_translations;
};
-
KEduVocWordType::KEduVocWordType(const QString& name, KEduVocWordType *parent)
: d( new Private ), KEduVocContainer(name, WordType, parent)
{
d->m_wordType = General;
}
-KEduVocWordType::KEduVocWordType( const KEduVocWordType &other )
- : d( new Private ), KEduVocContainer(other)
-{
- d->m_translations = other.d->m_translations;
-}
+// KEduVocWordType::KEduVocWordType( const KEduVocWordType &other )
+// : d( new Private ), KEduVocContainer(other)
+// {
+// d->m_translations = other.d->m_translations;
+// }
KEduVocWordType::~KEduVocWordType()
{
+ foreach(KEduVocTranslation* translation, d->m_translations) {
+ translation->setWordType(0);
+ }
delete d;
}
-
QList<KEduVocExpression*> KEduVocWordType::entries(EnumEntriesRecursive recursive)
{
if (recursive == Recursive) {
void KEduVocWordType::removeTranslation(KEduVocTranslation* translation)
{
- d->m_translations.removeAt( d->m_translations.indexOf(translation) );
+ d->m_translations.removeAt( d->m_translations.indexOf(translation));
}
KEduVocTranslation * KEduVocWordType::translation(int row)
}
return 0;
}
+
/*
- Copyright 2007 Frederik Gladhorn <frederik.gladhorn@kdemail.net>
+ Copyright 2007-2008 Frederik Gladhorn <frederik.gladhorn@kdemail.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
USA
*/
-#include "../keduvocdocument.h"
-#include "../keduvoclesson.h"
-#include "../keduvocexpression.h"
-#include "../keduvoctranslation.h"
-#include "../keduvocconjugation.h"
-#include "../keduvocdeclination.h"
+#include "keduvocdocument.h"
+#include "keduvoclesson.h"
+#include "keduvocexpression.h"
+#include "keduvoctranslation.h"
+#include "keduvocconjugation.h"
+#include "keduvocdeclination.h"
+#include "keduvocwordtype.h"
+
#include <KTemporaryFile>
private slots:
void testDocumentAboutInfo();
void testLessons();
+ void testWordTypes();
};
void KEduVocDocumentValidatorTest::testDocumentAboutInfo()
// QCOMPARE(doc.lesson(2), lesson2);
}
+
+void KEduVocDocumentValidatorTest::testWordTypes()
+{
+ KEduVocDocument doc;
+ // create doc - has no word types yet
+ QCOMPARE(doc.wordTypeContainer()->childContainerCount(), 0);
+
+ KEduVocWordType *noun;
+ KEduVocWordType *nounMale;
+ KEduVocWordType *nounFemale;
+ KEduVocWordType *verb;
+
+ noun = new KEduVocWordType("Noun", doc.wordTypeContainer());
+ doc.wordTypeContainer()->appendChildContainer(noun);
+ QCOMPARE(doc.wordTypeContainer()->childContainerCount(), 1);
+ nounMale = new KEduVocWordType("Male", noun);
+ noun->appendChildContainer(nounMale);
+ nounFemale = new KEduVocWordType("Female", noun);
+ noun->appendChildContainer(nounFemale);
+ verb = new KEduVocWordType("Verb", doc.wordTypeContainer());
+ doc.wordTypeContainer()->appendChildContainer(verb);
+ QCOMPARE(doc.wordTypeContainer()->childContainerCount(), 2);
+ QCOMPARE(doc.wordTypeContainer()->childContainer(0)->childContainerCount(), 2);
+
+ // create some entries
+ for(int i = 0; i < 20; i++) {
+ KEduVocExpression *e =
+ new KEduVocExpression(QStringList() << QString("lang1 %1").arg(i) << QString("lang2 %1").arg(i));
+ doc.lesson()->appendEntry(e);
+ e->translation(0)->setWordType(noun);
+ e->translation(1)->setWordType(noun);
+ }
+ QCOMPARE(doc.lesson()->entryCount(), 20);
+ QCOMPARE(noun->entryCount(), 20);
+ doc.lesson()->entry(0)->translation(0)->setWordType(verb);
+ // translation 1 is still noun, so it needs to be in both now
+ QCOMPARE(noun->entryCount(), 20);
+ QCOMPARE(verb->entryCount(), 1);
+ doc.lesson()->entry(0)->translation(1)->setWordType(verb);
+ QCOMPARE(noun->entryCount(), 19);
+ QCOMPARE(verb->entryCount(), 1);
+
+ // delete word type
+ doc.wordTypeContainer()->deleteChildContainer(1);
+ // the word type is set to 0 when removed
+ QVERIFY(doc.lesson()->entry(0)->translation(0)->wordType() == 0);
+ QVERIFY(doc.lesson()->entry(0)->translation(1)->wordType() == 0);
+ QCOMPARE(doc.wordTypeContainer()->childContainerCount(), 1);
+}
+
QTEST_KDEMAIN_CORE( KEduVocDocumentValidatorTest )
#include "keduvocdocumentvalidatortest.moc"