aboutsummaryrefslogtreecommitdiff
path: root/src/qt/bitcoingui.cpp
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2018-04-05 18:19:33 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2018-04-05 18:19:35 +0200
commit5f0c6a7b0e47e03f848dc992d37fe209dd9c6975 (patch)
tree63649a5029f2d3d32b1c253a19d19e7d86914ce8 /src/qt/bitcoingui.cpp
parent2b54155a459c235626fddc4495bb681b93d3dbc5 (diff)
parent996013769711bd507cdcd6dde88cbd59fcd4fbad (diff)
downloadbitcoin-5f0c6a7b0e47e03f848dc992d37fe209dd9c6975.tar.xz
Merge #10244: Refactor: separate gui from wallet and node
9960137 Add developer notes about blocking GUI code (Russell Yanofsky) 9a61eed Use WalletBalances struct in Qt (Russell Yanofsky) 56f33ca Remove direct bitcoin calls from qt/sendcoinsdialog.cpp (Russell Yanofsky) e872c93 Remove direct bitcoin access from qt/guiutil.cpp (Russell Yanofsky) 5884558 Remove direct bitcoin calls from qt transaction table files (Russell Yanofsky) 3cab2ce Remove direct bitcoin calls from qt/paymentserver.cpp (Russell Yanofsky) 3ec2ebc Remove direct bitcoin calls from qt/addresstablemodel.cpp (Russell Yanofsky) 827de03 Remove direct bitcoin calls from qt/coincontroldialog.cpp (Russell Yanofsky) a0704a8 Remove most direct bitcoin calls from qt/walletmodel.cpp (Russell Yanofsky) 90d4640 Remove direct bitcoin calls from qt/optionsdialog.cpp (Russell Yanofsky) 582daf6 Remove direct bitcoin calls from qt/rpcconsole.cpp (Russell Yanofsky) 3034a46 Remove direct bitcoin calls from qt/bantablemodel.cpp (Russell Yanofsky) e0b66a3 Remove direct bitcoin calls from qt/peertablemodel.cpp (Russell Yanofsky) d7c2c95 Remove direct bitcoin calls from qt/intro.cpp (Russell Yanofsky) fe6f27e Remove direct bitcoin calls from qt/clientmodel.cpp (Russell Yanofsky) 5fba3af Remove direct bitcoin calls from qt/splashscreen.cpp (Russell Yanofsky) c2f672f Remove direct bitcoin calls from qt/utilitydialog.cpp (Russell Yanofsky) 3d619e9 Remove direct bitcoin calls from qt/bitcoingui.cpp (Russell Yanofsky) c0f2756 Remove direct bitcoin calls from qt/optionsmodel.cpp (Russell Yanofsky) 71e0d90 Remove direct bitcoin calls from qt/bitcoin.cpp (Russell Yanofsky) ea73b84 Add src/interface/README.md (Russell Yanofsky) Pull request description: This is a refactoring PR that does not change behavior in any way. This change: 1. Creates abstract [`Node`](https://github.com/ryanofsky/bitcoin/blob/pr/ipc-local/src/interface/node.h) and [`Wallet`](https://github.com/ryanofsky/bitcoin/blob/pr/ipc-local/src/interface/wallet.h) interfaces in [`src/interface/`](https://github.com/ryanofsky/bitcoin/tree/pr/ipc-local/src/interface) 1. Updates Qt code to call the new interfaces. This largely consists of diffs of the form: ```diff - InitLogging(); - InitParameterInteraction(); + node.initLogging(); + node.initParameterInteraction(); ``` This change allows followup PR #10102 (makes `bitcoin-qt` control `bitcoind` over an IPC socket) to work without any significant updates to Qt code. Additionally: * It provides a single place to describe the interface between GUI and daemon code. * It can make better GUI testing possible, because Node and Wallet objects have virtual methods that can be overloaded for mocking. * It can be used to help make the GUI more responsive (see https://github.com/bitcoin/bitcoin/issues/10504) Other notes: * I used python scripts [hide-globals.py](https://github.com/ryanofsky/home/blob/master/src/2017/hide-globals/hide-globals.py) and [replace-syms.py](https://github.com/ryanofsky/home/blob/master/src/2017/hide-globals/replace-syms.py) to identify all the places where Qt code was accessing libbitcoin global variables and calling functions accessing those global variables. * These changes were originally part of #10102. Thanks to @JeremyRubin for the suggestion of splitting them out. Commits: - [`ea73b84d2d` Add src/interface/README.md](https://github.com/bitcoin/bitcoin/pull/10244/commits/ea73b84d2ddde22487dee0f71d7a619051e067f2) - [`71e0d90876` Remove direct bitcoin calls from qt/bitcoin.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/71e0d90876efd11e2a4aeb8f3f806c5a1fd54b42) - [`c0f2756be5` Remove direct bitcoin calls from qt/optionsmodel.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/c0f2756be517feddacd7c6b89b9faa888b3fef8e) - [`3d619e9d36` Remove direct bitcoin calls from qt/bitcoingui.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/3d619e9d3658e36cba4a19a5bed33e5538317b27) - [`c2f672fb19` Remove direct bitcoin calls from qt/utilitydialog.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/c2f672fb1960399389dea9cdd8f76d7156c2c88b) - [`5fba3af21e` Remove direct bitcoin calls from qt/splashscreen.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/5fba3af21e44ab7552c57782de430c1f4cfd6697) - [`fe6f27e6ea` Remove direct bitcoin calls from qt/clientmodel.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/fe6f27e6ea68a139d3a98b30a53706008ef8b132) - [`d7c2c95948` Remove direct bitcoin calls from qt/intro.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/d7c2c9594897c39df6739b92610dfb5a7a1cb3ec) - [`e0b66a3b7c` Remove direct bitcoin calls from qt/peertablemodel.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/e0b66a3b7c5d3a079636d61fcf611bb6b36c7bc1) - [`3034a462a5` Remove direct bitcoin calls from qt/bantablemodel.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/3034a462a5d30144cf0ec801d07f0c8c36d560f3) - [`582daf6d22` Remove direct bitcoin calls from qt/rpcconsole.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/582daf6d22da5394d02a12003b9542d9f5865ae2) - [`90d4640b7e` Remove direct bitcoin calls from qt/optionsdialog.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/90d4640b7eff3154a0750c5acb52d39bd41e0bbb) - [`a0704a8996` Remove most direct bitcoin calls from qt/walletmodel.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/a0704a8996bb950ae3c4d5b5a30e9dfe34cde1d3) - [`827de038ab` Remove direct bitcoin calls from qt/coincontroldialog.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/827de038ab6fa58aa3d46151eb2f8dc6add7743e) - [`3ec2ebcd9b` Remove direct bitcoin calls from qt/addresstablemodel.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/3ec2ebcd9b4beb4277f1f4791c6acbc538784f70) - [`3cab2ce5f9` Remove direct bitcoin calls from qt/paymentserver.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/3cab2ce5f9e159ad5a2e9ed682f28121b5248580) - [`58845587e1` Remove direct bitcoin calls from qt transaction table files](https://github.com/bitcoin/bitcoin/pull/10244/commits/58845587e11140e81f087a74c3db76a4d1fc3a1a) - [`e872c93ee8` Remove direct bitcoin access from qt/guiutil.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/e872c93ee87477130fb877da1a536b4c693bbab9) - [`56f33ca349` Remove direct bitcoin calls from qt/sendcoinsdialog.cpp](https://github.com/bitcoin/bitcoin/pull/10244/commits/56f33ca349b3721a15fce3bf0b6d4fd7fd788970) - [`9a61eed1fc` Use WalletBalances struct in Qt](https://github.com/bitcoin/bitcoin/pull/10244/commits/9a61eed1fcc16ddcedc315045f470e1958b0760b) - [`9960137697` Add developer notes about blocking GUI code](https://github.com/bitcoin/bitcoin/pull/10244/commits/996013769711bd507cdcd6dde88cbd59fcd4fbad) Tree-SHA512: 7b9eff2f37d4ea21972d7cc6a3dbe144248595d6c330524396d867f3cd2841d666cdc040fd3605af559dab51b075812402f61d628d16cf13719335c1d8bf8ed3
Diffstat (limited to 'src/qt/bitcoingui.cpp')
-rw-r--r--src/qt/bitcoingui.cpp33
1 files changed, 17 insertions, 16 deletions
diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp
index e4207fce99..63a2a200b2 100644
--- a/src/qt/bitcoingui.cpp
+++ b/src/qt/bitcoingui.cpp
@@ -30,6 +30,8 @@
#include <chainparams.h>
#include <init.h>
+#include <interface/handler.h>
+#include <interface/node.h>
#include <ui_interface.h>
#include <util.h>
@@ -72,9 +74,10 @@ const std::string BitcoinGUI::DEFAULT_UIPLATFORM =
#endif
;
-BitcoinGUI::BitcoinGUI(const PlatformStyle *_platformStyle, const NetworkStyle *networkStyle, QWidget *parent) :
+BitcoinGUI::BitcoinGUI(interface::Node& node, const PlatformStyle *_platformStyle, const NetworkStyle *networkStyle, QWidget *parent) :
QMainWindow(parent),
enableWallet(false),
+ m_node(node),
clientModel(0),
walletFrame(0),
unitDisplayControl(0),
@@ -149,8 +152,8 @@ BitcoinGUI::BitcoinGUI(const PlatformStyle *_platformStyle, const NetworkStyle *
setUnifiedTitleAndToolBarOnMac(true);
#endif
- rpcConsole = new RPCConsole(_platformStyle, 0);
- helpMessageDialog = new HelpMessageDialog(this, false);
+ rpcConsole = new RPCConsole(node, _platformStyle, 0);
+ helpMessageDialog = new HelpMessageDialog(node, this, false);
#ifdef ENABLE_WALLET
if(enableWallet)
{
@@ -490,7 +493,7 @@ void BitcoinGUI::setClientModel(ClientModel *_clientModel)
connect(_clientModel, SIGNAL(networkActiveChanged(bool)), this, SLOT(setNetworkActive(bool)));
modalOverlay->setKnownBestHeight(_clientModel->getHeaderTipHeight(), QDateTime::fromTime_t(_clientModel->getHeaderTipTime()));
- setNumBlocks(_clientModel->getNumBlocks(), _clientModel->getLastBlockDate(), _clientModel->getVerificationProgress(nullptr), false);
+ setNumBlocks(m_node.getNumBlocks(), QDateTime::fromTime_t(m_node.getLastBlockTime()), m_node.getVerificationProgress(), false);
connect(_clientModel, SIGNAL(numBlocksChanged(int,QDateTime,double,bool)), this, SLOT(setNumBlocks(int,QDateTime,double,bool)));
// Receive and report messages from client model
@@ -665,7 +668,7 @@ void BitcoinGUI::aboutClicked()
if(!clientModel)
return;
- HelpMessageDialog dlg(this, true);
+ HelpMessageDialog dlg(m_node, this, true);
dlg.exec();
}
@@ -748,7 +751,7 @@ void BitcoinGUI::updateNetworkState()
QString tooltip;
- if (clientModel->getNetworkActive()) {
+ if (m_node.getNetworkActive()) {
tooltip = tr("%n active connection(s) to Bitcoin network", "", count) + QString(".<br>") + tr("Click to disable network activity.");
} else {
tooltip = tr("Network activity disabled.") + QString("<br>") + tr("Click to enable network activity again.");
@@ -1007,7 +1010,7 @@ void BitcoinGUI::incomingTransaction(const QString& date, int unit, const CAmoun
// On new transaction, make an info balloon
QString msg = tr("Date: %1\n").arg(date) +
tr("Amount: %1\n").arg(BitcoinUnits::formatWithUnit(unit, amount, true));
- if (WalletModel::isMultiwallet() && !walletName.isEmpty()) {
+ if (m_node.getWallets().size() > 1 && !walletName.isEmpty()) {
msg += tr("Wallet: %1\n").arg(walletName);
}
msg += tr("Type: %1\n").arg(type);
@@ -1113,7 +1116,7 @@ void BitcoinGUI::updateWalletStatus()
}
WalletModel * const walletModel = walletView->getWalletModel();
setEncryptionStatus(walletModel->getEncryptionStatus());
- setHDStatus(walletModel->hdEnabled());
+ setHDStatus(walletModel->wallet().hdEnabled());
}
#endif // ENABLE_WALLET
@@ -1149,7 +1152,7 @@ void BitcoinGUI::toggleHidden()
void BitcoinGUI::detectShutdown()
{
- if (ShutdownRequested())
+ if (m_node.shutdownRequested())
{
if(rpcConsole)
rpcConsole->hide();
@@ -1214,22 +1217,20 @@ static bool ThreadSafeMessageBox(BitcoinGUI *gui, const std::string& message, co
void BitcoinGUI::subscribeToCoreSignals()
{
// Connect signals to client
- uiInterface.ThreadSafeMessageBox.connect(boost::bind(ThreadSafeMessageBox, this, _1, _2, _3));
- uiInterface.ThreadSafeQuestion.connect(boost::bind(ThreadSafeMessageBox, this, _1, _3, _4));
+ m_handler_message_box = m_node.handleMessageBox(boost::bind(ThreadSafeMessageBox, this, _1, _2, _3));
+ m_handler_question = m_node.handleQuestion(boost::bind(ThreadSafeMessageBox, this, _1, _3, _4));
}
void BitcoinGUI::unsubscribeFromCoreSignals()
{
// Disconnect signals from client
- uiInterface.ThreadSafeMessageBox.disconnect(boost::bind(ThreadSafeMessageBox, this, _1, _2, _3));
- uiInterface.ThreadSafeQuestion.disconnect(boost::bind(ThreadSafeMessageBox, this, _1, _3, _4));
+ m_handler_message_box->disconnect();
+ m_handler_question->disconnect();
}
void BitcoinGUI::toggleNetworkActive()
{
- if (clientModel) {
- clientModel->setNetworkActive(!clientModel->getNetworkActive());
- }
+ m_node.setNetworkActive(!m_node.getNetworkActive());
}
UnitDisplayStatusBarControl::UnitDisplayStatusBarControl(const PlatformStyle *platformStyle) :