summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--archivemodel.cpp16
-rw-r--r--archivemodel.h1
-rw-r--r--smtreeitem.cpp27
-rw-r--r--smtreeitem.h4
4 files changed, 19 insertions, 29 deletions
diff --git a/archivemodel.cpp b/archivemodel.cpp
index 75f6509..b4a1e2b 100644
--- a/archivemodel.cpp
+++ b/archivemodel.cpp
@@ -976,11 +976,25 @@ ArchiveCollector::ArchiveCollector(int numFields, int order, QObject *parent) :
SmTreeItem *ArchiveCollector::rootItem(){
mAccessMx.lock();
- SmTreeItem *retval = new SmTreeItem(*mRootItem);
+ SmTreeItem *retval = copyRecursive(mRootItem, 0);
mAccessMx.unlock();
return retval;
}
+SmTreeItem *ArchiveCollector::copyRecursive(SmTreeItem *item, SmTreeItem *parent){
+ SmTreeItem *newItem = new SmTreeItem(*item);
+ newItem->setParent(parent);
+ if(parent){
+ parent->appendChild(newItem);
+ }
+ if(item->childCount()){
+ for(int i = 0; i < item->childCount(); ++i){
+ copyRecursive(item->child(i), newItem);
+ }
+ }
+ return newItem;
+}
+
void ArchiveCollector::setCancelled(bool cancel){
QMutexLocker l(&mCancelledMx);
mCancelled = cancel;
diff --git a/archivemodel.h b/archivemodel.h
index 83f8513..12b76be 100644
--- a/archivemodel.h
+++ b/archivemodel.h
@@ -130,6 +130,7 @@ class ArchiveCollector : public QThread {
virtual void run();
private:
+ SmTreeItem *copyRecursive(SmTreeItem *item, SmTreeItem *parent);
void populateBySeriesName();
void populateByGenre();
void populateByActor();
diff --git a/smtreeitem.cpp b/smtreeitem.cpp
index 4548655..a8e183c 100644
--- a/smtreeitem.cpp
+++ b/smtreeitem.cpp
@@ -21,32 +21,7 @@ SmTreeItem::SmTreeItem(int rows, SmTreeItem *parent) : mParent(parent){
SmTreeItem::SmTreeItem(const SmTreeItem &other){
mParent = 0;
mData = other.mData;
- QVector<SmTreeItem*> remaining;
- QHash<const SmTreeItem*, SmTreeItem*> parents;
- parents.insert(&other, this);
- const SmTreeItem *cur = &other;
- for(int i = 0; i < cur->childCount(); ++i){
- remaining << cur->child(i);
- }
- while(cur){
- cur = remaining.last();
- remaining.pop_back();
- for(int i = 0; i < cur->childCount(); ++i){
- remaining << cur->child(i);
- }
- if(remaining.isEmpty()){
- break;
- }
- SmTreeItem *newItem = new SmTreeItem(mData.size());
- for(int i = 0; i < cur->columnCount(); ++i){
- newItem->setData(i, cur->data(i));
- }
- SmTreeItem *newParent = parents.value(cur->parent());
- newParent->appendChild(newItem);
- newItem->setParent(newParent);
- parents.insert(cur, newItem);
-
- }
+ mForegroundColor = other.mForegroundColor;
}
SmTreeItem::~SmTreeItem(){
diff --git a/smtreeitem.h b/smtreeitem.h
index a048714..4e5265c 100644
--- a/smtreeitem.h
+++ b/smtreeitem.h
@@ -15,7 +15,6 @@ class SmTreeItem {
public:
SmTreeItem(const QList<QVariant> &data, SmTreeItem *parent = 0);
SmTreeItem(int rows, SmTreeItem *parent = 0);
- SmTreeItem(const SmTreeItem &other);
~SmTreeItem();
void appendChild(SmTreeItem *child);
SmTreeItem *child(int row) const;
@@ -31,9 +30,10 @@ class SmTreeItem {
void setForegroundColor(const QVariant &data);
bool insertChild(int where, SmTreeItem *child);
bool removeChild(int where, bool deleteChild = true);
-
+ friend class ArchiveCollector;
private:
+ SmTreeItem(const SmTreeItem &other);
QList<SmTreeItem*> mChildren;
QList<QVariant> mData;
QVariant mForegroundColor;