From 532d93ae2f306335242f35f0562db76cba9f6035 Mon Sep 17 00:00:00 2001 From: Luca Beltrame Date: Sun, 22 Feb 2015 11:36:03 +0100 Subject: [PATCH] Call busy indicator from C++ Given the number of identical calls, most pool retrieval functions have been also aggregated in a single function, postDownload. --- src/mainwindow.cpp | 51 ++++++++++++++++++++++++++++++---------------- src/mainwindow.h | 1 + 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index e775b28..3845afd 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -117,6 +117,9 @@ DanbooruMainWindow::DanbooruMainWindow(QWidget *parent) m_view->rootObject()->setProperty("poolMode", QVariant(false)); ctxt->setContextProperty("infiniteScroll", DanbooruSettings::self()->infiniteScrolling()); + auto rootObj = m_view->rootObject(); + connect(m_service, SIGNAL(postDownloadFinished()), rootObj, SIGNAL(downloadFinished())); + statusBar()->addPermanentWidget(m_connectWidget); statusBar()->hide(); @@ -145,9 +148,9 @@ DanbooruMainWindow::DanbooruMainWindow(QWidget *parent) actionCollection()->action(QLatin1String("morePosts"))->setEnabled(true); if (DanbooruSettings::self()->autoDownload()) { - m_view->rootObject()->setProperty("poolMode", QVariant(false)); - m_service->setPostTags(QStringList()); - m_service->getPostList(); + + postDownload(QStringList(), false); + } m_connectWidget->hide(); statusBar()->hide(); @@ -173,6 +176,7 @@ DanbooruMainWindow::DanbooruMainWindow(QWidget *parent) auto pool = m_poolModel->poolAt(index.row()); clearModels(); m_view->rootObject()->setProperty("poolMode", QVariant(true)); + QMetaObject::invokeMethod(m_view->rootObject(), "downloadStarted"); m_service->getPool(pool->id()); }); @@ -182,11 +186,8 @@ DanbooruMainWindow::DanbooruMainWindow(QWidget *parent) QDockWidget* searchDockWidget = findChild(QLatin1String("SearchView")); searchDockWidget->hide(); - clearModels(); - m_service->setPostTags(m_searchWidget->selectedTags()); - m_view->rootObject()->setProperty("poolMode", QVariant(false)); - m_service->getPostList(); - m_service->getRelatedTags(m_searchWidget->selectedTags()); + postDownload(m_searchWidget->selectedTags(), true /* relatedTags */); + }); connect(m_searchWidget, &DanbooruSearchWidget::rejected, [this]() { @@ -348,7 +349,11 @@ void DanbooruMainWindow::setupActions() }); - connect(nextPageAction, &QAction::triggered, [this]() {m_service->nextPostPage();}); + connect(nextPageAction, &QAction::triggered, [this]() { + QMetaObject::invokeMethod(m_view->rootObject(), "downloadStarted"); + m_service->nextPostPage(); + } + ); } @@ -429,10 +434,8 @@ void DanbooruMainWindow::downloadPosts() return; } - clearModels(); - m_service->setPostTags(QStringList()); - m_view->rootObject()->setProperty("poolMode", QVariant(false)); - m_service->getPostList(); + + postDownload(QStringList(), false); } @@ -499,11 +502,8 @@ void DanbooruMainWindow::searchTag(const QModelIndex &index) QString tagName = m_tagModel->itemAt(index.row())->name(); QStringList tags = {tagName}; - clearModels(); - m_view->rootObject()->setProperty("poolMode", QVariant(false)); - m_service->getRelatedTags(tags); - m_service->setPostTags(tags); - m_service->getPostList(); + + postDownload(tags, true /* relatedTags */); } @@ -516,4 +516,19 @@ void DanbooruMainWindow::clearModels() } + +void DanbooruMainWindow::postDownload(const QStringList &tags, bool relatedTags) +{ + clearModels(); + m_view->rootObject()->setProperty("poolMode", QVariant(false)); + m_service->setPostTags(tags); + + if(relatedTags) { + m_service->getRelatedTags(tags); + } + + QMetaObject::invokeMethod(m_view->rootObject(), "downloadStarted"); + m_service->getPostList(); +} + } // namespace Danbooru diff --git a/src/mainwindow.h b/src/mainwindow.h index 86fb2ad..414fd29 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -93,6 +93,7 @@ private: void setupDockWidgets(); void setupConnections(); void clearModels(); + void postDownload(const QStringList& tags = QStringList(), bool relatedTags = false); private Q_SLOTS: void connectToBoard();