@@ -377,6 +377,10 @@ void BitcoinGUI::createActions()
377377 m_mask_values_action->setStatusTip (tr (" Mask the values in the Overview tab" ));
378378 m_mask_values_action->setCheckable (true );
379379
380+ m_export_watchonly_action = new QAction (tr (" Export watch-only wallet" ), this );
381+ m_export_watchonly_action->setEnabled (false );
382+ m_export_watchonly_action->setStatusTip (tr (" Export a watch-only version of the current wallet that can be restored onto another node." ));
383+
380384 connect (quitAction, &QAction::triggered, this , &BitcoinGUI::quitRequested);
381385 connect (aboutAction, &QAction::triggered, this , &BitcoinGUI::aboutClicked);
382386 connect (aboutQtAction, &QAction::triggered, qApp, QApplication::aboutQt);
@@ -524,6 +528,16 @@ void BitcoinGUI::createActions()
524528 });
525529 connect (m_mask_values_action, &QAction::toggled, this , &BitcoinGUI::setPrivacy);
526530 connect (m_mask_values_action, &QAction::toggled, this , &BitcoinGUI::enableHistoryAction);
531+ connect (m_export_watchonly_action, &QAction::triggered, [this ] {
532+ QString destination = GUIUtil::getSaveFileName (this , tr (" Save Watch-only Wallet Export" ), QString (), QString (), nullptr );
533+ if (destination.isEmpty ()) return ;
534+ util::Result<std::string> export_res = walletFrame->currentWalletModel ()->wallet ().exportWatchOnlyWallet (GUIUtil::QStringToPath (destination));
535+ if (export_res) {
536+ QMessageBox::information (nullptr , tr (" Export Successful" ), tr (" The wallet has been exported to " ) + QString::fromStdString (*export_res));
537+ } else {
538+ QMessageBox::critical (nullptr , tr (" Export Error" ), QString::fromStdString (util::ErrorString (export_res).translated ));
539+ }
540+ });
527541 }
528542#endif // ENABLE_WALLET
529543
@@ -547,6 +561,7 @@ void BitcoinGUI::createMenuBar()
547561 file->addSeparator ();
548562 file->addAction (backupWalletAction);
549563 file->addAction (m_restore_wallet_action);
564+ file->addAction (m_export_watchonly_action);
550565 file->addSeparator ();
551566 file->addAction (openAction);
552567 file->addAction (signMessageAction);
@@ -755,6 +770,7 @@ void BitcoinGUI::setWalletController(WalletController* wallet_controller, bool s
755770 m_restore_wallet_action->setEnabled (true );
756771 m_migrate_wallet_action->setEnabled (true );
757772 m_migrate_wallet_action->setMenu (m_migrate_wallet_menu);
773+ m_export_watchonly_action->setEnabled (true );
758774
759775 GUIUtil::ExceptionSafeConnect (wallet_controller, &WalletController::walletAdded, this , &BitcoinGUI::addWallet);
760776 connect (wallet_controller, &WalletController::walletRemoved, this , &BitcoinGUI::removeWallet);
0 commit comments