receiverequestdialog.cpp
1 // Copyright (c) 2011-present The Bitcoin Core developers 2 // Distributed under the MIT software license, see the accompanying 3 // file COPYING or http://www.opensource.org/licenses/mit-license.php. 4 5 #include <qt/receiverequestdialog.h> 6 #include <qt/forms/ui_receiverequestdialog.h> 7 8 #include <qt/bitcoinunits.h> 9 #include <qt/guiutil.h> 10 #include <qt/optionsmodel.h> 11 #include <qt/qrimagewidget.h> 12 #include <qt/walletmodel.h> 13 14 #include <QDialog> 15 #include <QString> 16 17 #include <bitcoin-build-config.h> // IWYU pragma: keep 18 19 ReceiveRequestDialog::ReceiveRequestDialog(QWidget* parent) 20 : QDialog(parent, GUIUtil::dialog_flags), 21 ui(new Ui::ReceiveRequestDialog) 22 { 23 ui->setupUi(this); 24 GUIUtil::handleCloseWindowShortcut(this); 25 } 26 27 ReceiveRequestDialog::~ReceiveRequestDialog() 28 { 29 delete ui; 30 } 31 32 void ReceiveRequestDialog::setModel(WalletModel *_model) 33 { 34 this->model = _model; 35 36 if (_model) 37 connect(_model->getOptionsModel(), &OptionsModel::displayUnitChanged, this, &ReceiveRequestDialog::updateDisplayUnit); 38 39 // update the display unit if necessary 40 update(); 41 } 42 43 void ReceiveRequestDialog::setInfo(const SendCoinsRecipient &_info) 44 { 45 this->info = _info; 46 setWindowTitle(tr("Request payment to %1").arg(info.label.isEmpty() ? info.address : info.label)); 47 QString uri = GUIUtil::formatBitcoinURI(info); 48 49 #ifdef USE_QRCODE 50 if (ui->qr_code->setQR(uri, info.address)) { 51 connect(ui->btnSaveAs, &QPushButton::clicked, ui->qr_code, &QRImageWidget::saveImage); 52 } else { 53 ui->btnSaveAs->setEnabled(false); 54 } 55 #else 56 ui->btnSaveAs->hide(); 57 ui->qr_code->hide(); 58 #endif 59 60 ui->uri_content->setText("<a href=\"" + uri + "\">" + GUIUtil::HtmlEscape(uri) + "</a>"); 61 ui->address_content->setText(info.address); 62 63 if (!info.amount) { 64 ui->amount_tag->hide(); 65 ui->amount_content->hide(); 66 } // Amount is set in updateDisplayUnit() slot. 67 updateDisplayUnit(); 68 69 if (!info.label.isEmpty()) { 70 ui->label_content->setText(info.label); 71 } else { 72 ui->label_tag->hide(); 73 ui->label_content->hide(); 74 } 75 76 if (!info.message.isEmpty()) { 77 ui->message_content->setText(info.message); 78 } else { 79 ui->message_tag->hide(); 80 ui->message_content->hide(); 81 } 82 83 if (!model->getWalletName().isEmpty()) { 84 ui->wallet_content->setText(model->getWalletName()); 85 } else { 86 ui->wallet_tag->hide(); 87 ui->wallet_content->hide(); 88 } 89 90 ui->btnVerify->setVisible(model->wallet().hasExternalSigner()); 91 92 connect(ui->btnVerify, &QPushButton::clicked, [this] { 93 model->displayAddress(info.address.toStdString()); 94 }); 95 } 96 97 void ReceiveRequestDialog::updateDisplayUnit() 98 { 99 if (!model) return; 100 ui->amount_content->setText(BitcoinUnits::formatWithUnit(model->getOptionsModel()->getDisplayUnit(), info.amount)); 101 } 102 103 void ReceiveRequestDialog::on_btnCopyURI_clicked() 104 { 105 GUIUtil::setClipboard(GUIUtil::formatBitcoinURI(info)); 106 } 107 108 void ReceiveRequestDialog::on_btnCopyAddress_clicked() 109 { 110 GUIUtil::setClipboard(info.address); 111 }