@@ -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+ GUIUtil::ExceptionSafeConnect (m_export_watchonly_action, &QAction::triggered, [this ](bool ) {
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);
@@ -832,6 +847,7 @@ void BitcoinGUI::setCurrentWallet(WalletModel* wallet_model)
832847 break ;
833848 }
834849 }
850+ m_export_watchonly_action->setEnabled (!wallet_model->wallet ().privateKeysDisabled ());
835851 updateWindowTitle ();
836852}
837853
0 commit comments