From ac598bb80174fd3308d8321f258f96143ba5bc20 Mon Sep 17 00:00:00 2001 From: tobtoht Date: Thu, 31 Dec 2020 01:00:37 +0100 Subject: [PATCH] Reddit: copy link --- src/mainwindow.cpp | 20 +++++++++++++++++--- src/mainwindow.h | 3 ++- src/widgets/redditwidget.cpp | 20 ++++++++++++++++---- src/widgets/redditwidget.h | 5 +++++ 4 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index e5d7d46..59025d9 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -177,6 +177,8 @@ MainWindow::MainWindow(AppContext *ctx, QWidget *parent) : connect(m_ctx, &AppContext::ccsUpdated, ui->ccsWidget->model(), &CCSModel::updateEntries); connect(m_ctx, &AppContext::redditUpdated, ui->redditWidget->model(), &RedditModel::updatePosts); + connect(ui->redditWidget, &RedditWidget::setStatusText, this, &MainWindow::setStatusText); + connect(ui->tabHomeWidget, &QTabWidget::currentChanged, [](int index){ config()->set(Config::homeWidget, TabsHome(index)); }); @@ -675,10 +677,22 @@ void MainWindow::onBalanceUpdated(quint64 balance, quint64 spendable) { m_balanceWidget->setHidden(hide); } -void MainWindow::setStatusText(const QString &text) { - m_statusText = text; - if (!m_constructingTransaction) +void MainWindow::setStatusText(const QString &text, bool override, int timeout) { + if (override) { + m_statusOverrideActive = true; m_statusLabelStatus->setText(text); + QTimer::singleShot(timeout, [this]{ + m_statusOverrideActive = false; + this->setStatusText(m_statusText); + }); + return; + } + + m_statusText = text; + + if (!m_statusOverrideActive && !m_constructingTransaction) { + m_statusLabelStatus->setText(text); + } } void MainWindow::onSynchronized() { diff --git a/src/mainwindow.h b/src/mainwindow.h index d46cd6e..e9d6f96 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -169,7 +169,7 @@ private: void updatePasswordIcon(); void updateNetStats(); void rescanSpent(); - void setStatusText(const QString &text); + void setStatusText(const QString &text, bool override = false, int timeout = 1000); void showBalanceDialog(); QString statusDots(); @@ -222,6 +222,7 @@ private: QString m_statusText; int m_statusDots; bool m_constructingTransaction = false; + bool m_statusOverrideActive = false; QTimer m_txTimer; private slots: diff --git a/src/widgets/redditwidget.cpp b/src/widgets/redditwidget.cpp index a074ff5..386c086 100644 --- a/src/widgets/redditwidget.cpp +++ b/src/widgets/redditwidget.cpp @@ -22,6 +22,7 @@ RedditWidget::RedditWidget(QWidget *parent) : this->setupTable(); m_contextMenu->addAction("View thread", this, &RedditWidget::linkClicked); + m_contextMenu->addAction("Copy link", this, &RedditWidget::copyUrl); connect(ui->tableView, &QHeaderView::customContextMenuRequested, this, &RedditWidget::showContextMenu); connect(ui->tableView, &QTableView::doubleClicked, this, &RedditWidget::linkClicked); @@ -37,11 +38,17 @@ void RedditWidget::linkClicked() { QModelIndex index = ui->tableView->currentIndex(); auto post = m_model->post(index.row()); - if (post != nullptr) { - QString redditFrontend = config()->get(Config::redditFrontend).toString(); - QString link = QString("https://%1%2").arg(redditFrontend, post->permalink); + if (post) + Utils::externalLinkWarning(this, this->getLink(post->permalink)); +} - Utils::externalLinkWarning(this, link); +void RedditWidget::copyUrl() { + QModelIndex index = ui->tableView->currentIndex(); + auto post = m_model->post(index.row()); + + if (post) { + Utils::copyToClipboard(this->getLink(post->permalink)); + emit setStatusText("Link copied to clipboard", true, 1000); } } @@ -62,6 +69,11 @@ void RedditWidget::showContextMenu(const QPoint &pos) { m_contextMenu->exec(ui->tableView->viewport()->mapToGlobal(pos)); } +QString RedditWidget::getLink(const QString &permaLink) { + QString redditFrontend = config()->get(Config::redditFrontend).toString(); + return QString("https://%1%2").arg(redditFrontend, permaLink); +} + RedditWidget::~RedditWidget() { delete ui; } diff --git a/src/widgets/redditwidget.h b/src/widgets/redditwidget.h index f902afd..d5d8fc1 100644 --- a/src/widgets/redditwidget.h +++ b/src/widgets/redditwidget.h @@ -26,9 +26,14 @@ public: public slots: void linkClicked(); +signals: + void setStatusText(const QString &msg, bool override, int timeout); + private: void setupTable(); void showContextMenu(const QPoint &pos); + void copyUrl(); + QString getLink(const QString &permaLink); Ui::RedditWidget *ui; RedditModel* const m_model;