Add cancel button to rescan progress dialog

Adds a cancel button to the rescan progress dialog. When it is clicked,
AbortRescan is called to abort a rescan
This commit is contained in:
Andrew Chow 2018-03-31 16:02:58 -04:00
parent 27278dffe8
commit 69b01e6f8b
4 changed files with 17 additions and 6 deletions

View File

@ -132,6 +132,7 @@ public:
{ {
return m_wallet.ChangeWalletPassphrase(old_wallet_passphrase, new_wallet_passphrase); return m_wallet.ChangeWalletPassphrase(old_wallet_passphrase, new_wallet_passphrase);
} }
void abortRescan() override { m_wallet.AbortRescan(); }
bool backupWallet(const std::string& filename) override { return m_wallet.BackupWallet(filename); } bool backupWallet(const std::string& filename) override { return m_wallet.BackupWallet(filename); }
std::string getWalletName() override { return m_wallet.GetName(); } std::string getWalletName() override { return m_wallet.GetName(); }
bool getKeyFromPool(bool internal, CPubKey& pub_key) override bool getKeyFromPool(bool internal, CPubKey& pub_key) override

View File

@ -65,6 +65,9 @@ public:
virtual bool changeWalletPassphrase(const SecureString& old_wallet_passphrase, virtual bool changeWalletPassphrase(const SecureString& old_wallet_passphrase,
const SecureString& new_wallet_passphrase) = 0; const SecureString& new_wallet_passphrase) = 0;
//! Abort a rescan.
virtual void abortRescan() = 0;
//! Back up wallet. //! Back up wallet.
virtual bool backupWallet(const std::string& filename) = 0; virtual bool backupWallet(const std::string& filename) = 0;

View File

@ -315,9 +315,9 @@ void WalletView::showProgress(const QString &title, int nProgress)
progressDialog = new QProgressDialog(title, "", 0, 100); progressDialog = new QProgressDialog(title, "", 0, 100);
progressDialog->setWindowModality(Qt::ApplicationModal); progressDialog->setWindowModality(Qt::ApplicationModal);
progressDialog->setMinimumDuration(0); progressDialog->setMinimumDuration(0);
progressDialog->setCancelButton(0);
progressDialog->setAutoClose(false); progressDialog->setAutoClose(false);
progressDialog->setValue(0); progressDialog->setValue(0);
progressDialog->setCancelButtonText(tr("Cancel"));
} }
else if (nProgress == 100) else if (nProgress == 100)
{ {
@ -327,8 +327,13 @@ void WalletView::showProgress(const QString &title, int nProgress)
progressDialog->deleteLater(); progressDialog->deleteLater();
} }
} }
else if (progressDialog) else if (progressDialog) {
progressDialog->setValue(nProgress); if (progressDialog->wasCanceled()) {
getWalletModel()->wallet().abortRescan();
} else {
progressDialog->setValue(nProgress);
}
}
} }
void WalletView::requestedSyncWarningInfo() void WalletView::requestedSyncWarningInfo()

View File

@ -534,9 +534,11 @@ UniValue importwallet(const JSONRPCRequest& request)
int64_t nFilesize = std::max((int64_t)1, (int64_t)file.tellg()); int64_t nFilesize = std::max((int64_t)1, (int64_t)file.tellg());
file.seekg(0, file.beg); file.seekg(0, file.beg);
pwallet->ShowProgress(_("Importing..."), 0); // show progress dialog in GUI // Use uiInterface.ShowProgress instead of pwallet.ShowProgress because pwallet.ShowProgress has a cancel button tied to AbortRescan which
// we don't want for this progress bar shoing the import progress. uiInterface.ShowProgress does not have a cancel button.
uiInterface.ShowProgress(_("Importing..."), 0, false); // show progress dialog in GUI
while (file.good()) { while (file.good()) {
pwallet->ShowProgress("", std::max(1, std::min(99, (int)(((double)file.tellg() / (double)nFilesize) * 100)))); uiInterface.ShowProgress("", std::max(1, std::min(99, (int)(((double)file.tellg() / (double)nFilesize) * 100))), false);
std::string line; std::string line;
std::getline(file, line); std::getline(file, line);
if (line.empty() || line[0] == '#') if (line.empty() || line[0] == '#')
@ -599,7 +601,7 @@ UniValue importwallet(const JSONRPCRequest& request)
} }
} }
file.close(); file.close();
pwallet->ShowProgress("", 100); // hide progress dialog in GUI uiInterface.ShowProgress("", 100, false); // hide progress dialog in GUI
pwallet->UpdateTimeFirstKey(nTimeBegin); pwallet->UpdateTimeFirstKey(nTimeBegin);
} }
pwallet->RescanFromTime(nTimeBegin, reserver, false /* update */); pwallet->RescanFromTime(nTimeBegin, reserver, false /* update */);