Allow to reuse existing search term

PR #22148.
This commit is contained in:
Vladimir Golovnev 2025-01-13 10:21:40 +03:00 committed by GitHub
commit 99adb16090
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 67 additions and 39 deletions

View file

@ -286,6 +286,7 @@ void SearchJobWidget::cancelSearch()
return; return;
m_searchHandler->cancelSearch(); m_searchHandler->cancelSearch();
setStatus(Status::Aborted);
} }
void SearchJobWidget::downloadTorrents(const AddTorrentOption option) void SearchJobWidget::downloadTorrents(const AddTorrentOption option)

View file

@ -119,7 +119,23 @@ SearchWidget::SearchWidget(IGUIApplication *app, QWidget *parent)
m_ui->tabWidget->setIconSize(iconSize); m_ui->tabWidget->setIconSize(iconSize);
#endif #endif
connect(m_ui->tabWidget, &QTabWidget::tabCloseRequested, this, &SearchWidget::closeTab); connect(m_ui->tabWidget, &QTabWidget::tabCloseRequested, this, &SearchWidget::closeTab);
connect(m_ui->tabWidget, &QTabWidget::currentChanged, this, &SearchWidget::tabChanged); connect(m_ui->tabWidget, &QTabWidget::currentChanged, this, &SearchWidget::currentTabChanged);
connect(m_ui->tabWidget, &QTabWidget::tabBarDoubleClicked, this, [this](const int tabIndex)
{
if (tabIndex < 0)
return;
// Reset current search pattern
auto *searchJobWidget = static_cast<SearchJobWidget *>(m_ui->tabWidget->widget(tabIndex));
const QString pattern = searchJobWidget->searchPattern();
if (pattern != m_ui->lineEditSearchPattern->text())
{
m_ui->lineEditSearchPattern->setText(pattern);
m_isNewQueryString = false;
adjustSearchButton();
}
});
const auto *searchManager = SearchPluginManager::instance(); const auto *searchManager = SearchPluginManager::instance();
const auto onPluginChanged = [this]() const auto onPluginChanged = [this]()
@ -162,16 +178,19 @@ bool SearchWidget::eventFilter(QObject *object, QEvent *event)
const auto *mouseEvent = static_cast<QMouseEvent *>(event); const auto *mouseEvent = static_cast<QMouseEvent *>(event);
const int tabIndex = m_ui->tabWidget->tabBar()->tabAt(mouseEvent->pos()); const int tabIndex = m_ui->tabWidget->tabBar()->tabAt(mouseEvent->pos());
if ((mouseEvent->button() == Qt::MiddleButton) && (tabIndex >= 0)) if (tabIndex >= 0)
{ {
closeTab(tabIndex); if (mouseEvent->button() == Qt::MiddleButton)
return true; {
} closeTab(tabIndex);
return true;
}
if (mouseEvent->button() == Qt::RightButton) if (mouseEvent->button() == Qt::RightButton)
{ {
showTabMenu(tabIndex); showTabMenu(tabIndex);
return true; return true;
}
} }
return false; return false;
@ -266,7 +285,7 @@ SearchWidget::~SearchWidget()
delete m_ui; delete m_ui;
} }
void SearchWidget::tabChanged(const int index) void SearchWidget::currentTabChanged(const int index)
{ {
// when we switch from a tab that is not empty to another that is empty // when we switch from a tab that is not empty to another that is empty
// the download button doesn't have to be available // the download button doesn't have to be available
@ -274,19 +293,13 @@ void SearchWidget::tabChanged(const int index)
? static_cast<SearchJobWidget *>(m_ui->tabWidget->widget(index)) ? static_cast<SearchJobWidget *>(m_ui->tabWidget->widget(index))
: nullptr; : nullptr;
if (!m_currentSearchTab)
m_isNewQueryString = true;
if (!m_isNewQueryString) if (!m_isNewQueryString)
{ m_ui->lineEditSearchPattern->setText(m_currentSearchTab->searchPattern());
if (m_currentSearchTab && (m_currentSearchTab->status() == SearchJobWidget::Status::Ongoing))
{ adjustSearchButton();
m_ui->searchButton->hide();
m_ui->stopButton->show();
}
else
{
m_ui->stopButton->hide();
m_ui->searchButton->show();
}
}
} }
void SearchWidget::selectMultipleBox([[maybe_unused]] const int index) void SearchWidget::selectMultipleBox([[maybe_unused]] const int index)
@ -310,6 +323,27 @@ void SearchWidget::toggleFocusBetweenLineEdits()
} }
} }
void SearchWidget::adjustSearchButton()
{
if (!m_isNewQueryString
&& (m_currentSearchTab && (m_currentSearchTab->status() == SearchJobWidget::Status::Ongoing)))
{
if (m_ui->searchButton->isVisible())
{
m_ui->searchButton->hide();
m_ui->stopButton->show();
}
}
else
{
if (m_ui->stopButton->isVisible())
{
m_ui->stopButton->hide();
m_ui->searchButton->show();
}
}
}
void SearchWidget::showTabMenu(const int index) void SearchWidget::showTabMenu(const int index)
{ {
QMenu *menu = new QMenu(this); QMenu *menu = new QMenu(this);
@ -339,11 +373,13 @@ void SearchWidget::pluginsButtonClicked()
dlg->show(); dlg->show();
} }
void SearchWidget::searchTextEdited(const QString &) void SearchWidget::searchTextEdited(const QString &text)
{ {
// Enable search button if (m_currentSearchTab)
m_ui->searchButton->setText(tr("Search")); {
m_isNewQueryString = true; m_isNewQueryString = m_currentSearchTab->searchPattern() != text;
adjustSearchButton();
}
} }
void SearchWidget::giveFocusToSearchInput() void SearchWidget::giveFocusToSearchInput()
@ -391,8 +427,6 @@ void SearchWidget::searchButtonClicked()
void SearchWidget::stopButtonClicked() void SearchWidget::stopButtonClicked()
{ {
m_currentSearchTab->cancelSearch(); m_currentSearchTab->cancelSearch();
m_ui->stopButton->hide();
m_ui->searchButton->show();
} }
void SearchWidget::tabStatusChanged(SearchJobWidget *tab) void SearchWidget::tabStatusChanged(SearchJobWidget *tab)
@ -405,10 +439,7 @@ void SearchWidget::tabStatusChanged(SearchJobWidget *tab)
if (tab->status() != SearchJobWidget::Status::Ongoing) if (tab->status() != SearchJobWidget::Status::Ongoing)
{ {
if (tab == m_currentSearchTab) if (tab == m_currentSearchTab)
{ adjustSearchButton();
m_ui->stopButton->hide();
m_ui->searchButton->show();
}
emit searchFinished(tab->status() == SearchJobWidget::Status::Error); emit searchFinished(tab->status() == SearchJobWidget::Status::Error);
} }
@ -437,10 +468,5 @@ void SearchWidget::refreshTab(SearchJobWidget *searchJobWidget)
// Re-launch search // Re-launch search
auto *searchHandler = SearchPluginManager::instance()->startSearch(searchJobWidget->searchPattern(), selectedCategory(), selectedPlugins()); auto *searchHandler = SearchPluginManager::instance()->startSearch(searchJobWidget->searchPattern(), selectedCategory(), selectedPlugins());
searchJobWidget->assignSearchHandler(searchHandler); searchJobWidget->assignSearchHandler(searchHandler);
if (!m_isNewQueryString && (m_ui->tabWidget->currentWidget() == searchJobWidget))
{
m_ui->searchButton->hide();
m_ui->stopButton->show();
}
tabStatusChanged(searchJobWidget); tabStatusChanged(searchJobWidget);
} }

View file

@ -65,8 +65,9 @@ private:
void pluginsButtonClicked(); void pluginsButtonClicked();
void searchButtonClicked(); void searchButtonClicked();
void stopButtonClicked(); void stopButtonClicked();
void searchTextEdited(const QString &text);
void currentTabChanged(int index);
void tabChanged(int index);
void tabStatusChanged(SearchJobWidget *tab); void tabStatusChanged(SearchJobWidget *tab);
void closeTab(int index); void closeTab(int index);
@ -76,11 +77,11 @@ private:
void selectMultipleBox(int index); void selectMultipleBox(int index);
void toggleFocusBetweenLineEdits(); void toggleFocusBetweenLineEdits();
void adjustSearchButton();
void fillCatCombobox(); void fillCatCombobox();
void fillPluginComboBox(); void fillPluginComboBox();
void selectActivePage(); void selectActivePage();
void searchTextEdited(const QString &);
QString selectedCategory() const; QString selectedCategory() const;
QStringList selectedPlugins() const; QStringList selectedPlugins() const;