receiverequestdialog.cpp raw
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 }
112