Merge gui_payreq_textedit

This commit is contained in:
Luke Dashjr 2025-03-05 03:27:08 +00:00
commit b487f357bb
3 changed files with 61 additions and 5 deletions

View File

@ -6,17 +6,14 @@
<rect>
<x>0</x>
<y>0</y>
<width>413</width>
<height>229</height>
<width>487</width>
<height>597</height>
</rect>
</property>
<property name="windowTitle">
<string>Request payment to …</string>
</property>
<layout class="QGridLayout" name="gridLayout" columnstretch="0,1">
<property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum>
</property>
<item row="0" column="0" colspan="2" alignment="Qt::AlignHCenter">
<widget class="QRImageWidget" name="qr_code">
<property name="text">

View File

@ -12,7 +12,9 @@
#include <qt/walletmodel.h>
#include <QDialog>
#include <QLayoutItem>
#include <QString>
#include <QTextEdit>
#include <config/bitcoin-config.h> // IWYU pragma: keep
@ -21,14 +23,62 @@ ReceiveRequestDialog::ReceiveRequestDialog(QWidget* parent)
ui(new Ui::ReceiveRequestDialog)
{
ui->setupUi(this);
while (QLayoutItem * const child = ui->gridLayout->itemAt(1)) {
if (child == ui->horizontalLayout) break; // stop at buttons
ui->gridLayout->removeItem(child);
auto child_widget = child->widget();
// NOTE: Unparenting causes isHidden to be unconditionally true, so just make it sizeless and exclude it from the layout
child_widget->setMaximumSize(0, 0);
m_info_grid.append(child_widget);
delete child;
}
m_info_widget = new QTextEdit(this);
m_info_widget->setMinimumSize(0, 50);
m_info_widget->setFrameShape(QFrame::NoFrame);
m_info_widget->setFrameShadow(QFrame::Plain);
m_info_widget->setTabChangesFocus(true);
m_info_widget->setTextInteractionFlags(Qt::TextSelectableByKeyboard | Qt::TextSelectableByMouse);
ui->gridLayout->addWidget(m_info_widget, 1, 0, 1, 2);
GUIUtil::handleCloseWindowShortcut(this);
}
ReceiveRequestDialog::~ReceiveRequestDialog()
{
for (auto& widget : m_info_grid) {
delete widget;
}
delete ui;
}
void ReceiveRequestDialog::updateInfoWidget()
{
QString html;
html += "<html><font face='verdana, arial, helvetica, sans-serif'>";
int i = 0;
for (auto& widget : m_info_grid) {
++i;
QLabel * const label = dynamic_cast<QLabel*>(widget);
assert(label);
QString text = label->text();
if (!label->isHidden()) {
if (i == 1) {
html += "<b>" + text + "</b><br>";
} else if (i % 2 == 0) {
assert(text.endsWith(":"));
text.chop(1);
html += "<b>" + text + "</b>: ";
} else {
html += text + "<br>";
}
}
}
html += "</font></html>";
m_info_widget->setText(html);
}
void ReceiveRequestDialog::setModel(WalletModel *_model)
{
this->model = _model;
@ -90,6 +140,8 @@ void ReceiveRequestDialog::setInfo(const SendCoinsRecipient &_info)
ui->wallet_content->hide();
}
updateInfoWidget();
ui->btnVerify->setVisible(model->wallet().hasExternalSigner());
connect(ui->btnVerify, &QPushButton::clicked, [this] {
@ -101,6 +153,7 @@ void ReceiveRequestDialog::updateDisplayUnit()
{
if (!model) return;
ui->amount_content->setText(BitcoinUnits::formatWithUnit(model->getOptionsModel()->getDisplayUnit(), info.amount));
updateInfoWidget();
}
void ReceiveRequestDialog::on_btnCopyURI_clicked()

View File

@ -8,6 +8,9 @@
#include <qt/sendcoinsrecipient.h>
#include <QDialog>
#include <QList>
#include <QTextEdit>
#include <QWidget>
class WalletModel;
@ -33,6 +36,9 @@ private Q_SLOTS:
private:
Ui::ReceiveRequestDialog *ui;
void updateInfoWidget();
QTextEdit *m_info_widget;
QList<QWidget*> m_info_grid;
WalletModel* model{nullptr};
SendCoinsRecipient info;
};