Skip to content

Commit

Permalink
qt: show payment information in one text area
Browse files Browse the repository at this point in the history
Simplifies the dialog (makes it look less crowded) as well
as the code and makes it possible to copy multiple fields at once.
Also format bitcoin URI as URI, add copy button for URI.
  • Loading branch information
laanwj committed Oct 23, 2013
1 parent 786b066 commit 33a2feb
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 219 deletions.
205 changes: 37 additions & 168 deletions src/qt/forms/receiverequestdialog.ui
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<item>
<widget class="QRImageWidget" name="lblQRCode">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
Expand All @@ -39,6 +39,28 @@
</property>
</widget>
</item>
<item>
<widget class="QTextEdit" name="outUri">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>50</height>
</size>
</property>
<property name="tabChangesFocus">
<bool>true</bool>
</property>
<property name="textInteractionFlags">
<set>Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
Expand All @@ -54,6 +76,20 @@
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btnCopyURI">
<property name="text">
<string>Copy &amp;URI</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnCopyImage">
<property name="text">
<string>&amp;Copy Image</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnSaveAs">
<property name="text">
Expand All @@ -63,176 +99,9 @@
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Bitcoin URI:</string>
</property>
</widget>
</item>
<item>
<widget class="QPlainTextEdit" name="outUri">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>50</height>
</size>
</property>
<property name="tabChangesFocus">
<bool>true</bool>
</property>
<property name="textInteractionFlags">
<set>Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Payment information:</string>
</property>
</widget>
</item>
<item>
<widget class="QWidget" name="widget" native="true">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QFormLayout" name="formLayout">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<item row="2" column="0">
<widget class="QLabel" name="lblLabel">
<property name="text">
<string>Label:</string>
</property>
<property name="textFormat">
<enum>Qt::PlainText</enum>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>lnLabel</cstring>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="lnLabel">
<property name="enabled">
<bool>true</bool>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="lblMessage">
<property name="text">
<string>Message:</string>
</property>
<property name="textFormat">
<enum>Qt::PlainText</enum>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>lnMessage</cstring>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="lnMessage">
<property name="enabled">
<bool>true</bool>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="lblAmount">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Amount:</string>
</property>
<property name="textFormat">
<enum>Qt::PlainText</enum>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>lnReqAmount</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="BitcoinAmountField" name="lnReqAmount" native="true">
<property name="enabled">
<bool>true</bool>
</property>
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="readOnly" stdset="0">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Address:</string>
</property>
<property name="textFormat">
<enum>Qt::PlainText</enum>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>reqAddress</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="lnAddress">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>BitcoinAmountField</class>
<extends>QWidget</extends>
<header>bitcoinamountfield.h</header>
</customwidget>
<customwidget>
<class>QRImageWidget</class>
<extends>QLabel</extends>
Expand Down
3 changes: 2 additions & 1 deletion src/qt/receivecoinsdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,9 @@ void ReceiveCoinsDialog::on_receiveButton_clicked()
}
SendCoinsRecipient info(address, label,
ui->reqAmount->value(), ui->reqMessage->text());
ReceiveRequestDialog *dialog = new ReceiveRequestDialog(info, this);
ReceiveRequestDialog *dialog = new ReceiveRequestDialog(this);
dialog->setModel(model->getOptionsModel());
dialog->setInfo(info);
dialog->setAttribute(Qt::WA_DeleteOnClose);
dialog->show();
clear();
Expand Down
83 changes: 41 additions & 42 deletions src/qt/receiverequestdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@

#include <QPixmap>
#include <QClipboard>
#include <QMouseEvent>
#include <QDrag>
#include <QMimeData>
#if QT_VERSION < 0x050000
#include <QUrl>
#endif
Expand Down Expand Up @@ -64,34 +67,21 @@ void QRImageWidget::copyImage()
QApplication::clipboard()->setImage(exportImage());
}

ReceiveRequestDialog::ReceiveRequestDialog(const SendCoinsRecipient &info, QWidget *parent) :
ReceiveRequestDialog::ReceiveRequestDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::ReceiveRequestDialog),
model(0),
info(info)
model(0)
{
ui->setupUi(this);

QString target = info.label;
if(target.isEmpty())
target = info.address;
setWindowTitle(tr("Request payment to %1").arg(target));

ui->lnAddress->setText(info.address);
if(info.amount)
ui->lnReqAmount->setValue(info.amount);
ui->lnReqAmount->setReadOnly(true);
ui->lnLabel->setText(info.label);
ui->lnMessage->setText(info.message);

#ifndef USE_QRCODE
ui->btnSaveAs->setVisible(false);
ui->btnCopyImage->setVisible(false);
ui->lblQRCode->setVisible(false);
#endif

connect(ui->btnSaveAs, SIGNAL(clicked()), ui->lblQRCode, SLOT(saveImage()));

genCode();
connect(ui->btnCopyImage, SIGNAL(clicked()), ui->lblQRCode, SLOT(copyImage()));
}

ReceiveRequestDialog::~ReceiveRequestDialog()
Expand All @@ -104,17 +94,42 @@ void ReceiveRequestDialog::setModel(OptionsModel *model)
this->model = model;

if (model)
connect(model, SIGNAL(displayUnitChanged(int)), this, SLOT(updateDisplayUnit()));
connect(model, SIGNAL(displayUnitChanged(int)), this, SLOT(update()));

// update the display unit, to not use the default ("BTC")
updateDisplayUnit();
// update the display unit if necessary
update();
}

void ReceiveRequestDialog::genCode()
void ReceiveRequestDialog::setInfo(const SendCoinsRecipient &info)
{
this->info = info;
update();
}

void ReceiveRequestDialog::update()
{
if(!model)
return;
QString target = info.label;
if(target.isEmpty())
target = info.address;
setWindowTitle(tr("Request payment to %1").arg(target));

QString uri = GUIUtil::formatBitcoinURI(info);
ui->btnSaveAs->setEnabled(false);
ui->outUri->setPlainText(uri);
QString html;
html += "<html><font face='verdana, arial, helvetica, sans-serif'>";
html += "<a href=\""+uri+"\">" + GUIUtil::HtmlEscape(uri) + "</a><br>";
html += "<br>";
html += "<b>"+tr("Payment information")+"</b><br>";
html += "<b>"+tr("Address")+"</b>: " + GUIUtil::HtmlEscape(info.address) + "<br>";
if(info.amount)
html += "<b>"+tr("Amount")+"</b>: " + BitcoinUnits::formatWithUnit(model->getDisplayUnit(), info.amount) + "<br>";
if(!info.label.isEmpty())
html += "<b>"+tr("Label")+"</b>: " + GUIUtil::HtmlEscape(info.label) + "<br>";
if(!info.message.isEmpty())
html += "<b>"+tr("Message")+"</b>: " + GUIUtil::HtmlEscape(info.message) + "<br>";
ui->outUri->setText(html);

#ifdef USE_QRCODE
ui->lblQRCode->setText("");
Expand Down Expand Up @@ -151,26 +166,10 @@ void ReceiveRequestDialog::genCode()
#endif
}

void ReceiveRequestDialog::on_lnReqAmount_textChanged()
{
genCode();
}

void ReceiveRequestDialog::on_lnLabel_textChanged()
{
genCode();
}

void ReceiveRequestDialog::on_lnMessage_textChanged()
void ReceiveRequestDialog::on_btnCopyURI_clicked()
{
genCode();
QString uri = GUIUtil::formatBitcoinURI(info);
QApplication::clipboard()->setText(uri, QClipboard::Clipboard);
QApplication::clipboard()->setText(uri, QClipboard::Selection);
}

void ReceiveRequestDialog::updateDisplayUnit()
{
if (model)
{
// Update lnReqAmount with the current unit
ui->lnReqAmount->setDisplayUnit(model->getDisplayUnit());
}
}
Loading

0 comments on commit 33a2feb

Please sign in to comment.