From e886883ae038fd2195b8e0099b770042f1b444f5 Mon Sep 17 00:00:00 2001 From: UdjinM6 Date: Mon, 5 Oct 2020 18:27:38 +0300 Subject: [PATCH 1/3] Turn class members of QButtonGroup type into pointers, fix includes --- src/qt/bitcoingui.h | 1 + src/qt/optionsdialog.cpp | 26 +++++++++++++++----------- src/qt/optionsdialog.h | 4 ++-- src/qt/rpcconsole.cpp | 22 +++++++++++++--------- src/qt/rpcconsole.h | 4 ++-- src/qt/signverifymessagedialog.cpp | 16 ++++++++++------ src/qt/signverifymessagedialog.h | 7 +++++-- 7 files changed, 48 insertions(+), 32 deletions(-) diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h index bbe1a548ccbd..72f407409866 100644 --- a/src/qt/bitcoingui.h +++ b/src/qt/bitcoingui.h @@ -44,6 +44,7 @@ class Node; QT_BEGIN_NAMESPACE class QAction; +class QButtonGroup; class QComboBox; class QProgressBar; class QProgressDialog; diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp index 4bb27a54818b..ed432b06d853 100644 --- a/src/qt/optionsdialog.cpp +++ b/src/qt/optionsdialog.cpp @@ -20,6 +20,7 @@ #include #include // for -dbcache defaults +#include #include #include #include @@ -33,7 +34,8 @@ OptionsDialog::OptionsDialog(QWidget *parent, bool enableWallet) : QDialog(parent), ui(new Ui::OptionsDialog), model(0), - mapper(0) + mapper(0), + pageButtons(0) { ui->setupUi(this); @@ -77,7 +79,8 @@ OptionsDialog::OptionsDialog(QWidget *parent, bool enableWallet) : connect(ui->connectSocksTor, SIGNAL(toggled(bool)), ui->proxyPortTor, SLOT(setEnabled(bool))); connect(ui->connectSocksTor, SIGNAL(toggled(bool)), this, SLOT(updateProxyValidationState())); - pageButtons.addButton(ui->btnMain, pageButtons.buttons().size()); + pageButtons = new QButtonGroup(this); + pageButtons->addButton(ui->btnMain, pageButtons->buttons().size()); /* Remove Wallet/PrivateSend tabs in case of -disablewallet */ if (!enableWallet) { ui->stackedWidgetOptions->removeWidget(ui->pageWallet); @@ -85,14 +88,14 @@ OptionsDialog::OptionsDialog(QWidget *parent, bool enableWallet) : ui->stackedWidgetOptions->removeWidget(ui->pagePrivateSend); ui->btnPrivateSend->hide(); } else { - pageButtons.addButton(ui->btnWallet, pageButtons.buttons().size()); - pageButtons.addButton(ui->btnPrivateSend, pageButtons.buttons().size()); + pageButtons->addButton(ui->btnWallet, pageButtons->buttons().size()); + pageButtons->addButton(ui->btnPrivateSend, pageButtons->buttons().size()); } - pageButtons.addButton(ui->btnNetwork, pageButtons.buttons().size()); - pageButtons.addButton(ui->btnDisplay, pageButtons.buttons().size()); - pageButtons.addButton(ui->btnAppearance, pageButtons.buttons().size()); + pageButtons->addButton(ui->btnNetwork, pageButtons->buttons().size()); + pageButtons->addButton(ui->btnDisplay, pageButtons->buttons().size()); + pageButtons->addButton(ui->btnAppearance, pageButtons->buttons().size()); - connect(&pageButtons, SIGNAL(buttonClicked(int)), this, SLOT(showPage(int))); + connect(pageButtons, SIGNAL(buttonClicked(int)), this, SLOT(showPage(int))); showPage(0); @@ -164,6 +167,7 @@ OptionsDialog::OptionsDialog(QWidget *parent, bool enableWallet) : OptionsDialog::~OptionsDialog() { + delete pageButtons; delete ui; } @@ -294,8 +298,8 @@ void OptionsDialog::setMapper() void OptionsDialog::showPage(int index) { std::vector vecNormal; - QAbstractButton* btnActive = pageButtons.button(index); - for (QAbstractButton* button : pageButtons.buttons()) { + QAbstractButton* btnActive = pageButtons->button(index); + for (QAbstractButton* button : pageButtons->buttons()) { if (button != btnActive) { vecNormal.push_back(button); } @@ -443,7 +447,7 @@ void OptionsDialog::updateWidth() { int nWidthWidestButton{0}; int nButtonsVisible{0}; - for (QAbstractButton* button : pageButtons.buttons()) { + for (QAbstractButton* button : pageButtons->buttons()) { if (!button->isVisible()) { continue; } diff --git a/src/qt/optionsdialog.h b/src/qt/optionsdialog.h index b2d6c3f5703f..0fe2e42a8ca4 100644 --- a/src/qt/optionsdialog.h +++ b/src/qt/optionsdialog.h @@ -5,7 +5,6 @@ #ifndef BITCOIN_QT_OPTIONSDIALOG_H #define BITCOIN_QT_OPTIONSDIALOG_H -#include #include #include @@ -14,6 +13,7 @@ class OptionsModel; class QValidatedLineEdit; QT_BEGIN_NAMESPACE +class QButtonGroup; class QDataWidgetMapper; QT_END_NAMESPACE @@ -74,7 +74,7 @@ private Q_SLOTS: Ui::OptionsDialog *ui; OptionsModel *model; QDataWidgetMapper *mapper; - QButtonGroup pageButtons; + QButtonGroup* pageButtons; QString previousTheme; AppearanceWidget* appearance; bool fPrivateSendEnabledPrev{false}; diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp index 6cb376b14599..e93f67f4599b 100644 --- a/src/qt/rpcconsole.cpp +++ b/src/qt/rpcconsole.cpp @@ -28,6 +28,7 @@ #include #endif +#include #include #include #include @@ -453,7 +454,8 @@ RPCConsole::RPCConsole(interfaces::Node& node, QWidget* parent, Qt::WindowFlags historyPtr(0), peersTableContextMenu(0), banTableContextMenu(0), - consoleFontSize(0) + consoleFontSize(0), + pageButtons(0) { ui->setupUi(this); @@ -525,12 +527,13 @@ RPCConsole::RPCConsole(interfaces::Node& node, QWidget* parent, Qt::WindowFlags consoleFontSize = settings.value(fontSizeSettingsKey, QFontInfo(GUIUtil::getFontNormal()).pointSize()).toInt(); - pageButtons.addButton(ui->btnInfo, pageButtons.buttons().size()); - pageButtons.addButton(ui->btnConsole, pageButtons.buttons().size()); - pageButtons.addButton(ui->btnNetTraffic, pageButtons.buttons().size()); - pageButtons.addButton(ui->btnPeers, pageButtons.buttons().size()); - pageButtons.addButton(ui->btnRepair, pageButtons.buttons().size()); - connect(&pageButtons, SIGNAL(buttonClicked(int)), this, SLOT(showPage(int))); + pageButtons = new QButtonGroup(this); + pageButtons->addButton(ui->btnInfo, pageButtons->buttons().size()); + pageButtons->addButton(ui->btnConsole, pageButtons->buttons().size()); + pageButtons->addButton(ui->btnNetTraffic, pageButtons->buttons().size()); + pageButtons->addButton(ui->btnPeers, pageButtons->buttons().size()); + pageButtons->addButton(ui->btnRepair, pageButtons->buttons().size()); + connect(pageButtons, SIGNAL(buttonClicked(int)), this, SLOT(showPage(int))); showPage(TAB_INFO); @@ -543,6 +546,7 @@ RPCConsole::~RPCConsole() settings.setValue("RPCConsoleWindowGeometry", saveGeometry()); m_node.rpcUnsetTimerInterface(rpcTimerInterface); delete rpcTimerInterface; + delete pageButtons; delete ui; } @@ -978,8 +982,8 @@ void RPCConsole::setInstantSendLockCount(size_t count) void RPCConsole::showPage(int index) { std::vector vecNormal; - QAbstractButton* btnActive = pageButtons.button(index); - for (QAbstractButton* button : pageButtons.buttons()) { + QAbstractButton* btnActive = pageButtons->button(index); + for (QAbstractButton* button : pageButtons->buttons()) { if (button != btnActive) { vecNormal.push_back(button); } diff --git a/src/qt/rpcconsole.h b/src/qt/rpcconsole.h index ece31550bae5..c7d8c372a44e 100644 --- a/src/qt/rpcconsole.h +++ b/src/qt/rpcconsole.h @@ -11,7 +11,6 @@ #include -#include #include #include #include @@ -29,6 +28,7 @@ namespace Ui { } QT_BEGIN_NAMESPACE +class QButtonGroup; class QMenu; class QItemSelection; QT_END_NAMESPACE @@ -168,7 +168,7 @@ public Q_SLOTS: interfaces::Node& m_node; Ui::RPCConsole *ui; - QButtonGroup pageButtons; + QButtonGroup* pageButtons; ClientModel *clientModel; QStringList history; int historyPtr; diff --git a/src/qt/signverifymessagedialog.cpp b/src/qt/signverifymessagedialog.cpp index 57afa3607b77..02df9bd2b5d7 100644 --- a/src/qt/signverifymessagedialog.cpp +++ b/src/qt/signverifymessagedialog.cpp @@ -18,18 +18,21 @@ #include #include +#include #include SignVerifyMessageDialog::SignVerifyMessageDialog(QWidget* parent) : QDialog(parent), ui(new Ui::SignVerifyMessageDialog), - model(0) + model(0), + pageButtons(0) { ui->setupUi(this); - pageButtons.addButton(ui->btnSignMessage, pageButtons.buttons().size()); - pageButtons.addButton(ui->btnVerifyMessage, pageButtons.buttons().size()); - connect(&pageButtons, SIGNAL(buttonClicked(int)), this, SLOT(showPage(int))); + pageButtons = new QButtonGroup(this); + pageButtons->addButton(ui->btnSignMessage, pageButtons->buttons().size()); + pageButtons->addButton(ui->btnVerifyMessage, pageButtons->buttons().size()); + connect(pageButtons, SIGNAL(buttonClicked(int)), this, SLOT(showPage(int))); ui->messageIn_SM->setPlaceholderText(tr("Enter a message to be signed")); ui->signatureOut_SM->setPlaceholderText(tr("Click \"Sign Message\" to generate signature")); @@ -64,6 +67,7 @@ SignVerifyMessageDialog::SignVerifyMessageDialog(QWidget* parent) : SignVerifyMessageDialog::~SignVerifyMessageDialog() { + delete pageButtons; delete ui; } @@ -101,8 +105,8 @@ void SignVerifyMessageDialog::showTab_VM(bool fShow) void SignVerifyMessageDialog::showPage(int index) { std::vector vecNormal; - QAbstractButton* btnActive = pageButtons.button(index); - for (QAbstractButton* button : pageButtons.buttons()) { + QAbstractButton* btnActive = pageButtons->button(index); + for (QAbstractButton* button : pageButtons->buttons()) { if (button != btnActive) { vecNormal.push_back(button); } diff --git a/src/qt/signverifymessagedialog.h b/src/qt/signverifymessagedialog.h index d2b890740b32..afdd8fc1d62b 100644 --- a/src/qt/signverifymessagedialog.h +++ b/src/qt/signverifymessagedialog.h @@ -5,11 +5,14 @@ #ifndef BITCOIN_QT_SIGNVERIFYMESSAGEDIALOG_H #define BITCOIN_QT_SIGNVERIFYMESSAGEDIALOG_H -#include #include class WalletModel; +QT_BEGIN_NAMESPACE +class QButtonGroup; +QT_END_NAMESPACE + namespace Ui { class SignVerifyMessageDialog; } @@ -35,7 +38,7 @@ class SignVerifyMessageDialog : public QDialog private: Ui::SignVerifyMessageDialog *ui; WalletModel *model; - QButtonGroup pageButtons; + QButtonGroup* pageButtons; private Q_SLOTS: /** custom tab buttons clicked */ From 9615932baf4abb166559da8b86156b27a529e35f Mon Sep 17 00:00:00 2001 From: UdjinM6 Date: Mon, 5 Oct 2020 18:04:52 +0300 Subject: [PATCH 2/3] Move `BitcoinGUI::updateToolBarShortcuts()` into `GUIUtil::updateButtonGroupShortcuts()` --- src/qt/bitcoingui.cpp | 22 +--------------------- src/qt/bitcoingui.h | 2 -- src/qt/guiutil.cpp | 21 +++++++++++++++++++++ src/qt/guiutil.h | 4 ++++ 4 files changed, 26 insertions(+), 23 deletions(-) diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 9c88710699b0..3314c5c05a38 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -1154,10 +1154,10 @@ void BitcoinGUI::updatePrivateSendVisibility() if (appToolBar != nullptr) { appToolBar->actions()[2]->setVisible(fEnabled); privateSendCoinsButton->setVisible(fEnabled); + GUIUtil::updateButtonGroupShortcuts(tabGroup); } privateSendCoinsMenuAction->setVisible(fEnabled); showPrivateSendHelpAction->setVisible(fEnabled); - updateToolBarShortcuts(); updateWidth(); } @@ -1186,26 +1186,6 @@ void BitcoinGUI::updateWidth() resize(nWidth, height()); } -void BitcoinGUI::updateToolBarShortcuts() -{ - if (walletFrame == nullptr) { - return; - } -#ifdef Q_OS_MAC - auto modifier = Qt::CTRL; -#else - auto modifier = Qt::ALT; -#endif - int nKey = 0; - for (auto button : tabGroup->buttons()) { - if (button->isVisible()) { - button->setShortcut(QKeySequence(modifier + Qt::Key_1 + nKey++)); - } else { - button->setShortcut(QKeySequence()); - } - } -} - void BitcoinGUI::setNumBlocks(int count, const QDateTime& blockDate, const QString& blockHash, double nVerificationProgress, bool header) { #ifdef Q_OS_MAC diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h index 72f407409866..d596662e382a 100644 --- a/src/qt/bitcoingui.h +++ b/src/qt/bitcoingui.h @@ -209,8 +209,6 @@ class BitcoinGUI : public QMainWindow void updateProgressBarVisibility(); - void updateToolBarShortcuts(); - Q_SIGNALS: /** Signal raised when a URI was entered or dragged to the GUI */ void receivedURI(const QString &uri); diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index f1f7f1230f9d..a67fb540d428 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -45,6 +45,7 @@ #include #include #include +#include #include #include #include @@ -1790,6 +1791,26 @@ void updateMacFocusRects() #endif } +void updateButtonGroupShortcuts(QButtonGroup* buttonGroup) +{ + if (buttonGroup == nullptr) { + return; + } +#ifdef Q_OS_MAC + auto modifier = Qt::CTRL; +#else + auto modifier = Qt::ALT; +#endif + int nKey = 0; + for (auto button : buttonGroup->buttons()) { + if (button->isVisible()) { + button->setShortcut(QKeySequence(modifier + Qt::Key_1 + nKey++)); + } else { + button->setShortcut(QKeySequence()); + } + } +} + void setClipboard(const QString& str) { QApplication::clipboard()->setText(str, QClipboard::Clipboard); diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h index 7cbb9a552667..86ca944303ed 100644 --- a/src/qt/guiutil.h +++ b/src/qt/guiutil.h @@ -31,6 +31,7 @@ class Node; QT_BEGIN_NAMESPACE class QAbstractButton; class QAbstractItemView; +class QButtonGroup; class QDateTime; class QFont; class QLineEdit; @@ -375,6 +376,9 @@ namespace GUIUtil /** Enable/Disable the macOS focus rects depending on the current theme. */ void updateMacFocusRects(); + /** Update shortcuts for individual buttons in QButtonGroup based on their visibility. */ + void updateButtonGroupShortcuts(QButtonGroup* buttonGroup); + /* Convert QString to OS specific boost path through UTF-8 */ fs::path qstringToBoostPath(const QString &path); From af4982a3eed28c677d8b6402a9dd6eed42788f78 Mon Sep 17 00:00:00 2001 From: UdjinM6 Date: Mon, 5 Oct 2020 18:29:28 +0300 Subject: [PATCH 3/3] Use `GUIUtil::updateButtonGroupShortcuts()` for tab buttons in options, rpcconsole and sign/verify dialog --- src/qt/optionsdialog.cpp | 2 ++ src/qt/rpcconsole.cpp | 2 ++ src/qt/signverifymessagedialog.cpp | 8 ++++++++ src/qt/signverifymessagedialog.h | 2 ++ 4 files changed, 14 insertions(+) diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp index ed432b06d853..3d5066435bf1 100644 --- a/src/qt/optionsdialog.cpp +++ b/src/qt/optionsdialog.cpp @@ -441,6 +441,7 @@ void OptionsDialog::updatePrivateSendVisibility() bool fEnabled = false; #endif ui->btnPrivateSend->setVisible(fEnabled); + GUIUtil::updateButtonGroupShortcuts(pageButtons); } void OptionsDialog::updateWidth() @@ -465,6 +466,7 @@ void OptionsDialog::showEvent(QShowEvent* event) { if (!event->spontaneous()) { updateWidth(); + GUIUtil::updateButtonGroupShortcuts(pageButtons); } QDialog::showEvent(event); } diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp index e93f67f4599b..68b43dfecb96 100644 --- a/src/qt/rpcconsole.cpp +++ b/src/qt/rpcconsole.cpp @@ -1271,6 +1271,8 @@ void RPCConsole::showEvent(QShowEvent *event) { QWidget::showEvent(event); + GUIUtil::updateButtonGroupShortcuts(pageButtons); + if (!clientModel || !clientModel->getPeerTableModel()) return; diff --git a/src/qt/signverifymessagedialog.cpp b/src/qt/signverifymessagedialog.cpp index 02df9bd2b5d7..96fcf385f28b 100644 --- a/src/qt/signverifymessagedialog.cpp +++ b/src/qt/signverifymessagedialog.cpp @@ -302,3 +302,11 @@ bool SignVerifyMessageDialog::eventFilter(QObject *object, QEvent *event) } return QDialog::eventFilter(object, event); } + +void SignVerifyMessageDialog::showEvent(QShowEvent* event) +{ + if (!event->spontaneous()) { + GUIUtil::updateButtonGroupShortcuts(pageButtons); + } + QDialog::showEvent(event); +} diff --git a/src/qt/signverifymessagedialog.h b/src/qt/signverifymessagedialog.h index afdd8fc1d62b..e1de346f2946 100644 --- a/src/qt/signverifymessagedialog.h +++ b/src/qt/signverifymessagedialog.h @@ -40,6 +40,8 @@ class SignVerifyMessageDialog : public QDialog WalletModel *model; QButtonGroup* pageButtons; + void showEvent(QShowEvent* event) override; + private Q_SLOTS: /** custom tab buttons clicked */ void showPage(int index);