diff options
Diffstat (limited to 'src/qt/guiutil.cpp')
-rw-r--r-- | src/qt/guiutil.cpp | 77 |
1 files changed, 63 insertions, 14 deletions
diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index eeba74b175..ccb2049476 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -11,6 +11,10 @@ #include <QFont> #include <QLineEdit> #include <QUrl> +#include <QTextDocument> // For Qt::escape +#include <QAbstractItemView> +#include <QApplication> +#include <QClipboard> #include <QFileDialog> #include <QDesktopServices> @@ -47,26 +51,43 @@ void GUIUtil::setupAmountWidget(QLineEdit *widget, QWidget *parent) widget->setAlignment(Qt::AlignRight|Qt::AlignVCenter); } -bool GUIUtil::parseBitcoinURI(const QUrl *uri, SendCoinsRecipient *out) +bool GUIUtil::parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out) { - if(uri->scheme() != QString("bitcoin")) + if(uri.scheme() != QString("bitcoin")) return false; SendCoinsRecipient rv; - rv.address = uri->path(); - rv.label = uri->queryItemValue("label"); - - QString amount = uri->queryItemValue("amount"); - if(amount.isEmpty()) - { - rv.amount = 0; - } - else // Amount is non-empty + rv.address = uri.path(); + rv.amount = 0; + QList<QPair<QString, QString> > items = uri.queryItems(); + for (QList<QPair<QString, QString> >::iterator i = items.begin(); i != items.end(); i++) { - if(!BitcoinUnits::parse(BitcoinUnits::BTC, amount, &rv.amount)) + bool fShouldReturnFalse = false; + if (i->first.startsWith("req-")) { - return false; + i->first.remove(0, 4); + fShouldReturnFalse = true; + } + + if (i->first == "label") + { + rv.label = i->second; + fShouldReturnFalse = false; } + else if (i->first == "amount") + { + if(!i->second.isEmpty()) + { + if(!BitcoinUnits::parse(BitcoinUnits::BTC, i->second, &rv.amount)) + { + return false; + } + } + fShouldReturnFalse = false; + } + + if (fShouldReturnFalse) + return false; } if(out) { @@ -86,7 +107,35 @@ bool GUIUtil::parseBitcoinURI(QString uri, SendCoinsRecipient *out) uri.replace(0, 10, "bitcoin:"); } QUrl uriInstance(uri); - return parseBitcoinURI(&uriInstance, out); + return parseBitcoinURI(uriInstance, out); +} + +QString GUIUtil::HtmlEscape(const QString& str, bool fMultiLine) +{ + QString escaped = Qt::escape(str); + if(fMultiLine) + { + escaped = escaped.replace("\n", "<br>\n"); + } + return escaped; +} + +QString GUIUtil::HtmlEscape(const std::string& str, bool fMultiLine) +{ + return HtmlEscape(QString::fromStdString(str), fMultiLine); +} + +void GUIUtil::copyEntryData(QAbstractItemView *view, int column, int role) +{ + if(!view || !view->selectionModel()) + return; + QModelIndexList selection = view->selectionModel()->selectedRows(column); + + if(!selection.isEmpty()) + { + // Copy first item + QApplication::clipboard()->setText(selection.at(0).data(role).toString()); + } } QString GUIUtil::getSaveFileName(QWidget *parent, const QString &caption, |