diff options
author | Arno <am@disconnect.de> | 2013-06-01 22:52:19 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2013-06-01 22:52:19 +0200 |
commit | 6fec376f7f44145efa509668927a0179c8ffa65e (patch) | |
tree | 49bbc7fe883085ff39e24b5f12fbef25d8cf48c5 /archiveview.cpp | |
parent | 6e92f5deb39aed43d72d8a64733f5b11e1650d5d (diff) | |
download | SheMov-6fec376f7f44145efa509668927a0179c8ffa65e.tar.gz SheMov-6fec376f7f44145efa509668927a0179c8ffa65e.tar.bz2 SheMov-6fec376f7f44145efa509668927a0179c8ffa65e.zip |
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 :)
Diffstat (limited to 'archiveview.cpp')
-rw-r--r-- | archiveview.cpp | 44 |
1 files changed, 41 insertions, 3 deletions
diff --git a/archiveview.cpp b/archiveview.cpp index def3609..dbc3c39 100644 --- a/archiveview.cpp +++ b/archiveview.cpp @@ -6,6 +6,7 @@ */ #include <QComboBox> +#include <QDialog> #include <QHBoxLayout> #include <QLabel> #include <QLineEdit> @@ -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<ArchiveModel*>(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<QWidget *>(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("<b>Gathering data... please wait!</b><br/><ul><li>%1</li></ul>")).arg(msg); + mMessage->setText(message); +} + ArchiveFiles::ArchiveFiles(QWidget *parent) : SmTreeView(parent){ } |