From 6fec376f7f44145efa509668927a0179c8ffa65e Mon Sep 17 00:00:00 2001 From: Arno Date: Sat, 1 Jun 2013 22:52:19 +0200 Subject: Gather archive data in a thread Fetching data sometimes takes a long time, so do it in a QThread and show a progress dialog. Some kludges included :) --- archiveview.cpp | 44 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) (limited to 'archiveview.cpp') diff --git a/archiveview.cpp b/archiveview.cpp index def3609..dbc3c39 100644 --- a/archiveview.cpp +++ b/archiveview.cpp @@ -6,6 +6,7 @@ */ #include +#include #include #include #include @@ -17,9 +18,15 @@ #include "archiveview.h" #include "smglobals.h" -ArchiveView::ArchiveView(QWidget *parent) : QWidget(parent) { +ArchiveView::ArchiveView(QWidget *parent) : QWidget(parent), mConstructing(true) { QSettings s; mArchiveModel = static_cast(SmGlobals::instance()->model("ArchiveModel")); + connect(mArchiveModel->collector(), SIGNAL(started()), this, SLOT(collectorStarted())); + connect(mArchiveModel->collector(), SIGNAL(finished()), this, SLOT(collectorFinished())); + mProgress = new ArchiveProgressDialog(this); + mProgress->setHidden(true); + connect(mArchiveModel->collector(), SIGNAL(message(QString)), mProgress, SLOT(setMessage(QString))); + mProxy = new ArchiveProxy; mProxy->setSourceModel(mArchiveModel); mTree = new ArchiveTree; @@ -32,12 +39,16 @@ ArchiveView::ArchiveView(QWidget *parent) : QWidget(parent) { mTree->setColumnHidden(ArchiveModel::Subtitle, true); mTree->setColumnHidden(ArchiveModel::Count, true); mTree->resizeColumnToContents(ArchiveModel::Name); + QString sortOrderName = s.value("archivemodel/sortorder", "Series Name").toString(); mSortOrder = new QComboBox; mSortOrder->addItems(mArchiveModel->availableOrders()); - connect(mSortOrder, SIGNAL(currentIndexChanged(QString)), mArchiveModel, SLOT(setOrder(QString))); - connect(mSortOrder, SIGNAL(currentTextChanged(QString)), mArchiveModel, SLOT(setOrder(QString))); mSortOrder->setCurrentText(sortOrderName); + // this is _not_ redundant! when sortOrderName is the first + // item in the list, nothing will happen otherwise! + mArchiveModel->setOrder(sortOrderName); + connect(mSortOrder, SIGNAL(currentIndexChanged(QString)), mArchiveModel, SLOT(setOrder(QString))); + QLabel *l1 = new QLabel(tr("Filter")); mFilter = new QLineEdit; QString savedFilter = s.value("archivemodel/filter", QString()).toString(); @@ -80,6 +91,10 @@ void ArchiveView::writeSettings() { s.setValue("archivemodel/filter", mFilter->text()); } +QWidget *ArchiveView::progressDialog(){ + return qobject_cast(mProgress); +} + void ArchiveView::setFilter(){ QString filter = mFilter->text(); mProxy->setFilter(filter, currentSortOrder()); @@ -92,9 +107,32 @@ void ArchiveView::clearFilter(){ mTree->collapseAll(); } +void ArchiveView::collectorStarted(){ + if(mConstructing){ + return; + } + mProgress->show(); +} + +void ArchiveView::collectorFinished(){ + mProgress->hide(); +} + ArchiveTree::ArchiveTree(QWidget *parent) : SmTreeView(parent) { } +ArchiveProgressDialog::ArchiveProgressDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f){ + QHBoxLayout *mainLayout = new QHBoxLayout; + mMessage = new QLabel; + mainLayout->addWidget(mMessage); + setLayout(mainLayout); +} + +void ArchiveProgressDialog::setMessage(const QString &msg){ + QString message = QString(tr("Gathering data... please wait!
  • %1
")).arg(msg); + mMessage->setText(message); +} + ArchiveFiles::ArchiveFiles(QWidget *parent) : SmTreeView(parent){ } -- cgit v1.2.3-70-g09d2