Add more copy field actions to search widget

Closes #10250.
This commit is contained in:
Chocobo1 2019-06-26 11:17:45 +08:00
parent 26ff9150a2
commit 4f5302adf8
No known key found for this signature in database
GPG key ID: 210D9C873253A68C
2 changed files with 46 additions and 17 deletions

View file

@ -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());

View file

@ -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<NameFilteringMode> &nameFilteringModeSetting();