From 4492de1be11f4131811f504a037342c78f480e20 Mon Sep 17 00:00:00 2001 From: pablomartin4btc Date: Mon, 6 Feb 2023 00:13:43 -0300 Subject: [PATCH] qt: mask values on transactions view --- src/qt/bitcoingui.cpp | 11 ++++++++++- src/qt/bitcoingui.h | 2 ++ src/qt/transactionview.cpp | 15 +++++++++++++++ src/qt/transactionview.h | 4 ++++ src/qt/walletview.cpp | 6 ++++++ src/qt/walletview.h | 3 +++ 6 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index c025d4e3aa0..0eae7d3e79d 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -456,6 +456,7 @@ void BitcoinGUI::createActions() m_wallet_controller->closeAllWallets(this); }); connect(m_mask_values_action, &QAction::toggled, this, &BitcoinGUI::setPrivacy); + connect(m_mask_values_action, &QAction::toggled, this, &BitcoinGUI::enableHistoryAction); } #endif // ENABLE_WALLET @@ -668,6 +669,12 @@ void BitcoinGUI::setClientModel(ClientModel *_clientModel, interfaces::BlockAndH } #ifdef ENABLE_WALLET +void BitcoinGUI::enableHistoryAction(bool privacy) +{ + historyAction->setEnabled(!privacy); + if (historyAction->isChecked()) gotoOverviewPage(); +} + void BitcoinGUI::setWalletController(WalletController* wallet_controller) { assert(!m_wallet_controller); @@ -716,7 +723,9 @@ void BitcoinGUI::addWallet(WalletModel* walletModel) connect(wallet_view, &WalletView::encryptionStatusChanged, this, &BitcoinGUI::updateWalletStatus); connect(wallet_view, &WalletView::incomingTransaction, this, &BitcoinGUI::incomingTransaction); connect(this, &BitcoinGUI::setPrivacy, wallet_view, &WalletView::setPrivacy); - wallet_view->setPrivacy(isPrivacyModeActivated()); + const bool privacy = isPrivacyModeActivated(); + wallet_view->setPrivacy(privacy); + enableHistoryAction(privacy); const QString display_name = walletModel->getDisplayName(); m_wallet_selector->addItem(display_name, QVariant::fromValue(walletModel)); } diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h index 1a830571463..92b889263ba 100644 --- a/src/qt/bitcoingui.h +++ b/src/qt/bitcoingui.h @@ -288,6 +288,8 @@ public Q_SLOTS: void gotoVerifyMessageTab(QString addr = ""); /** Load Partially Signed Bitcoin Transaction from file or clipboard */ void gotoLoadPSBT(bool from_clipboard = false); + /** Enable history action when privacy is changed */ + void enableHistoryAction(bool privacy); /** Show open dialog */ void openClicked(); diff --git a/src/qt/transactionview.cpp b/src/qt/transactionview.cpp index aa5c82ddb1e..351305f3fab 100644 --- a/src/qt/transactionview.cpp +++ b/src/qt/transactionview.cpp @@ -531,6 +531,7 @@ void TransactionView::showDetails() { TransactionDescDialog *dlg = new TransactionDescDialog(selection.at(0)); dlg->setAttribute(Qt::WA_DeleteOnClose); + m_opened_dialogs.append(dlg); dlg->show(); } } @@ -637,6 +638,11 @@ bool TransactionView::eventFilter(QObject *obj, QEvent *event) return true; } } + if (event->type() == QEvent::EnabledChange) { + if (!isEnabled()) { + closeOpenedDialogs(); + } + } return QWidget::eventFilter(obj, event); } @@ -646,3 +652,12 @@ void TransactionView::updateWatchOnlyColumn(bool fHaveWatchOnly) watchOnlyWidget->setVisible(fHaveWatchOnly); transactionView->setColumnHidden(TransactionTableModel::Watchonly, !fHaveWatchOnly); } + +void TransactionView::closeOpenedDialogs() +{ + // close all dialogs opened from this view + for (QDialog* dlg : m_opened_dialogs) { + dlg->close(); + } + m_opened_dialogs.clear(); +} diff --git a/src/qt/transactionview.h b/src/qt/transactionview.h index fe6e3ac7c04..29fb722afea 100644 --- a/src/qt/transactionview.h +++ b/src/qt/transactionview.h @@ -13,6 +13,7 @@ #include class PlatformStyle; +class TransactionDescDialog; class TransactionFilterProxy; class WalletModel; @@ -90,6 +91,8 @@ class TransactionView : public QWidget const PlatformStyle* m_platform_style; + QList m_opened_dialogs; + private Q_SLOTS: void contextualMenu(const QPoint &); void dateRangeChanged(); @@ -121,6 +124,7 @@ public Q_SLOTS: void changedAmount(); void changedSearch(); void exportClicked(); + void closeOpenedDialogs(); void focusTransaction(const QModelIndex&); void focusTransaction(const uint256& txid); }; diff --git a/src/qt/walletview.cpp b/src/qt/walletview.cpp index e62821d5bd1..09e07715340 100644 --- a/src/qt/walletview.cpp +++ b/src/qt/walletview.cpp @@ -93,6 +93,7 @@ WalletView::WalletView(WalletModel* wallet_model, const PlatformStyle* _platform connect(transactionView, &TransactionView::message, this, &WalletView::message); connect(this, &WalletView::setPrivacy, overviewPage, &OverviewPage::setPrivacy); + connect(this, &WalletView::setPrivacy, this, &WalletView::disableTransactionView); // Receive and pass through messages from wallet model connect(walletModel, &WalletModel::message, this, &WalletView::message); @@ -278,3 +279,8 @@ void WalletView::showProgress(const QString &title, int nProgress) } } } + +void WalletView::disableTransactionView(bool disable) +{ + transactionView->setDisabled(disable); +} diff --git a/src/qt/walletview.h b/src/qt/walletview.h index ebceef9cf9e..475085044db 100644 --- a/src/qt/walletview.h +++ b/src/qt/walletview.h @@ -107,6 +107,9 @@ public Q_SLOTS: /** Show progress dialog e.g. for rescan */ void showProgress(const QString &title, int nProgress); +private Q_SLOTS: + void disableTransactionView(bool disable); + Q_SIGNALS: void setPrivacy(bool privacy); void transactionClicked();