diff options
-rw-r--r-- | archivemodel.cpp | 3 | ||||
-rw-r--r-- | archivemodel.h | 2 | ||||
-rw-r--r-- | archiveview.cpp | 52 | ||||
-rw-r--r-- | archiveview.h | 5 | ||||
-rw-r--r-- | shemov.cpp | 1 |
5 files changed, 47 insertions, 16 deletions
diff --git a/archivemodel.cpp b/archivemodel.cpp index 67b875b..b0a6941 100644 --- a/archivemodel.cpp +++ b/archivemodel.cpp @@ -214,6 +214,7 @@ void ArchiveModel::setOrder(int order) { SmTreeItem *rootItem = readCache(mOrder); if(rootItem){ setRoot(rootItem); + emit collectorDone(); } } @@ -236,7 +237,9 @@ void ArchiveModel::collectorFinished(QObject *thread){ SmTreeItem *item = t->rootItem(); int sortOrder = t->sortOrder(); if(sortOrder == mOrder){ + emit collectorAboutToBeDone(); setRoot(item); + emit collectorDone(); } writeCache(sortOrder, item); QString sortOrderName = mAvailableOrders.key(sortOrder); diff --git a/archivemodel.h b/archivemodel.h index c24c130..e4cfc5a 100644 --- a/archivemodel.h +++ b/archivemodel.h @@ -40,6 +40,8 @@ class ArchiveModel : public SmTreeModel { void needRefresh(); void databaseError(const QString &error); void message(const QString &msg); + void collectorAboutToBeDone(); + void collectorDone(); public slots: void setOrder(int order); diff --git a/archiveview.cpp b/archiveview.cpp index 166be89..82b8703 100644 --- a/archiveview.cpp +++ b/archiveview.cpp @@ -50,6 +50,7 @@ ArchiveView::ArchiveView(QWidget *parent) : QWidget(parent), mConstructing(true) // item in the list, nothing will happen otherwise! mArchiveModel->setOrder(sortOrderName); connect(mSortOrder, SIGNAL(currentIndexChanged(QString)), mArchiveModel, SLOT(setOrder(QString))); + connect(mArchiveModel, SIGNAL(collectorDone()), this, SLOT(expandedItems())); QLabel *l1 = new QLabel(tr("Filter")); mFilter = new QLineEdit; @@ -87,31 +88,41 @@ int ArchiveView::currentSortOrder() const { return mArchiveModel->availableOrdersHash().value(mSortOrder->currentText()); } +void ArchiveView::readSettings(){ + QSettings s; + QVariantList list; + list = s.value("archivemodel/expandedgenres").toList(); + mExpandedItems[ArchiveModel::Genre] = list; + list = s.value("archivemodel/expandedactors").toList(); + mExpandedItems[ArchiveModel::Actor] = list; + list = s.value("archivemodel/expandedseries").toList(); + mExpandedItems[ArchiveModel::SeriesName] = list; + expandedItems(); +} + void ArchiveView::writeSettings() { QSettings s; s.setValue("archivemodel/sortorder", mSortOrder->currentText()); s.setValue("archivemodel/filter", mFilter->text()); - QVariantList expandedItems; - foreach(QPersistentModelIndex idx, mExpandedItems){ - QStringList path = mArchiveModel->indexToPath(mProxy->mapToSource(idx)); - expandedItems << path; - } - s.setValue("archivemodel/expandeditems", expandedItems); + s.setValue("archivemodel/expandedgenres", mExpandedItems.value(ArchiveModel::Genre)); + s.setValue("archivemodel/expandedactors", mExpandedItems.value(ArchiveModel::Actor)); + s.setValue("archivemodel/expandedseries", mExpandedItems.value(ArchiveModel::SeriesName)); + } void ArchiveView::refreshArchive(){ writeSettings(); mArchiveModel->refresh(); + expandedItems(); } -void ArchiveView::setExpanded(){ - QSettings s; - QVariantList expanded = s.value("archivemodel/expandeditems").toList(); - foreach(QVariant pathList, expanded){ - QStringList path = pathList.toStringList(); +void ArchiveView::expandedItems(){ + QVariantList list = mExpandedItems.value(currentSortOrder()); + foreach(QVariant p, list){ + QStringList path = p.toStringList(); QModelIndexList expand = mArchiveModel->pathToIndex(path); foreach(QModelIndex idx, expand){ - mTree->expand(mProxy->mapFromSource(idx)); + mTree->setExpanded(mProxy->mapFromSource(idx), true); } } } @@ -133,11 +144,24 @@ void ArchiveView::showDatabaseError(const QString &errorMsg){ } void ArchiveView::expandItem(const QModelIndex &idx){ - mExpandedItems << QPersistentModelIndex(idx); + QModelIndex realIdx = mProxy->mapToSource(idx); + if(realIdx.isValid()){ + QStringList path = mArchiveModel->indexToPath(realIdx); + QVariantList list = mExpandedItems.value(currentSortOrder()); + if(!list.contains(path)){ + list << mArchiveModel->indexToPath(realIdx); + } + mExpandedItems[currentSortOrder()] = list; + } } void ArchiveView::collapseItem(const QModelIndex &idx){ - mExpandedItems.removeAll(QPersistentModelIndex(idx)); + QModelIndex realIdx = mProxy->mapToSource(idx); + if(realIdx.isValid()){ + QVariantList list = mExpandedItems.value(currentSortOrder()); + list.removeAll(mArchiveModel->indexToPath(realIdx)); + mExpandedItems[currentSortOrder()] = list; + } } ArchiveTree::ArchiveTree(QWidget *parent) : SmTreeView(parent) {} diff --git a/archiveview.h b/archiveview.h index eac7f46..27bae35 100644 --- a/archiveview.h +++ b/archiveview.h @@ -31,13 +31,14 @@ class ArchiveView : public QWidget { public: explicit ArchiveView(QWidget *parent = 0); int currentSortOrder() const; + void readSettings(); void writeSettings(); ArchiveModel *archiveModel() { return mArchiveModel; } ArchiveTree *archiveTree() { return mTree; } public slots: void refreshArchive(); - void setExpanded(); + void expandedItems(); private slots: void setFilter(); @@ -54,7 +55,7 @@ class ArchiveView : public QWidget { ArchiveModel *mArchiveModel; ArchiveProxy *mProxy; ArchiveProgressDialog *mProgress; - QList<QPersistentModelIndex> mExpandedItems; + QHash<int, QVariantList> mExpandedItems; bool mConstructing; }; @@ -80,6 +80,7 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla mArchive = new ArchiveView; mTab->addTab(mArchive, "Experimental"); connect(mArchive->archiveModel(), SIGNAL(message(QString)), this, SLOT(statusbarMessage(QString))); + mArchive->readSettings(); //pictures splash.showMessage(tr("Creating Picture Archive..."), Qt::AlignHCenter, Qt::yellow); |