EnumContainerType m_type;
- QSet < KEduVocExpression* > m_childLessonEntries;
+ QList < KEduVocExpression* > m_childLessonEntries;
+ bool m_childLessonEntriesValid;
/// Image url
KUrl m_imageUrl;
d->m_name = name;
d->m_inPractice = true;
d->m_type = type;
+ d->m_childLessonEntriesValid = false;
}
KEduVocContainer::KEduVocContainer( const KEduVocContainer &other )
d->m_childContainers.append(child);
child->d->m_parentContainer = this;
- d->m_childLessonEntries.unite(child->entries(Recursive).toSet());
+ invalidateChildLessonEntries();
}
KEduVocContainer * KEduVocContainer::childContainer(int row)
kDebug() << "Delete of container - check entry deletion!";
delete d->m_childContainers.takeAt(row);
- resetChildLessonEntries();
+ invalidateChildLessonEntries();
}
void KEduVocContainer::removeChildContainer(int row)
{
d->m_childContainers.removeAt(row);
+ invalidateChildLessonEntries();
}
bool KEduVocContainer::operator==(const KEduVocContainer &other)
{
return d->m_name == other.d->m_name &&
- d->m_inPractice == other.d->m_inPractice;;
+ d->m_inPractice == other.d->m_inPractice
+/// @todo make this return something useful
+ ;
}
void KEduVocContainer::setName( const QString &name )
foreach(KEduVocExpression *entry, entries() ) {
entry->removeTranslation( translation );
}
- if (parent()) {
- parent()->resetChildLessonEntries();
- }
}
QList< KEduVocExpression * > KEduVocContainer::entriesRecursive()
{
- QList< KEduVocExpression * > entryList = entries(NotRecursive);
- foreach(KEduVocContainer *childContainer, d->m_childContainers) {
- foreach(KEduVocExpression *childEntry, childContainer->entriesRecursive()) {
- if(!entryList.contains(childEntry)) {
- entryList.append(childEntry);
- }
- }
+ if (!d->m_childLessonEntriesValid) {
+ updateChildLessonEntries();
}
- return entryList;
+ return d->m_childLessonEntries;
}
QList< KEduVocContainer * > KEduVocContainer::childContainers()
return d->m_parentContainer;
}
-// KEduVocContainer * KEduVocContainer::childContainer(const QString & name)
-// {
-// for(int i = 0; i<d->m_childContainers.count(); i++){
-// if(d->m_childContainers.value(i)->name() == name) {
-// return d->m_childContainers[i];
-// }
-// }
-// return 0;
-// }
-
void KEduVocContainer::setContainerType(KEduVocContainer::EnumContainerType type)
{
d->m_type = type;
d->m_imageUrl = url;
}
-
void KEduVocContainer::insertChildContainer(int row, KEduVocContainer * child)
{
d->m_childContainers.insert(row, child);
child->d->m_parentContainer = this;
+
+ invalidateChildLessonEntries();
}
-void KEduVocContainer::resetChildLessonEntries()
+void KEduVocContainer::updateChildLessonEntries()
{
- d->m_childLessonEntries.clear();
+ QSet < KEduVocExpression* > entriesRecursive = entries().toSet();
+
foreach(KEduVocContainer *childContainer, d->m_childContainers) {
- d->m_childLessonEntries.unite(childContainer->entries(Recursive).toSet());
+ entriesRecursive.unite(childContainer->entries(Recursive).toSet());
+ }
+ d->m_childLessonEntries = entriesRecursive.toList();
+ d->m_childLessonEntriesValid = true;
+}
+
+void KEduVocContainer::invalidateChildLessonEntries()
+{
+ d->m_childLessonEntriesValid = false;
+ // propagate to parent
+ if (d->m_parentContainer) {
+ d->m_parentContainer->invalidateChildLessonEntries();
}
}
delete d;
}
-
QList<KEduVocExpression*> KEduVocLesson::entries(EnumEntriesRecursive recursive)
{
if (recursive == Recursive) {
void KEduVocLesson::appendEntry(KEduVocExpression* entry)
{
+ Q_ASSERT(entry);
d->m_entries.append( entry );
entry->addLesson(this);
+ invalidateChildLessonEntries();
}
void KEduVocLesson::insertEntry(int index, KEduVocExpression * entry)
{
d->m_entries.insert( index, entry );
entry->addLesson(this);
+ invalidateChildLessonEntries();
}
void KEduVocLesson::removeEntry(KEduVocExpression* entry)
{
- d->m_entries.removeAt( d->m_entries.indexOf(entry) );
- entry->removeLesson(this);
+ if (entry) {
+ d->m_entries.removeAt( d->m_entries.indexOf(entry) );
+ entry->removeLesson(this);
+ invalidateChildLessonEntries();
+ }
}
KEduVocExpression * KEduVocLesson::entry(int row, EnumEntriesRecursive recursive)
return d->m_entries.value(row);
}
-void KEduVocLesson::randomizeEntries()
-{
- KRandomSequence randomSequence(QDateTime::currentDateTime().toTime_t());
- randomSequence.randomize( d->m_entries );
-}