aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2013-11-12 14:54:43 +0100
committerWladimir J. van der Laan <laanwj@gmail.com>2013-11-13 09:22:00 +0100
commit146ba964e4b784171c29600e959a0fae3e2e0c03 (patch)
treec94ccf87d3a0386adc0e8b07ac35353995ad4e29
parente6b7e3dc79e91db7a9e20ec8fd593145f6c3ac41 (diff)
qt: GUI support for -disablewallet mode
-rw-r--r--src/qt/bitcoin.cpp19
-rw-r--r--src/qt/bitcoingui.cpp21
-rw-r--r--src/qt/bitcoingui.h3
-rw-r--r--src/qt/walletframe.cpp29
-rw-r--r--src/qt/walletframe.h2
5 files changed, 60 insertions, 14 deletions
diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp
index 54f96f4426..57ce7da361 100644
--- a/src/qt/bitcoin.cpp
+++ b/src/qt/bitcoin.cpp
@@ -313,11 +313,16 @@ int main(int argc, char *argv[])
splash.finish(&window);
ClientModel clientModel(&optionsModel);
- WalletModel walletModel(pwalletMain, &optionsModel);
+ WalletModel *walletModel = 0;
+ if(pwalletMain)
+ walletModel = new WalletModel(pwalletMain, &optionsModel);
window.setClientModel(&clientModel);
- window.addWallet("~Default", &walletModel);
- window.setCurrentWallet("~Default");
+ if(walletModel)
+ {
+ window.addWallet("~Default", walletModel);
+ window.setCurrentWallet("~Default");
+ }
// If -min option passed, start window minimized.
if(GetBoolArg("-min", false))
@@ -335,8 +340,11 @@ int main(int argc, char *argv[])
&window, SLOT(handlePaymentRequest(SendCoinsRecipient)));
QObject::connect(&window, SIGNAL(receivedURI(QString)),
paymentServer, SLOT(handleURIOrFile(QString)));
- QObject::connect(&walletModel, SIGNAL(coinsSent(CWallet*,SendCoinsRecipient,QByteArray)),
- paymentServer, SLOT(fetchPaymentACK(CWallet*,const SendCoinsRecipient&,QByteArray)));
+ if(walletModel)
+ {
+ QObject::connect(walletModel, SIGNAL(coinsSent(CWallet*,SendCoinsRecipient,QByteArray)),
+ paymentServer, SLOT(fetchPaymentACK(CWallet*,const SendCoinsRecipient&,QByteArray)));
+ }
QObject::connect(paymentServer, SIGNAL(message(QString,QString,unsigned int)),
guiref, SLOT(message(QString,QString,unsigned int)));
QTimer::singleShot(100, paymentServer, SLOT(uiReady()));
@@ -347,6 +355,7 @@ int main(int argc, char *argv[])
window.setClientModel(0);
window.removeAllWallets();
guiref = 0;
+ delete walletModel;
}
// Shutdown the core and its threads, but don't exit Bitcoin-Qt here
threadGroup.interrupt_all();
diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp
index 8b0aba1b5b..a1becc12ec 100644
--- a/src/qt/bitcoingui.cpp
+++ b/src/qt/bitcoingui.cpp
@@ -163,6 +163,9 @@ BitcoinGUI::BitcoinGUI(bool fIsTestnet, QWidget *parent) :
// Install event filter to be able to catch status tip events (QEvent::StatusTip)
this->installEventFilter(this);
+
+ // Initially wallet actions should be disabled
+ setWalletActionsEnabled(false);
}
BitcoinGUI::~BitcoinGUI()
@@ -352,6 +355,7 @@ void BitcoinGUI::setClientModel(ClientModel *clientModel)
bool BitcoinGUI::addWallet(const QString& name, WalletModel *walletModel)
{
+ setWalletActionsEnabled(true);
return walletFrame->addWallet(name, walletModel);
}
@@ -362,9 +366,26 @@ bool BitcoinGUI::setCurrentWallet(const QString& name)
void BitcoinGUI::removeAllWallets()
{
+ setWalletActionsEnabled(false);
walletFrame->removeAllWallets();
}
+void BitcoinGUI::setWalletActionsEnabled(bool enabled)
+{
+ overviewAction->setEnabled(enabled);
+ sendCoinsAction->setEnabled(enabled);
+ receiveCoinsAction->setEnabled(enabled);
+ historyAction->setEnabled(enabled);
+ encryptWalletAction->setEnabled(enabled);
+ backupWalletAction->setEnabled(enabled);
+ changePassphraseAction->setEnabled(enabled);
+ signMessageAction->setEnabled(enabled);
+ verifyMessageAction->setEnabled(enabled);
+ usedSendingAddressesAction->setEnabled(enabled);
+ usedReceivingAddressesAction->setEnabled(enabled);
+ openAction->setEnabled(enabled);
+}
+
void BitcoinGUI::createTrayIcon(bool fIsTestnet)
{
#ifndef Q_OS_MAC
diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h
index acbc38c894..b9a8a03139 100644
--- a/src/qt/bitcoingui.h
+++ b/src/qt/bitcoingui.h
@@ -108,6 +108,9 @@ private:
/** Create system tray menu (or setup the dock menu) */
void createTrayIconMenu();
+ /** Enable or disable all wallet-related actions */
+ void setWalletActionsEnabled(bool enabled);
+
signals:
/** Signal raised when a URI was entered or dragged to the GUI */
void receivedURI(const QString &uri);
diff --git a/src/qt/walletframe.cpp b/src/qt/walletframe.cpp
index 04eea59169..fead022928 100644
--- a/src/qt/walletframe.cpp
+++ b/src/qt/walletframe.cpp
@@ -10,6 +10,7 @@
#include <cstdio>
#include <QHBoxLayout>
+#include <QLabel>
WalletFrame::WalletFrame(BitcoinGUI *_gui) :
QFrame(_gui),
@@ -21,6 +22,10 @@ WalletFrame::WalletFrame(BitcoinGUI *_gui) :
walletStack = new QStackedWidget(this);
walletFrameLayout->setContentsMargins(0,0,0,0);
walletFrameLayout->addWidget(walletStack);
+
+ QLabel *noWallet = new QLabel(tr("No wallet has been loaded."));
+ noWallet->setAlignment(Qt::AlignCenter);
+ walletStack->addWidget(noWallet);
}
WalletFrame::~WalletFrame()
@@ -85,7 +90,7 @@ void WalletFrame::removeAllWallets()
bool WalletFrame::handlePaymentRequest(const SendCoinsRecipient &recipient)
{
- WalletView *walletView = (WalletView*)walletStack->currentWidget();
+ WalletView *walletView = currentWalletView();
if (!walletView)
return false;
@@ -130,56 +135,62 @@ void WalletFrame::gotoSendCoinsPage(QString addr)
void WalletFrame::gotoSignMessageTab(QString addr)
{
- WalletView *walletView = (WalletView*)walletStack->currentWidget();
+ WalletView *walletView = currentWalletView();
if (walletView)
walletView->gotoSignMessageTab(addr);
}
void WalletFrame::gotoVerifyMessageTab(QString addr)
{
- WalletView *walletView = (WalletView*)walletStack->currentWidget();
+ WalletView *walletView = currentWalletView();
if (walletView)
walletView->gotoVerifyMessageTab(addr);
}
void WalletFrame::encryptWallet(bool status)
{
- WalletView *walletView = (WalletView*)walletStack->currentWidget();
+ WalletView *walletView = currentWalletView();
if (walletView)
walletView->encryptWallet(status);
}
void WalletFrame::backupWallet()
{
- WalletView *walletView = (WalletView*)walletStack->currentWidget();
+ WalletView *walletView = currentWalletView();
if (walletView)
walletView->backupWallet();
}
void WalletFrame::changePassphrase()
{
- WalletView *walletView = (WalletView*)walletStack->currentWidget();
+ WalletView *walletView = currentWalletView();
if (walletView)
walletView->changePassphrase();
}
void WalletFrame::unlockWallet()
{
- WalletView *walletView = (WalletView*)walletStack->currentWidget();
+ WalletView *walletView = currentWalletView();
if (walletView)
walletView->unlockWallet();
}
void WalletFrame::usedSendingAddresses()
{
- WalletView *walletView = (WalletView*)walletStack->currentWidget();
+ WalletView *walletView = currentWalletView();
if (walletView)
walletView->usedSendingAddresses();
}
void WalletFrame::usedReceivingAddresses()
{
- WalletView *walletView = (WalletView*)walletStack->currentWidget();
+ WalletView *walletView = currentWalletView();
if (walletView)
walletView->usedReceivingAddresses();
}
+
+WalletView *WalletFrame::currentWalletView()
+{
+ return qobject_cast<WalletView*>(walletStack->currentWidget());
+}
+
diff --git a/src/qt/walletframe.h b/src/qt/walletframe.h
index 8cfaa0e1d4..f1830a0d6b 100644
--- a/src/qt/walletframe.h
+++ b/src/qt/walletframe.h
@@ -45,6 +45,8 @@ private:
bool bOutOfSync;
+ WalletView *currentWalletView();
+
public slots:
/** Switch to overview (home) page */
void gotoOverviewPage();