Skip to content

Commit ba1fce9

Browse files
committed
Merge branch 'nullmodels' of https://github.com/laanwj/bitcoin
2 parents 5efee7d + dead0ff commit ba1fce9

11 files changed

+171
-98
lines changed

src/qt/aboutdialog.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ AboutDialog::AboutDialog(QWidget *parent) :
1212

1313
void AboutDialog::setModel(ClientModel *model)
1414
{
15-
ui->versionLabel->setText(model->formatFullVersion());
15+
if(model)
16+
{
17+
ui->versionLabel->setText(model->formatFullVersion());
18+
}
1619
}
1720

1821
AboutDialog::~AboutDialog()

src/qt/addressbookpage.cpp

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ AddressBookPage::~AddressBookPage()
5757
void AddressBookPage::setModel(AddressTableModel *model)
5858
{
5959
this->model = model;
60+
if(!model)
61+
return;
6062
// Refresh list from core
6163
model->updateList();
6264

@@ -96,16 +98,13 @@ void AddressBookPage::setModel(AddressTableModel *model)
9698
selectionChanged();
9799
}
98100

99-
QTableView *AddressBookPage::getCurrentTable()
100-
{
101-
return ui->tableView;
102-
}
103-
104101
void AddressBookPage::on_copyToClipboard_clicked()
105102
{
106103
// Copy currently selected address to clipboard
107104
// (or nothing, if nothing selected)
108-
QTableView *table = getCurrentTable();
105+
QTableView *table = ui->tableView;
106+
if(!table->selectionModel())
107+
return;
109108
QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
110109

111110
foreach (QModelIndex index, indexes)
@@ -117,6 +116,8 @@ void AddressBookPage::on_copyToClipboard_clicked()
117116

118117
void AddressBookPage::on_newAddressButton_clicked()
119118
{
119+
if(!model)
120+
return;
120121
EditAddressDialog dlg(
121122
tab == SendingTab ?
122123
EditAddressDialog::NewSendingAddress :
@@ -139,7 +140,9 @@ void AddressBookPage::on_newAddressButton_clicked()
139140

140141
void AddressBookPage::on_deleteButton_clicked()
141142
{
142-
QTableView *table = getCurrentTable();
143+
QTableView *table = ui->tableView;
144+
if(!table->selectionModel())
145+
return;
143146
QModelIndexList indexes = table->selectionModel()->selectedRows();
144147
if(!indexes.isEmpty())
145148
{
@@ -150,7 +153,9 @@ void AddressBookPage::on_deleteButton_clicked()
150153
void AddressBookPage::selectionChanged()
151154
{
152155
// Set button states based on selected tab and selection
153-
QTableView *table = getCurrentTable();
156+
QTableView *table = ui->tableView;
157+
if(!table->selectionModel())
158+
return;
154159

155160
if(table->selectionModel()->hasSelection())
156161
{
@@ -174,12 +179,14 @@ void AddressBookPage::selectionChanged()
174179

175180
void AddressBookPage::done(int retval)
176181
{
182+
QTableView *table = ui->tableView;
183+
if(!table->selectionModel() || !table->model())
184+
return;
177185
// When this is a tab/widget and not a model dialog, ignore "done"
178186
if(mode == ForEditing)
179187
return;
180188

181189
// Figure out which address was selected, and return it
182-
QTableView *table = getCurrentTable();
183190
QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
184191

185192
foreach (QModelIndex index, indexes)

src/qt/addressbookpage.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,6 @@ public slots:
4747
QString returnValue;
4848
QSortFilterProxyModel *proxyModel;
4949

50-
QTableView *getCurrentTable();
51-
5250
private slots:
5351
void on_deleteButton_clicked();
5452
void on_newAddressButton_clicked();

src/qt/askpassphrasedialog.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ void AskPassphraseDialog::setModel(WalletModel *model)
7272
void AskPassphraseDialog::accept()
7373
{
7474
std::string oldpass, newpass1, newpass2;
75+
if(!model)
76+
return;
7577
// TODO: mlock memory / munlock on return so they will not be swapped out, really need "mlockedstring" wrapper class to do this safely
7678
oldpass.reserve(MAX_PASSPHRASE_SIZE);
7779
newpass1.reserve(MAX_PASSPHRASE_SIZE);

src/qt/bitcoingui.cpp

Lines changed: 56 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -267,58 +267,62 @@ void BitcoinGUI::createToolBars()
267267
void BitcoinGUI::setClientModel(ClientModel *clientModel)
268268
{
269269
this->clientModel = clientModel;
270-
271-
if(clientModel->isTestNet())
270+
if(clientModel)
272271
{
273-
QString title_testnet = windowTitle() + QString(" ") + tr("[testnet]");
274-
setWindowTitle(title_testnet);
272+
if(clientModel->isTestNet())
273+
{
274+
QString title_testnet = windowTitle() + QString(" ") + tr("[testnet]");
275+
setWindowTitle(title_testnet);
275276
#ifndef Q_WS_MAC
276-
setWindowIcon(QIcon(":icons/bitcoin_testnet"));
277+
setWindowIcon(QIcon(":icons/bitcoin_testnet"));
277278
#else
278-
MacDockIconHandler::instance()->setIcon(QIcon(":icons/bitcoin_testnet"));
279+
MacDockIconHandler::instance()->setIcon(QIcon(":icons/bitcoin_testnet"));
279280
#endif
280-
if(trayIcon)
281-
{
282-
trayIcon->setToolTip(title_testnet);
283-
trayIcon->setIcon(QIcon(":/icons/toolbar_testnet"));
281+
if(trayIcon)
282+
{
283+
trayIcon->setToolTip(title_testnet);
284+
trayIcon->setIcon(QIcon(":/icons/toolbar_testnet"));
285+
}
284286
}
285-
}
286287

287-
// Keep up to date with client
288-
setNumConnections(clientModel->getNumConnections());
289-
connect(clientModel, SIGNAL(numConnectionsChanged(int)), this, SLOT(setNumConnections(int)));
288+
// Keep up to date with client
289+
setNumConnections(clientModel->getNumConnections());
290+
connect(clientModel, SIGNAL(numConnectionsChanged(int)), this, SLOT(setNumConnections(int)));
290291

291-
setNumBlocks(clientModel->getNumBlocks());
292-
connect(clientModel, SIGNAL(numBlocksChanged(int)), this, SLOT(setNumBlocks(int)));
292+
setNumBlocks(clientModel->getNumBlocks());
293+
connect(clientModel, SIGNAL(numBlocksChanged(int)), this, SLOT(setNumBlocks(int)));
293294

294-
// Report errors from network/worker thread
295-
connect(clientModel, SIGNAL(error(QString,QString)), this, SLOT(error(QString,QString)));
295+
// Report errors from network/worker thread
296+
connect(clientModel, SIGNAL(error(QString,QString)), this, SLOT(error(QString,QString)));
297+
}
296298
}
297299

298300
void BitcoinGUI::setWalletModel(WalletModel *walletModel)
299301
{
300302
this->walletModel = walletModel;
303+
if(walletModel)
304+
{
305+
// Report errors from wallet thread
306+
connect(walletModel, SIGNAL(error(QString,QString)), this, SLOT(error(QString,QString)));
301307

302-
// Report errors from wallet thread
303-
connect(walletModel, SIGNAL(error(QString,QString)), this, SLOT(error(QString,QString)));
304-
305-
// Put transaction list in tabs
306-
transactionView->setModel(walletModel);
308+
// Put transaction list in tabs
309+
transactionView->setModel(walletModel);
307310

308-
overviewPage->setModel(walletModel);
309-
addressBookPage->setModel(walletModel->getAddressTableModel());
310-
receiveCoinsPage->setModel(walletModel->getAddressTableModel());
311-
sendCoinsPage->setModel(walletModel);
311+
overviewPage->setModel(walletModel);
312+
addressBookPage->setModel(walletModel->getAddressTableModel());
313+
receiveCoinsPage->setModel(walletModel->getAddressTableModel());
314+
sendCoinsPage->setModel(walletModel);
312315

313-
setEncryptionStatus(walletModel->getEncryptionStatus());
314-
connect(walletModel, SIGNAL(encryptionStatusChanged(int)), this, SLOT(setEncryptionStatus(int)));
316+
setEncryptionStatus(walletModel->getEncryptionStatus());
317+
connect(walletModel, SIGNAL(encryptionStatusChanged(int)), this, SLOT(setEncryptionStatus(int)));
315318

316-
// Balloon popup for new transaction
317-
connect(walletModel->getTransactionTableModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
318-
this, SLOT(incomingTransaction(QModelIndex,int,int)));
319+
// Balloon popup for new transaction
320+
connect(walletModel->getTransactionTableModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
321+
this, SLOT(incomingTransaction(QModelIndex,int,int)));
319322

320-
// Ask for passphrase if needed
321-
connect(walletModel, SIGNAL(requireUnlock()), this, SLOT(unlockWallet()));
323+
// Ask for passphrase if needed
324+
connect(walletModel, SIGNAL(requireUnlock()), this, SLOT(unlockWallet()));
325+
}
322326
}
323327

324328
void BitcoinGUI::createTrayIcon()
@@ -369,6 +373,8 @@ void BitcoinGUI::trayIconActivated(QSystemTrayIcon::ActivationReason reason)
369373

370374
void BitcoinGUI::optionsClicked()
371375
{
376+
if(!clientModel || !clientModel->getOptionsModel())
377+
return;
372378
OptionsDialog dlg;
373379
dlg.setModel(clientModel->getOptionsModel());
374380
dlg.exec();
@@ -398,6 +404,8 @@ void BitcoinGUI::setNumConnections(int count)
398404

399405
void BitcoinGUI::setNumBlocks(int count)
400406
{
407+
if(!clientModel)
408+
return;
401409
int initTotal = clientModel->getNumBlocksAtStartup();
402410
int total = clientModel->getNumBlocksOfPeers();
403411
QString tooltip;
@@ -492,13 +500,16 @@ void BitcoinGUI::changeEvent(QEvent *e)
492500

493501
void BitcoinGUI::closeEvent(QCloseEvent *event)
494502
{
495-
#ifndef Q_WS_MAC // Ignored on Mac
496-
if(!clientModel->getOptionsModel()->getMinimizeToTray() &&
497-
!clientModel->getOptionsModel()->getMinimizeOnClose())
503+
if(clientModel)
498504
{
499-
qApp->quit();
500-
}
505+
#ifndef Q_WS_MAC // Ignored on Mac
506+
if(!clientModel->getOptionsModel()->getMinimizeToTray() &&
507+
!clientModel->getOptionsModel()->getMinimizeOnClose())
508+
{
509+
qApp->quit();
510+
}
501511
#endif
512+
}
502513
QMainWindow::closeEvent(event);
503514
}
504515

@@ -517,6 +528,8 @@ void BitcoinGUI::askFee(qint64 nFeeRequired, bool *payFee)
517528

518529
void BitcoinGUI::incomingTransaction(const QModelIndex & parent, int start, int end)
519530
{
531+
if(!walletModel || !clientModel)
532+
return;
520533
TransactionTableModel *ttm = walletModel->getTransactionTableModel();
521534
qint64 amount = ttm->index(start, TransactionTableModel::Amount, parent)
522535
.data(Qt::EditRole).toULongLong();
@@ -654,6 +667,8 @@ void BitcoinGUI::setEncryptionStatus(int status)
654667

655668
void BitcoinGUI::encryptWallet(bool status)
656669
{
670+
if(!walletModel)
671+
return;
657672
AskPassphraseDialog dlg(status ? AskPassphraseDialog::Encrypt:
658673
AskPassphraseDialog::Decrypt, this);
659674
dlg.setModel(walletModel);
@@ -671,6 +686,8 @@ void BitcoinGUI::changePassphrase()
671686

672687
void BitcoinGUI::unlockWallet()
673688
{
689+
if(!walletModel)
690+
return;
674691
// Unlock wallet when requested by wallet model
675692
if(walletModel->getEncryptionStatus() == WalletModel::Locked)
676693
{

src/qt/csvmodelwriter.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,11 @@ bool CSVModelWriter::write()
4848
return false;
4949
QTextStream out(&file);
5050

51-
int numRows = model->rowCount();
51+
int numRows = 0;
52+
if(model)
53+
{
54+
numRows = model->rowCount();
55+
}
5256

5357
// Header row
5458
for(int i=0; i<columns.size(); ++i)

src/qt/editaddressdialog.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ void EditAddressDialog::loadRow(int row)
5656

5757
bool EditAddressDialog::saveCurrentRow()
5858
{
59+
if(!model)
60+
return false;
5961
switch(mode)
6062
{
6163
case NewReceivingAddress:
@@ -78,6 +80,8 @@ bool EditAddressDialog::saveCurrentRow()
7880

7981
void EditAddressDialog::accept()
8082
{
83+
if(!model)
84+
return;
8185
if(!saveCurrentRow())
8286
{
8387
switch(model->getEditStatus())

src/qt/overviewpage.cpp

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -143,30 +143,34 @@ void OverviewPage::setNumTransactions(int count)
143143
void OverviewPage::setModel(WalletModel *model)
144144
{
145145
this->model = model;
146+
if(model)
147+
{
148+
// Set up transaction list
149+
TransactionFilterProxy *filter = new TransactionFilterProxy();
150+
filter->setSourceModel(model->getTransactionTableModel());
151+
filter->setLimit(NUM_ITEMS);
152+
filter->setDynamicSortFilter(true);
153+
filter->setSortRole(Qt::EditRole);
154+
filter->sort(TransactionTableModel::Status, Qt::DescendingOrder);
146155

147-
// Set up transaction list
148-
TransactionFilterProxy *filter = new TransactionFilterProxy();
149-
filter->setSourceModel(model->getTransactionTableModel());
150-
filter->setLimit(NUM_ITEMS);
151-
filter->setDynamicSortFilter(true);
152-
filter->setSortRole(Qt::EditRole);
153-
filter->sort(TransactionTableModel::Status, Qt::DescendingOrder);
154-
155-
ui->listTransactions->setModel(filter);
156-
ui->listTransactions->setModelColumn(TransactionTableModel::ToAddress);
156+
ui->listTransactions->setModel(filter);
157+
ui->listTransactions->setModelColumn(TransactionTableModel::ToAddress);
157158

158-
// Keep up to date with wallet
159-
setBalance(model->getBalance(), model->getUnconfirmedBalance());
160-
connect(model, SIGNAL(balanceChanged(qint64, qint64)), this, SLOT(setBalance(qint64, qint64)));
159+
// Keep up to date with wallet
160+
setBalance(model->getBalance(), model->getUnconfirmedBalance());
161+
connect(model, SIGNAL(balanceChanged(qint64, qint64)), this, SLOT(setBalance(qint64, qint64)));
161162

162-
setNumTransactions(model->getNumTransactions());
163-
connect(model, SIGNAL(numTransactionsChanged(int)), this, SLOT(setNumTransactions(int)));
163+
setNumTransactions(model->getNumTransactions());
164+
connect(model, SIGNAL(numTransactionsChanged(int)), this, SLOT(setNumTransactions(int)));
164165

165-
connect(model->getOptionsModel(), SIGNAL(displayUnitChanged(int)), this, SLOT(displayUnitChanged()));
166+
connect(model->getOptionsModel(), SIGNAL(displayUnitChanged(int)), this, SLOT(displayUnitChanged()));
167+
}
166168
}
167169

168170
void OverviewPage::displayUnitChanged()
169171
{
172+
if(!model || !model->getOptionsModel())
173+
return;
170174
if(currentBalance != -1)
171175
setBalance(currentBalance, currentUnconfirmedBalance);
172176

src/qt/sendcoinsdialog.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,11 @@ void SendCoinsDialog::setModel(WalletModel *model)
4343
entry->setModel(model);
4444
}
4545
}
46-
47-
setBalance(model->getBalance(), model->getUnconfirmedBalance());
48-
connect(model, SIGNAL(balanceChanged(qint64, qint64)), this, SLOT(setBalance(qint64, qint64)));
46+
if(model)
47+
{
48+
setBalance(model->getBalance(), model->getUnconfirmedBalance());
49+
connect(model, SIGNAL(balanceChanged(qint64, qint64)), this, SLOT(setBalance(qint64, qint64)));
50+
}
4951
}
5052

5153
SendCoinsDialog::~SendCoinsDialog()
@@ -57,6 +59,10 @@ void SendCoinsDialog::on_sendButton_clicked()
5759
{
5860
QList<SendCoinsRecipient> recipients;
5961
bool valid = true;
62+
63+
if(!model)
64+
return;
65+
6066
for(int i = 0; i < ui->entries->count(); ++i)
6167
{
6268
SendCoinsEntry *entry = qobject_cast<SendCoinsEntry*>(ui->entries->itemAt(i)->widget());
@@ -255,6 +261,9 @@ void SendCoinsDialog::handleURL(const QUrl *url)
255261
void SendCoinsDialog::setBalance(qint64 balance, qint64 unconfirmedBalance)
256262
{
257263
Q_UNUSED(unconfirmedBalance);
264+
if(!model || !model->getOptionsModel())
265+
return;
266+
258267
int unit = model->getOptionsModel()->getDisplayUnit();
259268
ui->labelBalance->setText(BitcoinUnits::formatWithUnit(unit, balance));
260269
}

0 commit comments

Comments
 (0)