aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2013-10-18 14:25:35 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2013-10-23 09:15:25 +0200
commit33a2febf5de0c7bd73c0ea409584487bd9995643 (patch)
tree0c485b19fc58751f732a290a13cc83cd9577d374 /src
parent786b066f037bf2d7ba7fe0df1a4e15b22ab65599 (diff)
downloadbitcoin-33a2febf5de0c7bd73c0ea409584487bd9995643.tar.xz
qt: show payment information in one text area
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.
Diffstat (limited to 'src')
-rw-r--r--src/qt/forms/receiverequestdialog.ui205
-rw-r--r--src/qt/receivecoinsdialog.cpp3
-rw-r--r--src/qt/receiverequestdialog.cpp83
-rw-r--r--src/qt/receiverequestdialog.h12
4 files changed, 84 insertions, 219 deletions
diff --git a/src/qt/forms/receiverequestdialog.ui b/src/qt/forms/receiverequestdialog.ui
index 4f53dc19b8..fc0d10b4e4 100644
--- a/src/qt/forms/receiverequestdialog.ui
+++ b/src/qt/forms/receiverequestdialog.ui
@@ -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>
@@ -40,6 +40,28 @@
</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>
<spacer name="horizontalSpacer">
@@ -55,6 +77,20 @@
</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">
<string>&amp;Save Image...</string>
@@ -63,177 +99,10 @@
</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>
<header>receiverequestdialog.h</header>
diff --git a/src/qt/receivecoinsdialog.cpp b/src/qt/receivecoinsdialog.cpp
index fff678d0c6..f3ab343fea 100644
--- a/src/qt/receivecoinsdialog.cpp
+++ b/src/qt/receivecoinsdialog.cpp
@@ -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();
diff --git a/src/qt/receiverequestdialog.cpp b/src/qt/receiverequestdialog.cpp
index efbc6ebd70..f6031e2b47 100644
--- a/src/qt/receiverequestdialog.cpp
+++ b/src/qt/receiverequestdialog.cpp
@@ -9,6 +9,9 @@
#include <QPixmap>
#include <QClipboard>
+#include <QMouseEvent>
+#include <QDrag>
+#include <QMimeData>
#if QT_VERSION < 0x050000
#include <QUrl>
#endif
@@ -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()
@@ -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("");
@@ -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());
- }
-}
diff --git a/src/qt/receiverequestdialog.h b/src/qt/receiverequestdialog.h
index bfe50bde77..8db1ad83a1 100644
--- a/src/qt/receiverequestdialog.h
+++ b/src/qt/receiverequestdialog.h
@@ -36,25 +36,21 @@ class ReceiveRequestDialog : public QDialog
Q_OBJECT
public:
- explicit ReceiveRequestDialog(const SendCoinsRecipient &info, QWidget *parent = 0);
+ explicit ReceiveRequestDialog(QWidget *parent = 0);
~ReceiveRequestDialog();
void setModel(OptionsModel *model);
+ void setInfo(const SendCoinsRecipient &info);
private slots:
- void on_lnReqAmount_textChanged();
- void on_lnLabel_textChanged();
- void on_lnMessage_textChanged();
+ void on_btnCopyURI_clicked();
- void updateDisplayUnit();
+ void update();
private:
Ui::ReceiveRequestDialog *ui;
OptionsModel *model;
SendCoinsRecipient info;
-
- void genCode();
- QString getURI();
};
#endif // QRCODEDIALOG_H