From 906bd164e41053de9dfb8a8345c03b6212c4034e Mon Sep 17 00:00:00 2001 From: tobtoht Date: Tue, 27 Jun 2023 15:21:46 +0200 Subject: [PATCH] receive: add option to show change addresses --- src/ReceiveWidget.cpp | 7 +++++++ src/ReceiveWidget.h | 2 ++ src/model/SubaddressModel.cpp | 10 +++++++++- src/model/SubaddressProxyModel.cpp | 9 +++++---- src/model/SubaddressProxyModel.h | 9 +++++++-- 5 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/ReceiveWidget.cpp b/src/ReceiveWidget.cpp index 5507b2c..ce2d326 100644 --- a/src/ReceiveWidget.cpp +++ b/src/ReceiveWidget.cpp @@ -44,6 +44,8 @@ ReceiveWidget::ReceiveWidget(Wallet *wallet, QWidget *parent) m_headerMenu = new QMenu(this); m_showFullAddressesAction = m_headerMenu->addAction("Show full addresses", this, &ReceiveWidget::setShowFullAddresses); m_showFullAddressesAction->setCheckable(true); + m_showChangeAddressesAction = m_headerMenu->addAction("Show change addresses", this, &ReceiveWidget::setShowChangeAddresses); + m_showChangeAddressesAction->setCheckable(true); connect(ui->addresses->header(), &QHeaderView::customContextMenuRequested, this, &ReceiveWidget::showHeaderMenu); // context menu @@ -141,6 +143,11 @@ void ReceiveWidget::onShowTransactions() { emit showTransactions(address); } +void ReceiveWidget::setShowChangeAddresses(bool show) { + if (!m_proxyModel) return; + m_proxyModel->setShowChangeAddresses(show); +} + void ReceiveWidget::setShowFullAddresses(bool show) { if (!m_model) return; m_model->setShowFullAddresses(show); diff --git a/src/ReceiveWidget.h b/src/ReceiveWidget.h index 7b329e5..c48be31 100644 --- a/src/ReceiveWidget.h +++ b/src/ReceiveWidget.h @@ -35,6 +35,7 @@ public slots: void editLabel(); void showContextMenu(const QPoint& point); void setShowFullAddresses(bool show); + void setShowChangeAddresses(bool show); void setShowUsedAddresses(bool show); void setShowHiddenAddresses(bool show); void setSearchFilter(const QString &filter); @@ -57,6 +58,7 @@ private: QMenu *m_headerMenu; QAction *m_showFullAddressesAction; QAction *m_showTransactionsAction; + QAction *m_showChangeAddressesAction; SubaddressModel *m_model; SubaddressProxyModel *m_proxyModel; diff --git a/src/model/SubaddressModel.cpp b/src/model/SubaddressModel.cpp index 3a2d991..23a013b 100644 --- a/src/model/SubaddressModel.cpp +++ b/src/model/SubaddressModel.cpp @@ -110,7 +110,15 @@ QVariant SubaddressModel::parseSubaddressRow(const Monero::SubaddressRow &subadd return address; } case Label: - return index.row() == 0 ? tr("Primary address") : QString::fromStdString(subaddress.getLabel()); + { + if (m_currentSubaddressAccount == 0 && index.row() == 0) { + return "Primary address"; + } + else if (index.row() == 0) { + return "Change"; + } + return QString::fromStdString(subaddress.getLabel()); + } case isUsed: return subaddress.isUsed(); default: diff --git a/src/model/SubaddressProxyModel.cpp b/src/model/SubaddressProxyModel.cpp index 7276fe8..48b95e8 100644 --- a/src/model/SubaddressProxyModel.cpp +++ b/src/model/SubaddressProxyModel.cpp @@ -3,12 +3,12 @@ #include "SubaddressProxyModel.h" -SubaddressProxyModel::SubaddressProxyModel(QObject *parent, Subaddress *subaddress, bool hidePrimary) +SubaddressProxyModel::SubaddressProxyModel(QObject *parent, Subaddress *subaddress, bool showChange) : QSortFilterProxyModel(parent) , m_subaddress(subaddress) , m_searchRegExp("") , m_searchCaseSensitiveRegExp("") - , m_hidePrimary(hidePrimary) + , m_showChange(showChange) { m_searchRegExp.setPatternOptions(QRegularExpression::CaseInsensitiveOption); } @@ -23,9 +23,10 @@ bool SubaddressProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &so label = QString::fromStdString(subaddress.getLabel()); }); - // Hide primary address - if (sourceRow == 0 && m_hidePrimary) + // Hide primary/change addresses + if (!m_showChange && sourceRow == 0) { return false; + } if (!m_showHidden && m_hiddenAddresses.contains(address)) { return false; diff --git a/src/model/SubaddressProxyModel.h b/src/model/SubaddressProxyModel.h index 87de1f6..e0a3b4b 100644 --- a/src/model/SubaddressProxyModel.h +++ b/src/model/SubaddressProxyModel.h @@ -12,7 +12,7 @@ class SubaddressProxyModel : public QSortFilterProxyModel { Q_OBJECT public: - explicit SubaddressProxyModel(QObject* parent, Subaddress *subaddress, bool hidePrimary = true); + explicit SubaddressProxyModel(QObject* parent, Subaddress *subaddress, bool hidePrimary = false); bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const; @@ -38,6 +38,11 @@ public slots: invalidateFilter(); } + void setShowChangeAddresses(const bool showChange) { + m_showChange = showChange; + invalidateFilter(); + } + private: Subaddress *m_subaddress; @@ -46,7 +51,7 @@ private: QRegularExpression m_searchCaseSensitiveRegExp; bool m_showUsed = false; bool m_showHidden = false; - bool m_hidePrimary; + bool m_showChange = false; }; #endif //FEATHER_SUBADDRESSPROXYMODEL_H