git / moonbite-core / src/qt/walletframe.cpp · raw
// Copyright (c) 2011-2020 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/createwalletdialog.h>#include <qt/overviewpage.h>#include <qt/walletcontroller.h>#include <qt/walletmodel.h>#include <qt/walletview.h>#include <cassert>#include <QGroupBox>#include <QHBoxLayout>#include <QLabel>#include <QPushButton>#include <QVBoxLayout>WalletFrame::WalletFrame(const PlatformStyle* _platformStyle, BitcoinGUI* _gui) : QFrame(_gui), gui(_gui), platformStyle(_platformStyle), m_size_hint(OverviewPage{platformStyle, nullptr}.sizeHint()){ // 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); // hbox for no wallet QGroupBox* no_wallet_group = new QGroupBox(walletStack); QVBoxLayout* no_wallet_layout = new QVBoxLayout(no_wallet_group); QLabel *noWallet = new QLabel(tr("No wallet has been loaded.\nGo to File > Open Wallet to load a wallet.\n- OR -")); noWallet->setAlignment(Qt::AlignCenter); no_wallet_layout->addWidget(noWallet, 0, Qt::AlignHCenter | Qt::AlignBottom); // A button for create wallet dialog QPushButton* create_wallet_button = new QPushButton(tr("Create a new wallet"), walletStack); connect(create_wallet_button, &QPushButton::clicked, [this] { auto activity = new CreateWalletActivity(gui->getWalletController(), this); connect(activity, &CreateWalletActivity::finished, activity, &QObject::deleteLater); activity->create(); }); no_wallet_layout->addWidget(create_wallet_button, 0, Qt::AlignHCenter | Qt::AlignTop); no_wallet_group->setLayout(no_wallet_layout); walletStack->addWidget(no_wallet_group);}WalletFrame::~WalletFrame(){}void WalletFrame::setClientModel(ClientModel *_clientModel){ this->clientModel = _clientModel; for (auto i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) { i.value()->setClientModel(_clientModel); }}bool WalletFrame::addWallet(WalletModel *walletModel){ if (!gui || !clientModel || !walletModel) return false; if (mapWalletViews.count(walletModel) > 0) return false; WalletView *walletView = new WalletView(platformStyle, this); walletView->setClientModel(clientModel); walletView->setWalletModel(walletModel); walletView->showOutOfSyncWarning(bOutOfSync); walletView->setPrivacy(gui->isPrivacyModeActivated()); WalletView* current_wallet_view = currentWalletView(); if (current_wallet_view) { walletView->setCurrentIndex(current_wallet_view->currentIndex()); } else { walletView->gotoOverviewPage(); } walletStack->addWidget(walletView); mapWalletViews[walletModel] = walletView; connect(walletView, &WalletView::outOfSyncWarningClicked, this, &WalletFrame::outOfSyncWarningClicked); connect(walletView, &WalletView::transactionClicked, gui, &BitcoinGUI::gotoHistoryPage); connect(walletView, &WalletView::coinsSent, gui, &BitcoinGUI::gotoHistoryPage); connect(walletView, &WalletView::message, [this](const QString& title, const QString& message, unsigned int style) { gui->message(title, message, style); }); connect(walletView, &WalletView::encryptionStatusChanged, gui, &BitcoinGUI::updateWalletStatus); connect(walletView, &WalletView::incomingTransaction, gui, &BitcoinGUI::incomingTransaction); connect(walletView, &WalletView::hdEnabledStatusChanged, gui, &BitcoinGUI::updateWalletStatus); connect(gui, &BitcoinGUI::setPrivacy, walletView, &WalletView::setPrivacy); return true;}void WalletFrame::setCurrentWallet(WalletModel* wallet_model){ if (mapWalletViews.count(wallet_model) == 0) return; // Stop the effect of hidden widgets on the size hint of the shown one in QStackedWidget. WalletView* view_about_to_hide = currentWalletView(); if (view_about_to_hide) { QSizePolicy sp = view_about_to_hide->sizePolicy(); sp.setHorizontalPolicy(QSizePolicy::Ignored); view_about_to_hide->setSizePolicy(sp); } WalletView *walletView = mapWalletViews.value(wallet_model); assert(walletView); // Set or restore the default QSizePolicy which could be set to QSizePolicy::Ignored previously. QSizePolicy sp = walletView->sizePolicy(); sp.setHorizontalPolicy(QSizePolicy::Preferred); walletView->setSizePolicy(sp); walletView->updateGeometry(); walletStack->setCurrentWidget(walletView); walletView->updateEncryptionStatus();}void WalletFrame::removeWallet(WalletModel* wallet_model){ if (mapWalletViews.count(wallet_model) == 0) return; WalletView *walletView = mapWalletViews.take(wallet_model); walletStack->removeWidget(walletView); delete walletView;}void WalletFrame::removeAllWallets(){ QMap<WalletModel*, 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<WalletModel*, WalletView*>::const_iterator i; for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) i.value()->showOutOfSyncWarning(fShow);}void WalletFrame::gotoOverviewPage(){ QMap<WalletModel*, WalletView*>::const_iterator i; for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) i.value()->gotoOverviewPage();}void WalletFrame::gotoHistoryPage(){ QMap<WalletModel*, WalletView*>::const_iterator i; for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) i.value()->gotoHistoryPage();}void WalletFrame::gotoReceiveCoinsPage(){ QMap<WalletModel*, WalletView*>::const_iterator i; for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) i.value()->gotoReceiveCoinsPage();}void WalletFrame::gotoSendCoinsPage(QString addr){ QMap<WalletModel*, 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::gotoLoadPSBT(bool from_clipboard){ WalletView *walletView = currentWalletView(); if (walletView) { walletView->gotoLoadPSBT(from_clipboard); }}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() const{ return qobject_cast<WalletView*>(walletStack->currentWidget());}WalletModel* WalletFrame::currentWalletModel() const{ WalletView* wallet_view = currentWalletView(); return wallet_view ? wallet_view->getWalletModel() : nullptr;}void WalletFrame::outOfSyncWarningClicked(){ Q_EMIT requestedSyncWarningInfo();}