66#include < config/bitcoin-config.h>
77#endif
88
9+ #include < external_signer.h>
910#include < qt/createwalletdialog.h>
1011#include < qt/forms/ui_createwalletdialog.h>
1112
@@ -39,14 +40,39 @@ CreateWalletDialog::CreateWalletDialog(QWidget* parent) :
3940 });
4041
4142 connect (ui->encrypt_wallet_checkbox , &QCheckBox::toggled, [this ](bool checked) {
42- // Disable the disable_privkeys_checkbox when isEncryptWalletChecked is
43+ // Disable the disable_privkeys_checkbox and external_signer_checkbox when isEncryptWalletChecked is
4344 // set to true, enable it when isEncryptWalletChecked is false.
4445 ui->disable_privkeys_checkbox ->setEnabled (!checked);
46+ ui->external_signer_checkbox ->setEnabled (!checked);
4547
4648 // When the disable_privkeys_checkbox is disabled, uncheck it.
4749 if (!ui->disable_privkeys_checkbox ->isEnabled ()) {
4850 ui->disable_privkeys_checkbox ->setChecked (false );
4951 }
52+
53+ // When the external_signer_checkbox box is disabled, uncheck it.
54+ if (!ui->external_signer_checkbox ->isEnabled ()) {
55+ ui->external_signer_checkbox ->setChecked (false );
56+ }
57+
58+ });
59+
60+ connect (ui->external_signer_checkbox , &QCheckBox::toggled, [this ](bool checked) {
61+ ui->encrypt_wallet_checkbox ->setEnabled (!checked);
62+ ui->blank_wallet_checkbox ->setEnabled (!checked);
63+ ui->disable_privkeys_checkbox ->setEnabled (!checked);
64+ ui->descriptor_checkbox ->setEnabled (!checked);
65+
66+ // The external signer checkbox is only enabled when a device is detected.
67+ // In that case it is checked by default. Toggling it restores the other
68+ // options to their default.
69+ ui->descriptor_checkbox ->setChecked (checked);
70+ ui->encrypt_wallet_checkbox ->setChecked (false );
71+ ui->disable_privkeys_checkbox ->setChecked (checked);
72+ // The blank check box is ambiguous. This flag is always true for a
73+ // watch-only wallet, even though we immedidately fetch keys from the
74+ // external signer.
75+ ui->blank_wallet_checkbox ->setChecked (checked);
5076 });
5177 connect (ui->disable_privkeys_checkbox , &QCheckBox::toggled, [this ](bool checked) {
5278 // Disable the encrypt_wallet_checkbox when isDisablePrivateKeysChecked is
@@ -74,18 +100,51 @@ CreateWalletDialog::CreateWalletDialog(QWidget* parent) :
74100 ui->descriptor_checkbox ->setToolTip (tr (" Compiled without sqlite support (required for descriptor wallets)" ));
75101 ui->descriptor_checkbox ->setEnabled (false );
76102 ui->descriptor_checkbox ->setChecked (false );
103+ ui->external_signer_checkbox ->setEnabled (false );
104+ ui->external_signer_checkbox ->setChecked (false );
77105#endif
106+
78107#ifndef USE_BDB
79108 ui->descriptor_checkbox ->setEnabled (false );
80109 ui->descriptor_checkbox ->setChecked (true );
81110#endif
111+
112+ #ifndef ENABLE_EXTERNAL_SIGNER
113+ // : "External signing" means using devices such as hardware wallets.
114+ ui->external_signer_checkbox ->setToolTip (tr (" Compiled without external signing support (required for external signing)" ));
115+ ui->external_signer_checkbox ->setEnabled (false );
116+ ui->external_signer_checkbox ->setChecked (false );
117+ #endif
118+
82119}
83120
84121CreateWalletDialog::~CreateWalletDialog ()
85122{
86123 delete ui;
87124}
88125
126+ #ifdef ENABLE_EXTERNAL_SIGNER
127+ void CreateWalletDialog::setSigners (std::vector<ExternalSigner>& signers)
128+ {
129+ if (!signers.empty ()) {
130+ ui->external_signer_checkbox ->setEnabled (true );
131+ ui->external_signer_checkbox ->setChecked (true );
132+ ui->encrypt_wallet_checkbox ->setEnabled (false );
133+ ui->encrypt_wallet_checkbox ->setChecked (false );
134+ // The order matters, because connect() is called when toggling a checkbox:
135+ ui->blank_wallet_checkbox ->setEnabled (false );
136+ ui->blank_wallet_checkbox ->setChecked (false );
137+ ui->disable_privkeys_checkbox ->setEnabled (false );
138+ ui->disable_privkeys_checkbox ->setChecked (true );
139+ const std::string label = signers[0 ].m_name ;
140+ ui->wallet_name_line_edit ->setText (QString::fromStdString (label));
141+ ui->buttonBox ->button (QDialogButtonBox::Ok)->setEnabled (true );
142+ } else {
143+ ui->external_signer_checkbox ->setEnabled (false );
144+ }
145+ }
146+ #endif
147+
89148QString CreateWalletDialog::walletName () const
90149{
91150 return ui->wallet_name_line_edit ->text ();
@@ -110,3 +169,8 @@ bool CreateWalletDialog::isDescriptorWalletChecked() const
110169{
111170 return ui->descriptor_checkbox ->isChecked ();
112171}
172+
173+ bool CreateWalletDialog::isExternalSignerChecked () const
174+ {
175+ return ui->external_signer_checkbox ->isChecked ();
176+ }
0 commit comments