summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--archivemodel.cpp3
-rw-r--r--archivemodel.h2
-rw-r--r--archiveview.cpp52
-rw-r--r--archiveview.h5
-rw-r--r--shemov.cpp1
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;
};
diff --git a/shemov.cpp b/shemov.cpp
index eeeddbf..d1f5b5b 100644
--- a/shemov.cpp
+++ b/shemov.cpp
@@ -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);