From 7d16bb387459de0fbf0cda3a5b97d6032cab1799 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Fri, 25 Oct 2013 16:10:43 +0200 Subject: qt: clean up signal handling in walletframe/walletview Use proper signals everywhere. Removes the need to store a pointer to the BitcoinGUI object in the walletview. Also removes the interdependence between setWalletModel / setBitcoinGUI. --- src/qt/walletview.cpp | 53 ++++++++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 24 deletions(-) (limited to 'src/qt/walletview.cpp') diff --git a/src/qt/walletview.cpp b/src/qt/walletview.cpp index 57e64b0826..982041c64a 100644 --- a/src/qt/walletview.cpp +++ b/src/qt/walletview.cpp @@ -32,7 +32,6 @@ WalletView::WalletView(QWidget *parent): QStackedWidget(parent), - gui(0), clientModel(0), walletModel(0) { @@ -70,6 +69,9 @@ WalletView::WalletView(QWidget *parent): // Clicking on "Export" allows to export the transaction list connect(exportButton, SIGNAL(clicked()), transactionView, SLOT(exportClicked())); + + // Pass through messages from sendCoinsPage + connect(sendCoinsPage, SIGNAL(message(QString,QString,unsigned int)), this, SIGNAL(message(QString,QString,unsigned int))); } WalletView::~WalletView() @@ -78,8 +80,6 @@ WalletView::~WalletView() void WalletView::setBitcoinGUI(BitcoinGUI *gui) { - this->gui = gui; - if (gui) { // Clicking on a transaction on the overview page sends you to the transactions tab @@ -87,46 +87,51 @@ void WalletView::setBitcoinGUI(BitcoinGUI *gui) // Receive and report messages connect(this, SIGNAL(message(QString,QString,unsigned int)), gui, SLOT(message(QString,QString,unsigned int))); - connect(sendCoinsPage, SIGNAL(message(QString,QString,unsigned int)), gui, SLOT(message(QString,QString,unsigned int))); + + // Pass through encryption status changed signals + connect(this, SIGNAL(encryptionStatusChanged(int)), gui, SLOT(setEncryptionStatus(int))); + + // Pass through transaction notifications + connect(this, SIGNAL(incomingTransaction(QString,int,qint64,QString,QString)), gui, SLOT(incomingTransaction(QString,int,qint64,QString,QString))); } } void WalletView::setClientModel(ClientModel *clientModel) { this->clientModel = clientModel; - if (clientModel) - { - overviewPage->setClientModel(clientModel); - } + + overviewPage->setClientModel(clientModel); } void WalletView::setWalletModel(WalletModel *walletModel) { this->walletModel = walletModel; - if (walletModel && gui) + + // Put transaction list in tabs + transactionView->setModel(walletModel); + overviewPage->setWalletModel(walletModel); + receiveCoinsPage->setModel(walletModel); + sendCoinsPage->setModel(walletModel); + + if (walletModel) { // Receive and report messages from wallet thread - connect(walletModel, SIGNAL(message(QString,QString,unsigned int)), gui, SLOT(message(QString,QString,unsigned int))); - - // Put transaction list in tabs - transactionView->setModel(walletModel); - overviewPage->setWalletModel(walletModel); - receiveCoinsPage->setModel(walletModel); - sendCoinsPage->setModel(walletModel); + connect(walletModel, SIGNAL(message(QString,QString,unsigned int)), this, SIGNAL(message(QString,QString,unsigned int))); - setEncryptionStatus(); - connect(walletModel, SIGNAL(encryptionStatusChanged(int)), gui, SLOT(setEncryptionStatus(int))); + // Handle changes in encryption status + connect(walletModel, SIGNAL(encryptionStatusChanged(int)), this, SIGNAL(encryptionStatusChanged(int))); + updateEncryptionStatus(); // Balloon pop-up for new transaction connect(walletModel->getTransactionTableModel(), SIGNAL(rowsInserted(QModelIndex,int,int)), - this, SLOT(incomingTransaction(QModelIndex,int,int))); + this, SLOT(processNewTransaction(QModelIndex,int,int))); // Ask for passphrase if needed connect(walletModel, SIGNAL(requireUnlock()), this, SLOT(unlockWallet())); } } -void WalletView::incomingTransaction(const QModelIndex& parent, int start, int /*end*/) +void WalletView::processNewTransaction(const QModelIndex& parent, int start, int /*end*/) { // Prevent balloon-spam when initial block download is in progress if (!walletModel || !clientModel || clientModel->inInitialBlockDownload()) @@ -139,7 +144,7 @@ void WalletView::incomingTransaction(const QModelIndex& parent, int start, int / QString type = ttm->index(start, TransactionTableModel::Type, parent).data().toString(); QString address = ttm->index(start, TransactionTableModel::ToAddress, parent).data().toString(); - gui->incomingTransaction(date, walletModel->getOptionsModel()->getDisplayUnit(), amount, type, address); + emit incomingTransaction(date, walletModel->getOptionsModel()->getDisplayUnit(), amount, type, address); } void WalletView::gotoOverviewPage() @@ -199,9 +204,9 @@ void WalletView::showOutOfSyncWarning(bool fShow) overviewPage->showOutOfSyncWarning(fShow); } -void WalletView::setEncryptionStatus() +void WalletView::updateEncryptionStatus() { - gui->setEncryptionStatus(walletModel->getEncryptionStatus()); + emit encryptionStatusChanged(walletModel->getEncryptionStatus()); } void WalletView::encryptWallet(bool status) @@ -212,7 +217,7 @@ void WalletView::encryptWallet(bool status) dlg.setModel(walletModel); dlg.exec(); - setEncryptionStatus(); + updateEncryptionStatus(); } void WalletView::backupWallet() -- cgit v1.2.3