Skip to content

Commit

Permalink
gui: toggle chain via menu
Browse files Browse the repository at this point in the history
The selected chain is stored in the QSettings for mainnet.
  • Loading branch information
Sjors committed Sep 1, 2021
1 parent 7be143a commit 0391893
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/qt/bitcoin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -559,6 +559,10 @@ int GuiMain(int argc, char* argv[])
// - QSettings() will use the new application name after this, resulting in network-specific settings
// - Needs to be done before createOptionsModel

QSettings settings;
const std::string chain = settings.value("chain", "").toString().toStdString();
if (chain != "") gArgs.SoftSetArg("-chain", chain);

// Check for chain settings (Params() calls are only valid after this clause)
try {
SelectParams(gArgs.GetChainName());
Expand Down
37 changes: 37 additions & 0 deletions src/qt/bitcoingui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -441,6 +441,41 @@ void BitcoinGUI::createActions()
}
#endif // ENABLE_WALLET

m_chain_selection_action = new QAction(tr("Switch chain"), this);
m_chain_selection_action->setStatusTip(tr("Restart application using a different (test) network"));
m_chain_selection_menu = new QMenu(this);

connect(m_chain_selection_menu, &QMenu::aboutToShow, [this] {
m_chain_selection_menu->clear();
const std::vector<std::pair<QString, QString>> chains = {{"main", "Bitcoin"}, {"test", "Testnet"}, {"regtest", "Regtest"}, {"signet", "Signet"}};
for (auto chain : chains) {
QAction* action = m_chain_selection_menu->addAction(chain.second);

if (gArgs.GetChainName() == chain.first.toStdString()) {
action->setEnabled(false);
}

connect(action, &QAction::triggered, [this, chain] {
QMessageBox::StandardButton btnRetVal = QMessageBox::question(this, tr("Confirm chain"),
tr("Client restart required to switch chain.") + "<br><br>" + tr("Client will be shut down. Do you want to proceed?"),
QMessageBox::Yes | QMessageBox::Cancel, QMessageBox::Cancel);

if(btnRetVal == QMessageBox::Cancel) return;

// QSettings are stored seperately for each network. Switch application name
// to mainnet before storing the selected chain.
QScopedPointer<const NetworkStyle> networkStyle(NetworkStyle::instantiate("main"));
assert(!networkStyle.isNull());
QApplication::setApplicationName(networkStyle->getAppName());

QSettings settings;
settings.setValue("chain", chain.first);
QApplication::quit();
});
}
});
m_chain_selection_action->setMenu(m_chain_selection_menu);

connect(new QShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_C), this), &QShortcut::activated, this, &BitcoinGUI::showDebugWindowActivateConsole);
connect(new QShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_D), this), &QShortcut::activated, this, &BitcoinGUI::showDebugWindow);
}
Expand Down Expand Up @@ -472,6 +507,8 @@ void BitcoinGUI::createMenuBar()
file->addAction(m_load_psbt_clipboard_action);
file->addSeparator();
}
file->addAction(m_chain_selection_action);
file->addSeparator();
file->addAction(quitAction);

QMenu *settings = appMenuBar->addMenu(tr("&Settings"));
Expand Down
3 changes: 3 additions & 0 deletions src/qt/bitcoingui.h
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,9 @@ class BitcoinGUI : public QMainWindow
QAction* m_wallet_selector_action = nullptr;
QAction* m_mask_values_action{nullptr};

QAction* m_chain_selection_action{nullptr};
QMenu* m_chain_selection_menu{nullptr};

QLabel *m_wallet_selector_label = nullptr;
QComboBox* m_wallet_selector = nullptr;

Expand Down

0 comments on commit 0391893

Please sign in to comment.