diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h --- a/src/qt/bitcoingui.h +++ b/src/qt/bitcoingui.h @@ -9,6 +9,8 @@ #include #endif +#include + #include #include @@ -47,6 +49,10 @@ class QProgressDialog; QT_END_NAMESPACE +namespace GUIUtil { +class ClickableLabel; +} + /** * Bitcoin GUI main class. This class represents the main window of the Bitcoin * UI. It communicates with both the client and wallet models to give the user @@ -100,8 +106,8 @@ UnitDisplayStatusBarControl *unitDisplayControl = nullptr; QLabel *labelWalletEncryptionIcon = nullptr; QLabel *labelWalletHDStatusIcon = nullptr; - QLabel *labelProxyIcon = nullptr; - QLabel *connectionsControl = nullptr; + GUIUtil::ClickableLabel *labelProxyIcon = nullptr; + GUIUtil::ClickableLabel *connectionsControl = nullptr; QLabel *labelBlocksIcon = nullptr; QLabel *progressBarLabel = nullptr; QProgressBar *progressBar = nullptr; @@ -174,6 +180,9 @@ void updateHeadersSyncProgressLabel(); + /** Open the OptionsDialog on the specified tab index */ + void openOptionsDialogWithTab(OptionsDialog::Tab tab); + Q_SIGNALS: /** Signal raised when a URI was entered or dragged to the GUI */ void receivedURI(const QString &uri); @@ -283,9 +292,6 @@ * icon accordingly. */ void setTrayIconVisible(bool); - /** Toggle networking */ - void toggleNetworkActive(); - void showModalOverlay(); }; diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -148,7 +148,7 @@ unitDisplayControl = new UnitDisplayStatusBarControl(platformStyle); labelWalletEncryptionIcon = new QLabel(); labelWalletHDStatusIcon = new QLabel(); - labelProxyIcon = new QLabel(); + labelProxyIcon = new GUIUtil::ClickableLabel(); connectionsControl = new GUIUtil::ClickableLabel(); labelBlocksIcon = new GUIUtil::ClickableLabel(); if (enableWallet) { @@ -200,8 +200,10 @@ // Subscribe to notifications from core subscribeToCoreSignals(); - connect(connectionsControl, SIGNAL(clicked(QPoint)), this, - SLOT(toggleNetworkActive())); + connect(connectionsControl, &GUIUtil::ClickableLabel::clicked, + [this] { m_node.setNetworkActive(!m_node.getNetworkActive()); }); + connect(labelProxyIcon, &GUIUtil::ClickableLabel::clicked, + [this] { openOptionsDialogWithTab(OptionsDialog::TAB_NETWORK); }); modalOverlay = new ModalOverlay(this->centralWidget()); #ifdef ENABLE_WALLET @@ -719,11 +721,7 @@ #endif void BitcoinGUI::optionsClicked() { - if (!clientModel || !clientModel->getOptionsModel()) return; - - OptionsDialog dlg(this, enableWallet); - dlg.setModel(clientModel->getOptionsModel()); - dlg.exec(); + openOptionsDialogWithTab(OptionsDialog::TAB_MAIN); } void BitcoinGUI::aboutClicked() { @@ -856,6 +854,15 @@ } } +void BitcoinGUI::openOptionsDialogWithTab(OptionsDialog::Tab tab) { + if (!clientModel || !clientModel->getOptionsModel()) return; + + OptionsDialog dlg(this, enableWallet); + dlg.setCurrentTab(tab); + dlg.setModel(clientModel->getOptionsModel()); + dlg.exec(); +} + void BitcoinGUI::setNumBlocks(int count, const QDateTime &blockDate, double nVerificationProgress, bool header) { if (modalOverlay) { @@ -1322,10 +1329,6 @@ m_handler_question->disconnect(); } -void BitcoinGUI::toggleNetworkActive() { - m_node.setNetworkActive(!m_node.getNetworkActive()); -} - UnitDisplayStatusBarControl::UnitDisplayStatusBarControl( const PlatformStyle *platformStyle) : optionsModel(0), menu(0) { diff --git a/src/qt/optionsdialog.h b/src/qt/optionsdialog.h --- a/src/qt/optionsdialog.h +++ b/src/qt/optionsdialog.h @@ -37,8 +37,14 @@ explicit OptionsDialog(QWidget *parent, bool enableWallet); ~OptionsDialog(); + enum Tab { + TAB_MAIN, + TAB_NETWORK, + }; + void setModel(OptionsModel *model); void setMapper(); + void setCurrentTab(OptionsDialog::Tab tab); private Q_SLOTS: /* set OK button state (enabled / disabled) */ diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp --- a/src/qt/optionsdialog.cpp +++ b/src/qt/optionsdialog.cpp @@ -173,6 +173,15 @@ SLOT(showRestartWarning())); } +void OptionsDialog::setCurrentTab(OptionsDialog::Tab tab) { + QWidget *tab_widget = nullptr; + if (tab == OptionsDialog::Tab::TAB_NETWORK) tab_widget = ui->tabNetwork; + if (tab == OptionsDialog::Tab::TAB_MAIN) tab_widget = ui->tabMain; + if (tab_widget && ui->tabWidget->currentWidget() != tab_widget) { + ui->tabWidget->setCurrentWidget(tab_widget); + } +} + void OptionsDialog::setMapper() { /* Main */ mapper->addMapping(ui->bitcoinAtStartup, OptionsModel::StartAtStartup);