diff --git a/src/gui/search/searchjobwidget.cpp b/src/gui/search/searchjobwidget.cpp index 7708e9465..1af98b679 100644 --- a/src/gui/search/searchjobwidget.cpp +++ b/src/gui/search/searchjobwidget.cpp @@ -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) { @@ -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) @@ -385,8 +399,20 @@ void SearchJobWidget::contextMenuEvent(QContextMenuEvent *event) 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()); diff --git a/src/gui/search/searchjobwidget.h b/src/gui/search/searchjobwidget.h index 673ecdb55..0f3853db3 100644 --- a/src/gui/search/searchjobwidget.h +++ b/src/gui/search/searchjobwidget.h @@ -82,10 +82,6 @@ public: void cancelSearch(); - void downloadTorrents(); - void openTorrentPages(); - void copyTorrentURLs(); - signals: void resultsCountUpdated(); void statusChanged(); @@ -114,6 +110,13 @@ private: 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 &nameFilteringModeSetting();