aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2013-10-25 16:10:43 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2013-10-27 08:45:54 +0100
commit7d16bb387459de0fbf0cda3a5b97d6032cab1799 (patch)
tree7f6c0fe692033ca98835c92a9988a3972ab02e6d
parent0d09b3e8b0218169ab7ad2aa787c43ea11bc7060 (diff)
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.
-rw-r--r--src/qt/walletframe.cpp9
-rw-r--r--src/qt/walletframe.h6
-rw-r--r--src/qt/walletview.cpp53
-rw-r--r--src/qt/walletview.h12
4 files changed, 37 insertions, 43 deletions
diff --git a/src/qt/walletframe.cpp b/src/qt/walletframe.cpp
index dd1d69ec3a..d2807f465a 100644
--- a/src/qt/walletframe.cpp
+++ b/src/qt/walletframe.cpp
@@ -62,7 +62,7 @@ bool WalletFrame::setCurrentWallet(const QString& name)
WalletView *walletView = mapWalletViews.value(name);
walletStack->setCurrentWidget(walletView);
- walletView->setEncryptionStatus();
+ walletView->updateEncryptionStatus();
return true;
}
@@ -171,13 +171,6 @@ void WalletFrame::unlockWallet()
walletView->unlockWallet();
}
-void WalletFrame::setEncryptionStatus()
-{
- WalletView *walletView = (WalletView*)walletStack->currentWidget();
- if (walletView)
- walletView->setEncryptionStatus();
-}
-
void WalletFrame::usedSendingAddresses()
{
WalletView *walletView = (WalletView*)walletStack->currentWidget();
diff --git a/src/qt/walletframe.h b/src/qt/walletframe.h
index 89983b4aec..edf2390dbc 100644
--- a/src/qt/walletframe.h
+++ b/src/qt/walletframe.h
@@ -75,12 +75,6 @@ public slots:
void usedSendingAddresses();
/** Show used receiving addresses */
void usedReceivingAddresses();
-
- /** Set the encryption status as shown in the UI.
- @param[in] status current encryption status
- @see WalletModel::EncryptionStatus
- */
- void setEncryptionStatus();
};
#endif // WALLETFRAME_H
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()
diff --git a/src/qt/walletview.h b/src/qt/walletview.h
index 60544cbf88..61515047ca 100644
--- a/src/qt/walletview.h
+++ b/src/qt/walletview.h
@@ -55,7 +55,6 @@ public:
void showOutOfSyncWarning(bool fShow);
private:
- BitcoinGUI *gui;
ClientModel *clientModel;
WalletModel *walletModel;
@@ -85,7 +84,7 @@ public slots:
The new items are those between start and end inclusive, under the given parent item.
*/
- void incomingTransaction(const QModelIndex& parent, int start, int /*end*/);
+ void processNewTransaction(const QModelIndex& parent, int start, int /*end*/);
/** Encrypt the wallet */
void encryptWallet(bool status);
/** Backup the wallet */
@@ -100,14 +99,17 @@ public slots:
/** Show used receiving addresses */
void usedReceivingAddresses();
- void setEncryptionStatus();
-
+ /** Re-emit encryption status signal */
+ void updateEncryptionStatus();
signals:
/** Signal that we want to show the main window */
void showNormalIfMinimized();
-
/** Fired when a message should be reported to the user */
void message(const QString &title, const QString &message, unsigned int style);
+ /** Encryption status of wallet changed */
+ void encryptionStatusChanged(int status);
+ /** Notify that a new transaction appeared */
+ void incomingTransaction(const QString& date, int unit, qint64 amount, const QString& type, const QString& address);
};
#endif // WALLETVIEW_H