|
47 | 47 | #include <QCursor>
|
48 | 48 | #include <QDateTime>
|
49 | 49 | #include <QDragEnterEvent>
|
| 50 | +#include <QInputDialog> |
50 | 51 | #include <QKeySequence>
|
51 | 52 | #include <QListWidget>
|
52 | 53 | #include <QMenu>
|
@@ -348,6 +349,12 @@ void BitcoinGUI::createActions()
|
348 | 349 | m_create_wallet_action->setEnabled(false);
|
349 | 350 | m_create_wallet_action->setStatusTip(tr("Create a new wallet"));
|
350 | 351 |
|
| 352 | + //: Name of the menu item that restores wallet from a backup file. |
| 353 | + m_restore_wallet_action = new QAction(tr("Restore Wallet…"), this); |
| 354 | + m_restore_wallet_action->setEnabled(false); |
| 355 | + //: Status tip for Restore Wallet menu item |
| 356 | + m_restore_wallet_action->setStatusTip(tr("Restore a wallet from a backup file")); |
| 357 | + |
351 | 358 | m_close_all_wallets_action = new QAction(tr("Close All Wallets…"), this);
|
352 | 359 | m_close_all_wallets_action->setStatusTip(tr("Close all wallets"));
|
353 | 360 |
|
@@ -412,6 +419,27 @@ void BitcoinGUI::createActions()
|
412 | 419 | action->setEnabled(false);
|
413 | 420 | }
|
414 | 421 | });
|
| 422 | + connect(m_restore_wallet_action, &QAction::triggered, [this] { |
| 423 | + //: Name of the wallet data file format. |
| 424 | + QString name_data_file = tr("Wallet Data"); |
| 425 | + |
| 426 | + //: The title for Restore Wallet File Windows |
| 427 | + QString title_windows = tr("Load Wallet Backup"); |
| 428 | + |
| 429 | + QString backup_file = GUIUtil::getOpenFileName(this, title_windows, QString(), name_data_file + QLatin1String(" (*.dat)"), nullptr); |
| 430 | + if (backup_file.isEmpty()) return; |
| 431 | + |
| 432 | + bool wallet_name_ok; |
| 433 | + //: Title of the Restore Wallet input dialog (where the wallet name is entered) |
| 434 | + QString wallet_name = QInputDialog::getText(this, tr("Restore Name"), tr("Wallet Name:"), QLineEdit::Normal, "", &wallet_name_ok); |
| 435 | + if (!wallet_name_ok || wallet_name.isEmpty()) return; |
| 436 | + |
| 437 | + auto activity = new RestoreWalletActivity(m_wallet_controller, this); |
| 438 | + connect(activity, &RestoreWalletActivity::restored, this, &BitcoinGUI::setCurrentWallet, Qt::QueuedConnection); |
| 439 | + |
| 440 | + auto backup_file_path = fs::PathFromString(backup_file.toStdString()); |
| 441 | + activity->restore(backup_file_path, wallet_name.toStdString()); |
| 442 | + }); |
415 | 443 | connect(m_close_wallet_action, &QAction::triggered, [this] {
|
416 | 444 | m_wallet_controller->closeWallet(walletFrame->currentWalletModel(), this);
|
417 | 445 | });
|
@@ -450,8 +478,10 @@ void BitcoinGUI::createMenuBar()
|
450 | 478 | file->addAction(m_close_wallet_action);
|
451 | 479 | file->addAction(m_close_all_wallets_action);
|
452 | 480 | file->addSeparator();
|
453 |
| - file->addAction(openAction); |
454 | 481 | file->addAction(backupWalletAction);
|
| 482 | + file->addAction(m_restore_wallet_action); |
| 483 | + file->addSeparator(); |
| 484 | + file->addAction(openAction); |
455 | 485 | file->addAction(signMessageAction);
|
456 | 486 | file->addAction(verifyMessageAction);
|
457 | 487 | file->addAction(m_load_psbt_action);
|
@@ -642,6 +672,7 @@ void BitcoinGUI::setWalletController(WalletController* wallet_controller)
|
642 | 672 | m_create_wallet_action->setEnabled(true);
|
643 | 673 | m_open_wallet_action->setEnabled(true);
|
644 | 674 | m_open_wallet_action->setMenu(m_open_wallet_menu);
|
| 675 | + m_restore_wallet_action->setEnabled(true); |
645 | 676 |
|
646 | 677 | GUIUtil::ExceptionSafeConnect(wallet_controller, &WalletController::walletAdded, this, &BitcoinGUI::addWallet);
|
647 | 678 | connect(wallet_controller, &WalletController::walletRemoved, this, &BitcoinGUI::removeWallet);
|
|
0 commit comments