void BaseFileFind::runSearch(SearchResult *search) { FileFindParameters parameters = search->userData().value<FileFindParameters>(); CountingLabel *label = new CountingLabel; connect(search, &SearchResult::countChanged, label, &CountingLabel::updateCount); CountingLabel *statusLabel = new CountingLabel; connect(search, &SearchResult::countChanged, statusLabel, &CountingLabel::updateCount); SearchResultWindow::instance()->popup(IOutputPane::Flags(IOutputPane::ModeSwitch|IOutputPane::WithFocus)); QFutureWatcher<FileSearchResultList> *watcher = new QFutureWatcher<FileSearchResultList>(); d->m_watchers.insert(watcher, search); watcher->setPendingResultsLimit(1); connect(watcher, &QFutureWatcherBase::resultReadyAt, this, &BaseFileFind::displayResult); connect(watcher, &QFutureWatcherBase::finished, this, &BaseFileFind::searchFinished); if (parameters.flags & FindRegularExpression) { watcher->setFuture(Utils::findInFilesRegExp(parameters.text, files(parameters.nameFilters, parameters.additionalParameters), textDocumentFlagsForFindFlags(parameters.flags), TextDocument::openedTextDocumentContents())); } else { watcher->setFuture(Utils::findInFiles(parameters.text, files(parameters.nameFilters, parameters.additionalParameters), textDocumentFlagsForFindFlags(parameters.flags), TextDocument::openedTextDocumentContents())); } FutureProgress *progress = ProgressManager::addTask(watcher->future(), tr("Searching"), Constants::TASK_SEARCH); progress->setWidget(label); progress->setStatusBarWidget(statusLabel); connect(progress, &FutureProgress::clicked, search, &SearchResult::popup); }
void ProgressView::slotFinished() { FutureProgress *progress = qobject_cast<FutureProgress *>(sender()); QTC_ASSERT(progress, return); if (m_keep.contains(progress) && !m_keep.value(progress) && !progress->hasError()) removeTask(progress); removeOldTasks(m_type.value(progress), true); }
void ProgressView::slotRemoveTask() { FutureProgress *progress = qobject_cast<FutureProgress *>(sender()); TOTEM_ASSERT(progress, return); QString type = progress->type(); removeTask(progress); removeOldTasks(type, true); }
FutureProgress *ProgressView::addTask(const QFuture<void> &future, const QString &title, const QString &type, ProgressManager::PersistentType persistency) { removeOldTasks(type); if (m_taskList.size() == 3) removeOneOldTask(); FutureProgress *progress = new FutureProgress(this); progress->setTitle(title); progress->setFuture(future); m_layout->insertWidget(0, progress); m_taskList.append(progress); m_type.insert(progress, type); m_keep.insert(progress, (persistency == ProgressManager::KeepOnFinish)); connect(progress, SIGNAL(finished()), this, SLOT(slotFinished())); return progress; }
FutureProgress *ProgressView::addTask(const QFuture<void> &future, const QString &title, const QString &type, ProgressManager::ProgressFlags flags) { removeOldTasks(type); if (m_taskList.size() == 3) removeOneOldTask(); FutureProgress *progress = new FutureProgress(this); progress->setTitle(title); progress->setFuture(future); m_layout->insertWidget(0, progress); m_taskList.append(progress); progress->setType(type); if (flags.testFlag(ProgressManager::KeepOnFinish)) { progress->setKeepOnFinish(FutureProgress::KeepOnFinishTillUserInteraction); } else { progress->setKeepOnFinish(FutureProgress::HideOnFinish); } connect(progress, SIGNAL(removeMe()), this, SLOT(slotRemoveTask())); return progress; }
FutureProgress *ProgressManagerPrivate::doAddTask(const QFuture<void> &future, const QString &title, Id type, ProgressFlags flags) { // watch QFutureWatcher<void> *watcher = new QFutureWatcher<void>(); m_runningTasks.insert(watcher, type); connect(watcher, &QFutureWatcherBase::progressRangeChanged, this, &ProgressManagerPrivate::updateSummaryProgressBar); connect(watcher, &QFutureWatcherBase::progressValueChanged, this, &ProgressManagerPrivate::updateSummaryProgressBar); connect(watcher, &QFutureWatcherBase::finished, this, &ProgressManagerPrivate::taskFinished); watcher->setFuture(future); // handle application task if (flags & ShowInApplicationIcon) { if (m_applicationTask) disconnectApplicationTask(); m_applicationTask = watcher; setApplicationProgressRange(future.progressMinimum(), future.progressMaximum()); setApplicationProgressValue(future.progressValue()); connect(m_applicationTask, &QFutureWatcherBase::progressRangeChanged, this, &ProgressManagerPrivate::setApplicationProgressRange); connect(m_applicationTask, &QFutureWatcherBase::progressValueChanged, this, &ProgressManagerPrivate::setApplicationProgressValue); setApplicationProgressVisible(true); } // create FutureProgress and manage task list removeOldTasks(type); if (m_taskList.size() == 10) removeOneOldTask(); FutureProgress *progress = new FutureProgress; progress->setTitle(title); progress->setFuture(future); m_progressView->addProgressWidget(progress); m_taskList.append(progress); progress->setType(type); if (flags.testFlag(ProgressManager::KeepOnFinish)) progress->setKeepOnFinish(FutureProgress::KeepOnFinishTillUserInteraction); else progress->setKeepOnFinish(FutureProgress::HideOnFinish); connect(progress, &FutureProgress::hasErrorChanged, this, &ProgressManagerPrivate::updateSummaryProgressBar); connect(progress, &FutureProgress::removeMe, this, &ProgressManagerPrivate::slotRemoveTask); connect(progress, &FutureProgress::fadeStarted, this, &ProgressManagerPrivate::updateSummaryProgressBar); connect(progress, &FutureProgress::statusBarWidgetChanged, this, &ProgressManagerPrivate::updateStatusDetailsWidget); updateStatusDetailsWidget(); emit taskStarted(type); return progress; }