Skip to content

Commit

Permalink
Merge pull request #10852 from Chocobo1/menu
Browse files Browse the repository at this point in the history
Improvements to search widget
  • Loading branch information
Chocobo1 committed Jun 27, 2019
2 parents a305032 + da2bfd2 commit cd654d6
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 95 deletions.
54 changes: 40 additions & 14 deletions src/gui/search/searchjobwidget.cpp
Expand Up @@ -217,7 +217,7 @@ void SearchJobWidget::downloadTorrents()
downloadTorrent(rowIndex);
}

void SearchJobWidget::openTorrentPages()
void SearchJobWidget::openTorrentPages() const
{
const QModelIndexList rows {m_ui->resultsBrowser->selectionModel()->selectedRows()};
for (const QModelIndex &rowIndex : rows) {
Expand All @@ -228,21 +228,35 @@ void SearchJobWidget::openTorrentPages()
}
}

void SearchJobWidget::copyTorrentURLs()
void SearchJobWidget::copyTorrentURLs() const
{
copyField(SearchSortModel::DESC_LINK);
}

void SearchJobWidget::copyTorrentDownloadLinks() const
{
copyField(SearchSortModel::DL_LINK);
}

void SearchJobWidget::copyTorrentNames() const
{
copyField(SearchSortModel::NAME);
}

void SearchJobWidget::copyField(const int column) const
{
const QModelIndexList rows {m_ui->resultsBrowser->selectionModel()->selectedRows()};
QStringList urls;
QStringList list;

for (const QModelIndex &rowIndex : rows) {
const QString descrLink = m_proxyModel->data(
m_proxyModel->index(rowIndex.row(), SearchSortModel::DESC_LINK)).toString();
if (!descrLink.isEmpty())
urls << descrLink;
const QString field = m_proxyModel->data(
m_proxyModel->index(rowIndex.row(), column)).toString();
if (!field.isEmpty())
list << field;
}

if (!urls.empty()) {
QClipboard *clipboard = QApplication::clipboard();
clipboard->setText(urls.join('\n'));
}
if (!list.empty())
QApplication::clipboard()->setText(list.join('\n'));
}

void SearchJobWidget::setStatus(Status value)
Expand Down Expand Up @@ -382,11 +396,23 @@ void SearchJobWidget::contextMenuEvent(QContextMenuEvent *event)
menu->addSeparator();

const QAction *openDescriptionAction = menu->addAction(
GuiIconProvider::instance()->getIcon("application-x-mswinurl"), tr("Go to description page"));
GuiIconProvider::instance()->getIcon("application-x-mswinurl"), tr("Open description page"));
connect(openDescriptionAction, &QAction::triggered, this, &SearchJobWidget::openTorrentPages);

const QAction *copyDescriptionAction = menu->addAction(
GuiIconProvider::instance()->getIcon("edit-copy"), tr("Copy description page URL"));
QMenu *copySubMenu = menu->addMenu(
GuiIconProvider::instance()->getIcon("edit-copy"), tr("Copy"));

const QAction *copyNamesAction = copySubMenu->addAction(
GuiIconProvider::instance()->getIcon("edit-copy"), tr("Name"));
connect(copyNamesAction, &QAction::triggered, this, &SearchJobWidget::copyTorrentNames);

const QAction *copyDownloadLinkAction = copySubMenu->addAction(
GuiIconProvider::instance()->getIcon("edit-copy"), tr("Download link"));
connect(copyDownloadLinkAction, &QAction::triggered
, this, &SearchJobWidget::copyTorrentDownloadLinks);

const QAction *copyDescriptionAction = copySubMenu->addAction(
GuiIconProvider::instance()->getIcon("edit-copy"), tr("Description page URL"));
connect(copyDescriptionAction, &QAction::triggered, this, &SearchJobWidget::copyTorrentURLs);

menu->popup(event->globalPos());
Expand Down
11 changes: 7 additions & 4 deletions src/gui/search/searchjobwidget.h
Expand Up @@ -82,10 +82,6 @@ class SearchJobWidget : public QWidget

void cancelSearch();

void downloadTorrents();
void openTorrentPages();
void copyTorrentURLs();

signals:
void resultsCountUpdated();
void statusChanged();
Expand Down Expand Up @@ -114,6 +110,13 @@ class SearchJobWidget : public QWidget
QHeaderView *header() const;
void setRowColor(int row, const QColor &color);

void downloadTorrents();
void openTorrentPages() const;
void copyTorrentURLs() const;
void copyTorrentDownloadLinks() const;
void copyTorrentNames() const;
void copyField(int column) const;

static QString statusText(Status st);
static CachedSettingValue<NameFilteringMode> &nameFilteringModeSetting();

Expand Down
45 changes: 3 additions & 42 deletions src/gui/search/searchwidget.cpp
Expand Up @@ -40,6 +40,7 @@
#include <QRegularExpression>
#include <QShortcut>
#include <QTextStream>
#include <QVector>

#include "base/global.h"
#include "base/search/searchpluginmanager.h"
Expand Down Expand Up @@ -104,10 +105,7 @@ SearchWidget::SearchWidget(MainWindow *mainWindow)
#ifndef Q_OS_MAC
// Icons
m_ui->searchButton->setIcon(GuiIconProvider::instance()->getIcon("edit-find"));
m_ui->downloadButton->setIcon(GuiIconProvider::instance()->getIcon("download"));
m_ui->goToDescBtn->setIcon(GuiIconProvider::instance()->getIcon("application-x-mswinurl"));
m_ui->pluginsButton->setIcon(GuiIconProvider::instance()->getIcon("preferences-system-network"));
m_ui->copyURLBtn->setIcon(GuiIconProvider::instance()->getIcon("edit-copy"));
#else
// On macOS the icons overlap the text otherwise
QSize iconSize = m_ui->tabWidget->iconSize();
Expand Down Expand Up @@ -149,7 +147,7 @@ void SearchWidget::fillCatCombobox()
m_ui->comboCategory->addItem(SearchPluginManager::categoryFullName("all"), QVariant("all"));

using QStrPair = QPair<QString, QString>;
QList<QStrPair> tmpList;
QVector<QStrPair> tmpList;
for (const QString &cat : asConst(SearchPluginManager::instance()->getPluginCategories(selectedPlugin())))
tmpList << qMakePair(SearchPluginManager::categoryFullName(cat), cat);
std::sort(tmpList.begin(), tmpList.end(), [](const QStrPair &l, const QStrPair &r) { return (QString::localeAwareCompare(l.first, r.first) < 0); });
Expand All @@ -171,7 +169,7 @@ void SearchWidget::fillPluginComboBox()
m_ui->selectPlugin->addItem(tr("Select..."), QVariant("multi"));

using QStrPair = QPair<QString, QString>;
QList<QStrPair> tmpList;
QVector<QStrPair> tmpList;
for (const QString &name : asConst(SearchPluginManager::instance()->enabledPlugins()))
tmpList << qMakePair(SearchPluginManager::instance()->pluginFullName(name), name);
std::sort(tmpList.begin(), tmpList.end(), [](const QStrPair &l, const QStrPair &r) { return (l.first < r.first); } );
Expand Down Expand Up @@ -217,26 +215,11 @@ SearchWidget::~SearchWidget()
delete m_ui;
}

void SearchWidget::updateButtons()
{
if (m_currentSearchTab && (m_currentSearchTab->visibleResultsCount() > 0)) {
m_ui->downloadButton->setEnabled(true);
m_ui->goToDescBtn->setEnabled(true);
m_ui->copyURLBtn->setEnabled(true);
}
else {
m_ui->downloadButton->setEnabled(false);
m_ui->goToDescBtn->setEnabled(false);
m_ui->copyURLBtn->setEnabled(false);
}
}

void SearchWidget::tabChanged(int index)
{
// when we switch from a tab that is not empty to another that is empty
// the download button doesn't have to be available
m_currentSearchTab = ((index < 0) ? nullptr : m_allTabs.at(m_ui->tabWidget->currentIndex()));
updateButtons();
}

void SearchWidget::selectMultipleBox(int index)
Expand Down Expand Up @@ -324,19 +307,13 @@ void SearchWidget::on_searchButton_clicked()
m_ui->tabWidget->addTab(newTab, tabName);
m_ui->tabWidget->setCurrentWidget(newTab);

connect(newTab, &SearchJobWidget::resultsCountUpdated, this, &SearchWidget::resultsCountUpdated);
connect(newTab, &SearchJobWidget::statusChanged, this, [this, newTab]() { tabStatusChanged(newTab); });

m_ui->searchButton->setText(tr("Stop"));
m_activeSearchTab = newTab;
tabStatusChanged(newTab);
}

void SearchWidget::resultsCountUpdated()
{
updateButtons();
}

void SearchWidget::tabStatusChanged(QWidget *tab)
{
const int tabIndex = m_ui->tabWidget->indexOf(tab);
Expand Down Expand Up @@ -367,19 +344,3 @@ void SearchWidget::closeTab(int index)

delete tab;
}

// Download selected items in search results list
void SearchWidget::on_downloadButton_clicked()
{
m_allTabs.at(m_ui->tabWidget->currentIndex())->downloadTorrents();
}

void SearchWidget::on_goToDescBtn_clicked()
{
m_allTabs.at(m_ui->tabWidget->currentIndex())->openTorrentPages();
}

void SearchWidget::on_copyURLBtn_clicked()
{
m_allTabs.at(m_ui->tabWidget->currentIndex())->copyTorrentURLs();
}
5 changes: 0 additions & 5 deletions src/gui/search/searchwidget.h
Expand Up @@ -57,15 +57,11 @@ class SearchWidget : public QWidget

private slots:
void on_searchButton_clicked();
void on_downloadButton_clicked();
void on_goToDescBtn_clicked();
void on_copyURLBtn_clicked();
void on_pluginsButton_clicked();

private:
void tabChanged(int index);
void closeTab(int index);
void resultsCountUpdated();
void tabStatusChanged(QWidget *tab);
void selectMultipleBox(int index);
void toggleFocusBetweenLineEdits();
Expand All @@ -74,7 +70,6 @@ private slots:
void fillPluginComboBox();
void selectActivePage();
void searchTextEdited(const QString &);
void updateButtons();

QString selectedCategory() const;
QString selectedPlugin() const;
Expand Down
30 changes: 0 additions & 30 deletions src/gui/search/searchwidget.ui
Expand Up @@ -113,36 +113,6 @@ Click the &quot;Search plugins...&quot; button at the bottom right of the window
</item>
<item>
<layout class="QHBoxLayout" name="layout2">
<item>
<widget class="QPushButton" name="downloadButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Download</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="goToDescBtn">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Go to description page</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="copyURLBtn">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Copy description page URL</string>
</property>
</widget>
</item>
<item>
<spacer name="spacer2">
<property name="orientation">
Expand Down

0 comments on commit cd654d6

Please sign in to comment.