Merge #15195: gui: Add Close Wallet action

94086fb59 gui: Add close wallet action (João Barbosa)
f77ba3431 gui: Add closeWallet to WalletController (João Barbosa)
f6122abe0 interfaces: Add remove to Wallet (João Barbosa)

Pull request description:

  This PR adds support to close the current wallet in the GUI.

  <img width="543" alt="screenshot 2019-01-18 at 00 44 26" src="https://user-images.githubusercontent.com/3534524/51358241-424b9680-1aba-11e9-88f2-b85869507737.png">
  <img width="532" alt="screenshot 2019-01-18 at 00 44 38" src="https://user-images.githubusercontent.com/3534524/51358242-424b9680-1aba-11e9-83e2-fa275a9017b3.png">

Tree-SHA512: fd7da4d0f73dc240864cc57a1ff1526daf2376904ce3872e52eeca5d40cc21c6dd29eb2ef25f85ffa63697362c150221a2369d80ad36ae445cc99989d337b688
This commit is contained in:
Jonas Schnelli 2019-02-14 10:46:22 -10:00
commit b7456e6bf9
No known key found for this signature in database
GPG key ID: 1EB776BB03C7922D
6 changed files with 33 additions and 0 deletions

View file

@ -468,6 +468,10 @@ public:
bool IsWalletFlagSet(uint64_t flag) override { return m_wallet.IsWalletFlagSet(flag); } bool IsWalletFlagSet(uint64_t flag) override { return m_wallet.IsWalletFlagSet(flag); }
OutputType getDefaultAddressType() override { return m_wallet.m_default_address_type; } OutputType getDefaultAddressType() override { return m_wallet.m_default_address_type; }
OutputType getDefaultChangeType() override { return m_wallet.m_default_change_type; } OutputType getDefaultChangeType() override { return m_wallet.m_default_change_type; }
void remove() override
{
RemoveWallet(m_shared_wallet);
}
std::unique_ptr<Handler> handleUnload(UnloadFn fn) override std::unique_ptr<Handler> handleUnload(UnloadFn fn) override
{ {
return MakeHandler(m_wallet.NotifyUnload.connect(fn)); return MakeHandler(m_wallet.NotifyUnload.connect(fn));

View file

@ -247,6 +247,9 @@ public:
// Get default change type. // Get default change type.
virtual OutputType getDefaultChangeType() = 0; virtual OutputType getDefaultChangeType() = 0;
// Remove wallet.
virtual void remove() = 0;
//! Register handler for unload message. //! Register handler for unload message.
using UnloadFn = std::function<void()>; using UnloadFn = std::function<void()>;
virtual std::unique_ptr<Handler> handleUnload(UnloadFn fn) = 0; virtual std::unique_ptr<Handler> handleUnload(UnloadFn fn) = 0;

View file

@ -338,6 +338,9 @@ void BitcoinGUI::createActions()
m_open_wallet_action->setMenu(new QMenu(this)); m_open_wallet_action->setMenu(new QMenu(this));
m_open_wallet_action->setStatusTip(tr("Open a wallet")); m_open_wallet_action->setStatusTip(tr("Open a wallet"));
m_close_wallet_action = new QAction(tr("Close Wallet..."), this);
m_close_wallet_action->setStatusTip(tr("Close wallet"));
showHelpMessageAction = new QAction(platformStyle->TextColorIcon(":/icons/info"), tr("&Command-line options"), this); showHelpMessageAction = new QAction(platformStyle->TextColorIcon(":/icons/info"), tr("&Command-line options"), this);
showHelpMessageAction->setMenuRole(QAction::NoRole); showHelpMessageAction->setMenuRole(QAction::NoRole);
showHelpMessageAction->setStatusTip(tr("Show the %1 help message to get a list with possible Bitcoin command-line options").arg(tr(PACKAGE_NAME))); showHelpMessageAction->setStatusTip(tr("Show the %1 help message to get a list with possible Bitcoin command-line options").arg(tr(PACKAGE_NAME)));
@ -396,6 +399,9 @@ void BitcoinGUI::createActions()
}); });
} }
}); });
connect(m_close_wallet_action, &QAction::triggered, [this] {
m_wallet_controller->closeWallet(walletFrame->currentWalletModel(), this);
});
} }
#endif // ENABLE_WALLET #endif // ENABLE_WALLET
@ -418,6 +424,7 @@ void BitcoinGUI::createMenuBar()
if(walletFrame) if(walletFrame)
{ {
file->addAction(m_open_wallet_action); file->addAction(m_open_wallet_action);
file->addAction(m_close_wallet_action);
file->addSeparator(); file->addSeparator();
file->addAction(openAction); file->addAction(openAction);
file->addAction(backupWalletAction); file->addAction(backupWalletAction);
@ -693,6 +700,7 @@ void BitcoinGUI::setWalletActionsEnabled(bool enabled)
usedSendingAddressesAction->setEnabled(enabled); usedSendingAddressesAction->setEnabled(enabled);
usedReceivingAddressesAction->setEnabled(enabled); usedReceivingAddressesAction->setEnabled(enabled);
openAction->setEnabled(enabled); openAction->setEnabled(enabled);
m_close_wallet_action->setEnabled(enabled);
} }
void BitcoinGUI::createTrayIcon() void BitcoinGUI::createTrayIcon()

View file

@ -148,6 +148,7 @@ private:
QAction* openAction = nullptr; QAction* openAction = nullptr;
QAction* showHelpMessageAction = nullptr; QAction* showHelpMessageAction = nullptr;
QAction* m_open_wallet_action{nullptr}; QAction* m_open_wallet_action{nullptr};
QAction* m_close_wallet_action{nullptr};
QAction* m_wallet_selector_label_action = nullptr; QAction* m_wallet_selector_label_action = nullptr;
QAction* m_wallet_selector_action = nullptr; QAction* m_wallet_selector_action = nullptr;

View file

@ -63,6 +63,22 @@ OpenWalletActivity* WalletController::openWallet(const std::string& name, QWidge
return activity; return activity;
} }
void WalletController::closeWallet(WalletModel* wallet_model, QWidget* parent)
{
QMessageBox box(parent);
box.setWindowTitle(tr("Close wallet"));
box.setText(tr("Are you sure you wish to close wallet <i>%1</i>?").arg(wallet_model->getDisplayName()));
box.setInformativeText(tr("Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled."));
box.setStandardButtons(QMessageBox::Yes|QMessageBox::Cancel);
box.setDefaultButton(QMessageBox::Yes);
if (box.exec() != QMessageBox::Yes) return;
// First remove wallet from node.
wallet_model->wallet().remove();
// Now release the model.
removeAndDeleteWallet(wallet_model);
}
WalletModel* WalletController::getOrCreateWallet(std::unique_ptr<interfaces::Wallet> wallet) WalletModel* WalletController::getOrCreateWallet(std::unique_ptr<interfaces::Wallet> wallet)
{ {
QMutexLocker locker(&m_mutex); QMutexLocker locker(&m_mutex);

View file

@ -44,6 +44,7 @@ public:
std::vector<std::string> getWalletsAvailableToOpen() const; std::vector<std::string> getWalletsAvailableToOpen() const;
OpenWalletActivity* openWallet(const std::string& name, QWidget* parent = nullptr); OpenWalletActivity* openWallet(const std::string& name, QWidget* parent = nullptr);
void closeWallet(WalletModel* wallet_model, QWidget* parent = nullptr);
private Q_SLOTS: private Q_SLOTS:
void addWallet(WalletModel* wallet_model); void addWallet(WalletModel* wallet_model);