|
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