summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--archivemodel.cpp25
-rw-r--r--archivemodel.h2
-rw-r--r--archiveview.cpp29
-rw-r--r--archiveview.h7
-rw-r--r--shemov.cpp4
5 files changed, 66 insertions, 1 deletions
diff --git a/archivemodel.cpp b/archivemodel.cpp
index c317c32..de95328 100644
--- a/archivemodel.cpp
+++ b/archivemodel.cpp
@@ -57,6 +57,31 @@ QVariant ArchiveModel::data(const QModelIndex &index, int role) const{
return SmTreeModel::data(index, role);
}
+QStringList ArchiveModel::indexToPath(const QModelIndex &idx) const {
+ QStringList retval;
+ SmTreeItem *item = itemAt(idx);
+ while (item) {
+ retval << item->data(Name).toString();
+ item = item->parent();
+ }
+ std::reverse(retval.begin(), retval.end());
+ return retval;
+}
+
+QModelIndexList ArchiveModel::pathToIndex(const QStringList &path) const {
+ QModelIndexList retval;
+ QModelIndex parentIdx = QModelIndex();
+ for(int i = 0; i < path.count(); ++i){
+ QString curItem = path.at(i);
+ QModelIndex found = find(curItem, Name, parentIdx);
+ if(found.isValid()){
+ retval << found;
+ parentIdx = found;
+ }
+ }
+ return retval;
+}
+
void ArchiveModel::setOrder(int order) {
mOrder = order;
SmTreeItem *rootItem = new SmTreeItem(NumFields);
diff --git a/archivemodel.h b/archivemodel.h
index c07fc7b..0f2eea7 100644
--- a/archivemodel.h
+++ b/archivemodel.h
@@ -29,6 +29,8 @@ class ArchiveModel : public SmTreeModel {
const QHash<QString, int> availableOrdersHash() const { return mAvailableOrders; }
ArchiveCollector *collector() { return mCollector; }
virtual QVariant data(const QModelIndex &index, int role) const;
+ QStringList indexToPath(const QModelIndex &idx) const;
+ QModelIndexList pathToIndex(const QStringList &path) const;
public slots:
void setOrder(int order);
diff --git a/archiveview.cpp b/archiveview.cpp
index dbc3c39..9edfd0b 100644
--- a/archiveview.cpp
+++ b/archiveview.cpp
@@ -39,6 +39,8 @@ ArchiveView::ArchiveView(QWidget *parent) : QWidget(parent), mConstructing(true)
mTree->setColumnHidden(ArchiveModel::Subtitle, true);
mTree->setColumnHidden(ArchiveModel::Count, true);
mTree->resizeColumnToContents(ArchiveModel::Name);
+ connect(mTree, SIGNAL(expanded(QModelIndex)), this, SLOT(expandItem(QModelIndex)));
+ connect(mTree, SIGNAL(collapsed(QModelIndex)), this, SLOT(collapseItem(QModelIndex)));
QString sortOrderName = s.value("archivemodel/sortorder", "Series Name").toString();
mSortOrder = new QComboBox;
@@ -89,12 +91,30 @@ 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);
}
QWidget *ArchiveView::progressDialog(){
return qobject_cast<QWidget *>(mProgress);
}
+void ArchiveView::setExpanded(){
+ QSettings s;
+ QVariantList expanded = s.value("archivemodel/expandeditems").toList();
+ foreach(QVariant pathList, expanded){
+ QStringList path = pathList.toStringList();
+ QModelIndexList expand = mArchiveModel->pathToIndex(path);
+ foreach(QModelIndex idx, expand){
+ mTree->expand(mProxy->mapFromSource(idx));
+ }
+ }
+}
+
void ArchiveView::setFilter(){
QString filter = mFilter->text();
mProxy->setFilter(filter, currentSortOrder());
@@ -116,6 +136,15 @@ void ArchiveView::collectorStarted(){
void ArchiveView::collectorFinished(){
mProgress->hide();
+ setExpanded();
+}
+
+void ArchiveView::expandItem(const QModelIndex &idx){
+ mExpandedItems << QPersistentModelIndex(idx);
+}
+
+void ArchiveView::collapseItem(const QModelIndex &idx){
+ mExpandedItems.removeAll(QPersistentModelIndex(idx));
}
ArchiveTree::ArchiveTree(QWidget *parent) : SmTreeView(parent) {
diff --git a/archiveview.h b/archiveview.h
index a62fd66..33969d9 100644
--- a/archiveview.h
+++ b/archiveview.h
@@ -35,13 +35,19 @@ class ArchiveView : public QWidget {
// this is needed for displaying the progress dialog in the
// center of the main window...
void setConstructingDone() { mConstructing = false; }
+ ArchiveModel *archiveModel() { return mArchiveModel; }
QWidget *progressDialog();
+ public slots:
+ void setExpanded();
+
private slots:
void setFilter();
void clearFilter();
void collectorStarted();
void collectorFinished();
+ void expandItem(const QModelIndex &idx);
+ void collapseItem(const QModelIndex &idx);
private:
QComboBox *mSortOrder;
@@ -51,6 +57,7 @@ class ArchiveView : public QWidget {
ArchiveModel *mArchiveModel;
ArchiveProxy *mProxy;
ArchiveProgressDialog *mProgress;
+ QList<QPersistentModelIndex> mExpandedItems;
bool mConstructing;
};
diff --git a/shemov.cpp b/shemov.cpp
index 1baa7d5..0144a7d 100644
--- a/shemov.cpp
+++ b/shemov.cpp
@@ -142,7 +142,9 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla
mPicWidget->readSettings();
mArchive->setConstructingDone();
Helper::centerWidget(mArchive->progressDialog());
- mArchive->progressDialog()->show();
+ if(mArchive->archiveModel()->collector()->isRunning()){
+ mArchive->progressDialog()->show();
+ }
Helper::centerWidget(picViewer);
}