Skip to content

Commit 3f9dca5

Browse files
committed
merge bitcoin-core/gui#398: Pass WalletModel object to the WalletView constructor
1 parent 9e58f8c commit 3f9dca5

File tree

5 files changed

+51
-72
lines changed

5 files changed

+51
-72
lines changed

src/qt/bitcoingui.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -915,8 +915,8 @@ void BitcoinGUI::addWallet(WalletModel* walletModel)
915915
{
916916
if (!walletFrame) return;
917917

918-
WalletView* wallet_view = new WalletView(walletFrame);
919-
if (!walletFrame->addWallet(walletModel, wallet_view)) return;
918+
WalletView* wallet_view = new WalletView(walletModel, walletFrame);
919+
if (!walletFrame->addView(wallet_view)) return;
920920

921921
rpcConsole->addWallet(walletModel);
922922
if (m_wallet_selector->count() == 0) {

src/qt/walletframe.cpp

+4-5
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,13 @@ void WalletFrame::setClientModel(ClientModel *_clientModel)
7878
}
7979
}
8080

81-
bool WalletFrame::addWallet(WalletModel* walletModel, WalletView* walletView)
81+
bool WalletFrame::addView(WalletView* walletView)
8282
{
83-
if (!clientModel || !walletModel) return false;
83+
if (!clientModel) return false;
8484

85-
if (mapWalletViews.count(walletModel) > 0) return false;
85+
if (mapWalletViews.count(walletView->getWalletModel()) > 0) return false;
8686

8787
walletView->setClientModel(clientModel);
88-
walletView->setWalletModel(walletModel);
8988
walletView->showOutOfSyncWarning(bOutOfSync);
9089

9190
WalletView* current_wallet_view = currentWalletView();
@@ -96,7 +95,7 @@ bool WalletFrame::addWallet(WalletModel* walletModel, WalletView* walletView)
9695
}
9796

9897
walletStack->addWidget(walletView);
99-
mapWalletViews[walletModel] = walletView;
98+
mapWalletViews[walletView->getWalletModel()] = walletView;
10099

101100
return true;
102101
}

src/qt/walletframe.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class WalletFrame : public QFrame
3737

3838
void setClientModel(ClientModel *clientModel);
3939

40-
bool addWallet(WalletModel* walletModel, WalletView* walletView);
40+
bool addView(WalletView* walletView);
4141
void setCurrentWallet(WalletModel* wallet_model);
4242
void removeWallet(WalletModel* wallet_model);
4343
void removeAllWallets();

src/qt/walletview.cpp

+36-56
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,23 @@
3535
#include <QSettings>
3636
#include <QVBoxLayout>
3737

38-
WalletView::WalletView(QWidget* parent) :
39-
QStackedWidget(parent),
40-
clientModel(nullptr),
41-
walletModel(nullptr)
38+
WalletView::WalletView(WalletModel* wallet_model, QWidget* parent)
39+
: QStackedWidget(parent),
40+
clientModel(nullptr),
41+
walletModel(wallet_model)
4242
{
43+
assert(walletModel);
44+
4345
// Create tabs
4446
overviewPage = new OverviewPage();
47+
overviewPage->setWalletModel(walletModel);
4548

4649
transactionsPage = new QWidget(this);
4750
QVBoxLayout *vbox = new QVBoxLayout();
4851
QHBoxLayout *hbox_buttons = new QHBoxLayout();
4952
transactionView = new TransactionView(this);
53+
transactionView->setModel(walletModel);
54+
5055
vbox->addWidget(transactionView);
5156
QPushButton *exportButton = new QPushButton(tr("&Export"), this);
5257
exportButton->setToolTip(tr("Export the data in the current tab to a file"));
@@ -75,11 +80,19 @@ WalletView::WalletView(QWidget* parent) :
7580
transactionsPage->setLayout(vbox);
7681

7782
receiveCoinsPage = new ReceiveCoinsDialog();
83+
receiveCoinsPage->setModel(walletModel);
84+
7885
sendCoinsPage = new SendCoinsDialog();
86+
sendCoinsPage->setModel(walletModel);
87+
7988
coinJoinCoinsPage = new SendCoinsDialog(true);
89+
coinJoinCoinsPage->setModel(walletModel);
8090

8191
usedSendingAddressesPage = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::SendingTab, this);
92+
usedSendingAddressesPage->setModel(walletModel->getAddressTableModel());
93+
8294
usedReceivingAddressesPage = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::ReceivingTab, this);
95+
usedReceivingAddressesPage->setModel(walletModel->getAddressTableModel());
8396

8497
addWidget(overviewPage);
8598
addWidget(transactionsPage);
@@ -90,6 +103,7 @@ WalletView::WalletView(QWidget* parent) :
90103
QSettings settings;
91104
if (settings.value("fShowMasternodesTab").toBool()) {
92105
masternodeListPage = new MasternodeList();
106+
masternodeListPage->setWalletModel(walletModel);
93107
addWidget(masternodeListPage);
94108
}
95109
if (settings.value("fShowGovernanceTab").toBool()) {
@@ -123,6 +137,21 @@ WalletView::WalletView(QWidget* parent) :
123137

124138
connect(this, &WalletView::setPrivacy, overviewPage, &OverviewPage::setPrivacy);
125139

140+
// Receive and pass through messages from wallet model
141+
connect(walletModel, &WalletModel::message, this, &WalletView::message);
142+
143+
// Handle changes in encryption status
144+
connect(walletModel, &WalletModel::encryptionStatusChanged, this, &WalletView::encryptionStatusChanged);
145+
146+
// Balloon pop-up for new transaction
147+
connect(walletModel->getTransactionTableModel(), &TransactionTableModel::rowsInserted, this, &WalletView::processNewTransaction);
148+
149+
// Ask for passphrase if needed
150+
connect(walletModel, &WalletModel::requireUnlock, this, &WalletView::unlockWallet);
151+
152+
// Show progress dialog
153+
connect(walletModel, &WalletModel::showProgress, this, &WalletView::showProgress);
154+
126155
GUIUtil::disableMacFocusRect(this);
127156
}
128157

@@ -150,50 +179,15 @@ void WalletView::setClientModel(ClientModel *_clientModel)
150179
if (settings.value("fShowGovernanceTab").toBool() && governanceListPage != nullptr) {
151180
governanceListPage->setClientModel(_clientModel);
152181
}
153-
if (walletModel) walletModel->setClientModel(_clientModel);
154-
}
155-
156-
void WalletView::setWalletModel(WalletModel *_walletModel)
157-
{
158-
this->walletModel = _walletModel;
159-
160-
// Put transaction list in tabs
161-
transactionView->setModel(_walletModel);
162-
overviewPage->setWalletModel(_walletModel);
163-
QSettings settings;
164-
if (settings.value("fShowMasternodesTab").toBool()) {
165-
masternodeListPage->setWalletModel(_walletModel);
166-
}
167-
receiveCoinsPage->setModel(_walletModel);
168-
sendCoinsPage->setModel(_walletModel);
169-
coinJoinCoinsPage->setModel(_walletModel);
170-
usedReceivingAddressesPage->setModel(_walletModel ? _walletModel->getAddressTableModel() : nullptr);
171-
usedSendingAddressesPage->setModel(_walletModel ? _walletModel->getAddressTableModel() : nullptr);
172-
173-
if (_walletModel)
174-
{
175-
// Receive and pass through messages from wallet model
176-
connect(_walletModel, &WalletModel::message, this, &WalletView::message);
177-
178-
// Handle changes in encryption status
179-
connect(_walletModel, &WalletModel::encryptionStatusChanged, this, &WalletView::encryptionStatusChanged);
180-
181-
// Balloon pop-up for new transaction
182-
connect(_walletModel->getTransactionTableModel(), &TransactionTableModel::rowsInserted, this, &WalletView::processNewTransaction);
183-
184-
// Ask for passphrase if needed
185-
connect(_walletModel, &WalletModel::requireUnlock, this, &WalletView::unlockWallet);
186-
187-
// Show progress dialog
188-
connect(_walletModel, &WalletModel::showProgress, this, &WalletView::showProgress);
189-
}
182+
walletModel->setClientModel(_clientModel);
190183
}
191184

192185
void WalletView::processNewTransaction(const QModelIndex& parent, int start, int /*end*/)
193186
{
194187
// Prevent balloon-spam when initial block download is in progress
195-
if (!walletModel || !clientModel || clientModel->node().isInitialBlockDownload())
188+
if (!clientModel || clientModel->node().isInitialBlockDownload()) {
196189
return;
190+
}
197191

198192
TransactionTableModel *ttm = walletModel->getTransactionTableModel();
199193
if (!ttm || ttm->processingQueuedTransactions())
@@ -302,8 +296,6 @@ void WalletView::showOutOfSyncWarning(bool fShow)
302296

303297
void WalletView::encryptWallet()
304298
{
305-
if(!walletModel)
306-
return;
307299
AskPassphraseDialog dlg(AskPassphraseDialog::Encrypt, this);
308300
dlg.setModel(walletModel);
309301
dlg.exec();
@@ -340,10 +332,7 @@ void WalletView::changePassphrase()
340332

341333
void WalletView::unlockWallet(bool fForMixingOnly)
342334
{
343-
if(!walletModel)
344-
return;
345335
// Unlock wallet when requested by wallet model
346-
347336
if (walletModel->getEncryptionStatus() == WalletModel::Locked || walletModel->getEncryptionStatus() == WalletModel::UnlockedForMixingOnly)
348337
{
349338
AskPassphraseDialog dlg(fForMixingOnly ? AskPassphraseDialog::UnlockMixing : AskPassphraseDialog::Unlock, this);
@@ -354,25 +343,16 @@ void WalletView::unlockWallet(bool fForMixingOnly)
354343

355344
void WalletView::lockWallet()
356345
{
357-
if(!walletModel)
358-
return;
359-
360346
walletModel->setWalletLocked(true);
361347
}
362348

363349
void WalletView::usedSendingAddresses()
364350
{
365-
if(!walletModel)
366-
return;
367-
368351
GUIUtil::bringToFront(usedSendingAddressesPage);
369352
}
370353

371354
void WalletView::usedReceivingAddresses()
372355
{
373-
if(!walletModel)
374-
return;
375-
376356
GUIUtil::bringToFront(usedReceivingAddressesPage);
377357
}
378358

src/qt/walletview.h

+8-8
Original file line numberDiff line numberDiff line change
@@ -37,27 +37,27 @@ class WalletView : public QStackedWidget
3737
Q_OBJECT
3838

3939
public:
40-
explicit WalletView(QWidget* parent);
40+
explicit WalletView(WalletModel* wallet_model, QWidget* parent);
4141
~WalletView();
4242

4343
/** Set the client model.
4444
The client model represents the part of the core that communicates with the P2P network, and is wallet-agnostic.
4545
*/
4646
void setClientModel(ClientModel *clientModel);
47-
WalletModel *getWalletModel() { return walletModel; }
48-
/** Set the wallet model.
49-
The wallet model represents a bitcoin wallet, and offers access to the list of transactions, address book and sending
50-
functionality.
51-
*/
52-
void setWalletModel(WalletModel *walletModel);
47+
WalletModel* getWalletModel() const noexcept { return walletModel; }
5348

5449
bool handlePaymentRequest(const SendCoinsRecipient& recipient);
5550

5651
void showOutOfSyncWarning(bool fShow);
5752

5853
private:
5954
ClientModel *clientModel;
60-
WalletModel *walletModel;
55+
56+
//!
57+
//! The wallet model represents a bitcoin wallet, and offers access to
58+
//! the list of transactions, address book and sending functionality.
59+
//!
60+
WalletModel* const walletModel;
6161

6262
OverviewPage *overviewPage;
6363
QWidget *transactionsPage;

0 commit comments

Comments
 (0)