diff --git a/src/searchengine/searchengine.cpp b/src/searchengine/searchengine.cpp index fca7318df..cd287afe2 100644 --- a/src/searchengine/searchengine.cpp +++ b/src/searchengine/searchengine.cpp @@ -148,7 +148,8 @@ void SearchEngine::tab_changed(int t) {//when we switch from a tab that is not empty to another that is empty the download button //doesn't have to be available if (t>-1) {//-1 = no more tab - if (all_tab.at(tabWidget->currentIndex())->getCurrentSearchListModel()->rowCount()) { + currentSearchTab = all_tab.at(tabWidget->currentIndex()); + if (currentSearchTab->getCurrentSearchListModel()->rowCount()) { download_button->setEnabled(true); goToDescBtn->setEnabled(true); } @@ -156,6 +157,7 @@ void SearchEngine::tab_changed(int t) download_button->setEnabled(false); goToDescBtn->setEnabled(false); } + search_status->setText(currentSearchTab->status); } } @@ -194,6 +196,7 @@ void SearchEngine::on_search_button_clicked() { search_button->setText(tr("Search")); return; } + allTabsSetActiveState(false); } searchProcess->waitForFinished(); // Reload environment variables (proxy) @@ -207,6 +210,7 @@ void SearchEngine::on_search_button_clicked() { } // Tab Addition currentSearchTab = new SearchTab(this); + activeSearchTab = currentSearchTab; connect(currentSearchTab->header(), SIGNAL(sectionResized(int, int, int)), this, SLOT(saveResultsColumnsWidth())); all_tab.append(currentSearchTab); QString tabName = pattern; @@ -278,7 +282,8 @@ void SearchEngine::downloadTorrent(QString engine_url, QString torrent_url) { void SearchEngine::searchStarted() { // Update SearchEngine widgets - search_status->setText(tr("Searching...")); + activeSearchTab->status = tr("Searching..."); + search_status->setText(activeSearchTab->status); search_status->repaint(); search_button->setText(tr("Stop")); } @@ -298,8 +303,8 @@ void SearchEngine::readSearchOutput() { foreach (const QByteArray &line, lines_list) { appendSearchResult(QString::fromUtf8(line)); } - if (currentSearchTab) - currentSearchTab->getCurrentLabel()->setText(tr("Results")+QString::fromUtf8(" (")+QString::number(nb_search_results)+QString::fromUtf8("):")); + if (activeSearchTab) + activeSearchTab->getCurrentLabel()->setText(tr("Results")+QString::fromUtf8(" (")+QString::number(nb_search_results)+QString::fromUtf8("):")); } void SearchEngine::downloadFinished(int exitcode, QProcess::ExitStatus) { @@ -412,7 +417,7 @@ void SearchEngine::updateNova() { // Slot called when search is Finished // Search can be finished for 3 reasons : // Error | Stopped by user | Finished normally -void SearchEngine::searchFinished(int exitcode,QProcess::ExitStatus) { +void SearchEngine::searchFinished(int exitcode, QProcess::ExitStatus) { if (searchTimeout->isActive()) { searchTimeout->stop(); } @@ -422,24 +427,28 @@ void SearchEngine::searchFinished(int exitcode,QProcess::ExitStatus) { } if (exitcode) { #ifdef Q_OS_WIN - search_status->setText(tr("Search aborted")); + activeSearchTab->status = tr("Search aborted"); #else - search_status->setText(tr("An error occurred during search...")); + activeSearchTab->status = tr("An error occurred during search..."); #endif - }else{ + } else { if (search_stopped) { - search_status->setText(tr("Search aborted")); - }else{ + activeSearchTab->status = tr("Search aborted"); + } else { if (no_search_results) { - search_status->setText(tr("Search returned no results")); - }else{ - search_status->setText(tr("Search has finished")); + activeSearchTab->status = tr("Search returned no results"); + } else { + activeSearchTab->status = tr("Search has finished"); } } } - if (currentSearchTab) - currentSearchTab->getCurrentLabel()->setText(tr("Results", "i.e: Search results")+QString::fromUtf8(" (")+QString::number(nb_search_results)+QString::fromUtf8("):")); + if (activeSearchTab) + if (currentSearchTab == activeSearchTab) search_status->setText(activeSearchTab->status); + activeSearchTab->getCurrentLabel()->setText(tr("Results", "i.e: Search results")+QString::fromUtf8(" (")+QString::number(nb_search_results)+QString::fromUtf8("):")); + activeSearchTab->isActive = false; + activeSearchTab = 0; + search_button->setText(tr("Search")); } @@ -447,7 +456,7 @@ void SearchEngine::searchFinished(int exitcode,QProcess::ExitStatus) { // Line is in the following form : // file url | file name | file size | nb seeds | nb leechers | Search engine url void SearchEngine::appendSearchResult(const QString &line) { - if (!currentSearchTab) { + if (!activeSearchTab) { if (searchProcess->state() != QProcess::NotRunning) { searchProcess->terminate(); } @@ -462,9 +471,9 @@ void SearchEngine::appendSearchResult(const QString &line) { if (nb_fields < NB_PLUGIN_COLUMNS-1) { //-1 because desc_link is optional return; } - Q_ASSERT(currentSearchTab); + Q_ASSERT(activeSearchTab); // Add item to search result list - QStandardItemModel* cur_model = currentSearchTab->getCurrentSearchListModel(); + QStandardItemModel* cur_model = activeSearchTab->getCurrentSearchListModel(); Q_ASSERT(cur_model); int row = cur_model->rowCount(); cur_model->insertRow(row); @@ -498,8 +507,9 @@ void SearchEngine::appendSearchResult(const QString &line) { } void SearchEngine::closeTab(int index) { - if (index == tabWidget->indexOf(currentSearchTab)) { - qDebug("Deleted current search Tab"); + // Search is run for active tab so if user decided to close it, then stop search + if (activeSearchTab && index == tabWidget->indexOf(activeSearchTab)) { + qDebug("Closed active search Tab"); if (searchProcess->state() != QProcess::NotRunning) { searchProcess->terminate(); } @@ -507,7 +517,8 @@ void SearchEngine::closeTab(int index) { searchTimeout->stop(); } search_stopped = true; - currentSearchTab = 0; + if (currentSearchTab == activeSearchTab) currentSearchTab = 0; + activeSearchTab = 0; } delete all_tab.takeAt(index); if (!all_tab.size()) { @@ -544,3 +555,10 @@ void SearchEngine::on_goToDescBtn_clicked() } } } + +inline void SearchEngine::allTabsSetActiveState(bool newState) +{ + foreach(SearchTab *tab, all_tab) { + tab->isActive = newState; + } +} diff --git a/src/searchengine/searchengine.h b/src/searchengine/searchengine.h index 3724769ac..861ff8f39 100644 --- a/src/searchengine/searchengine.h +++ b/src/searchengine/searchengine.h @@ -121,10 +121,12 @@ private: unsigned long nb_search_results; SupportedEngines *supported_engines; QTimer *searchTimeout; - QPointer currentSearchTab; + QPointer currentSearchTab; // Selected tab + QPointer activeSearchTab; // Tab with running search QList > all_tab; // To store all tabs const SearchCategories full_cat_names; MainWindow *mp_mainWindow; + inline void allTabsSetActiveState(bool); }; #endif diff --git a/src/searchengine/searchtab.cpp b/src/searchengine/searchtab.cpp index b63dd436b..2ddf645b3 100644 --- a/src/searchengine/searchtab.cpp +++ b/src/searchengine/searchtab.cpp @@ -48,6 +48,8 @@ SearchTab::SearchTab(SearchEngine *parent) : QWidget(), parent(parent) resultsBrowser->setSelectionMode(QAbstractItemView::ExtendedSelection); box->addWidget(results_lbl); box->addWidget(resultsBrowser); + // New tab is created with new search + isActive = true; setLayout(box); // Set Search results list model diff --git a/src/searchengine/searchtab.h b/src/searchengine/searchtab.h index 1eb859efb..7a8f27a64 100644 --- a/src/searchengine/searchtab.h +++ b/src/searchengine/searchtab.h @@ -71,6 +71,8 @@ public: QTreeView * getCurrentTreeView(); void setRowColor(int row, QString color); QHeaderView* header() const; + bool isActive; + QString status; }; #endif