diff options
Diffstat (limited to 'src/qt/walletframe.cpp')
-rw-r--r-- | src/qt/walletframe.cpp | 205 |
1 files changed, 205 insertions, 0 deletions
diff --git a/src/qt/walletframe.cpp b/src/qt/walletframe.cpp new file mode 100644 index 0000000000..573b3f1412 --- /dev/null +++ b/src/qt/walletframe.cpp @@ -0,0 +1,205 @@ +// Copyright (c) 2011-2016 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include <qt/walletframe.h> + +#include <qt/bitcoingui.h> +#include <qt/walletview.h> + +#include <cassert> +#include <cstdio> + +#include <QHBoxLayout> +#include <QLabel> + +WalletFrame::WalletFrame(const PlatformStyle *_platformStyle, BitcoinGUI *_gui) : + QFrame(_gui), + gui(_gui), + platformStyle(_platformStyle) +{ + // Leave HBox hook for adding a list view later + QHBoxLayout *walletFrameLayout = new QHBoxLayout(this); + setContentsMargins(0,0,0,0); + 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() +{ +} + +void WalletFrame::setClientModel(ClientModel *_clientModel) +{ + this->clientModel = _clientModel; +} + +bool WalletFrame::addWallet(const QString& name, WalletModel *walletModel) +{ + if (!gui || !clientModel || !walletModel || mapWalletViews.count(name) > 0) + return false; + + WalletView *walletView = new WalletView(platformStyle, this); + walletView->setBitcoinGUI(gui); + walletView->setClientModel(clientModel); + walletView->setWalletModel(walletModel); + walletView->showOutOfSyncWarning(bOutOfSync); + + /* TODO we should goto the currently selected page once dynamically adding wallets is supported */ + walletView->gotoOverviewPage(); + walletStack->addWidget(walletView); + mapWalletViews[name] = walletView; + + // Ensure a walletView is able to show the main window + connect(walletView, SIGNAL(showNormalIfMinimized()), gui, SLOT(showNormalIfMinimized())); + + connect(walletView, SIGNAL(outOfSyncWarningClicked()), this, SLOT(outOfSyncWarningClicked())); + + return true; +} + +bool WalletFrame::setCurrentWallet(const QString& name) +{ + if (mapWalletViews.count(name) == 0) + return false; + + WalletView *walletView = mapWalletViews.value(name); + walletStack->setCurrentWidget(walletView); + assert(walletView); + walletView->updateEncryptionStatus(); + return true; +} + +bool WalletFrame::removeWallet(const QString &name) +{ + if (mapWalletViews.count(name) == 0) + return false; + + WalletView *walletView = mapWalletViews.take(name); + walletStack->removeWidget(walletView); + return true; +} + +void WalletFrame::removeAllWallets() +{ + QMap<QString, WalletView*>::const_iterator i; + for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) + walletStack->removeWidget(i.value()); + mapWalletViews.clear(); +} + +bool WalletFrame::handlePaymentRequest(const SendCoinsRecipient &recipient) +{ + WalletView *walletView = currentWalletView(); + if (!walletView) + return false; + + return walletView->handlePaymentRequest(recipient); +} + +void WalletFrame::showOutOfSyncWarning(bool fShow) +{ + bOutOfSync = fShow; + QMap<QString, WalletView*>::const_iterator i; + for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) + i.value()->showOutOfSyncWarning(fShow); +} + +void WalletFrame::gotoOverviewPage() +{ + QMap<QString, WalletView*>::const_iterator i; + for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) + i.value()->gotoOverviewPage(); +} + +void WalletFrame::gotoHistoryPage() +{ + QMap<QString, WalletView*>::const_iterator i; + for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) + i.value()->gotoHistoryPage(); +} + +void WalletFrame::gotoReceiveCoinsPage() +{ + QMap<QString, WalletView*>::const_iterator i; + for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) + i.value()->gotoReceiveCoinsPage(); +} + +void WalletFrame::gotoSendCoinsPage(QString addr) +{ + QMap<QString, WalletView*>::const_iterator i; + for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) + i.value()->gotoSendCoinsPage(addr); +} + +void WalletFrame::gotoSignMessageTab(QString addr) +{ + WalletView *walletView = currentWalletView(); + if (walletView) + walletView->gotoSignMessageTab(addr); +} + +void WalletFrame::gotoVerifyMessageTab(QString addr) +{ + WalletView *walletView = currentWalletView(); + if (walletView) + walletView->gotoVerifyMessageTab(addr); +} + +void WalletFrame::encryptWallet(bool status) +{ + WalletView *walletView = currentWalletView(); + if (walletView) + walletView->encryptWallet(status); +} + +void WalletFrame::backupWallet() +{ + WalletView *walletView = currentWalletView(); + if (walletView) + walletView->backupWallet(); +} + +void WalletFrame::changePassphrase() +{ + WalletView *walletView = currentWalletView(); + if (walletView) + walletView->changePassphrase(); +} + +void WalletFrame::unlockWallet() +{ + WalletView *walletView = currentWalletView(); + if (walletView) + walletView->unlockWallet(); +} + +void WalletFrame::usedSendingAddresses() +{ + WalletView *walletView = currentWalletView(); + if (walletView) + walletView->usedSendingAddresses(); +} + +void WalletFrame::usedReceivingAddresses() +{ + WalletView *walletView = currentWalletView(); + if (walletView) + walletView->usedReceivingAddresses(); +} + +WalletView *WalletFrame::currentWalletView() +{ + return qobject_cast<WalletView*>(walletStack->currentWidget()); +} + +void WalletFrame::outOfSyncWarningClicked() +{ + Q_EMIT requestedSyncWarningInfo(); +} |