diff options
author | Arno <am@disconnect.de> | 2013-06-23 18:51:32 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2013-06-23 18:51:32 +0200 |
commit | ae1582fa29de82c28872f826fa6f8b154bea88dc (patch) | |
tree | 1b30e65a0139ea56df0be925cf7eac2994b76102 /archiveview.cpp | |
parent | 1e247c6fea51dab6815e3a15f22cd08e56039e89 (diff) | |
download | SheMov-ae1582fa29de82c28872f826fa6f8b154bea88dc.tar.gz SheMov-ae1582fa29de82c28872f826fa6f8b154bea88dc.tar.bz2 SheMov-ae1582fa29de82c28872f826fa6f8b154bea88dc.zip |
Keep state of expanded items
Well, sounds easier as it is to keep track of expanded items, but
finally I got it!
Diffstat (limited to 'archiveview.cpp')
-rw-r--r-- | archiveview.cpp | 52 |
1 files changed, 38 insertions, 14 deletions
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) {} |