Add -req prefixes to comply with BIP21.
[novacoin.git] / src / qt / guiutil.cpp
index 74863e1..29ef554 100644 (file)
 #include <QFont>
 #include <QLineEdit>
 #include <QUrl>
+#include <QTextDocument> // For Qt::escape
+#include <QAbstractItemView>
+#include <QApplication>
+#include <QClipboard>
 
-QString GUIUtil::DateTimeStr(qint64 nTime)
+QString GUIUtil::dateTimeStr(qint64 nTime)
 {
-    return DateTimeStr(QDateTime::fromTime_t((qint32)nTime));
+    return dateTimeStr(QDateTime::fromTime_t((qint32)nTime));
 }
 
-QString GUIUtil::DateTimeStr(const QDateTime &date)
+QString GUIUtil::dateTimeStr(const QDateTime &date)
 {
     return date.date().toString(Qt::SystemLocaleShortDate) + QString(" ") + date.toString("hh:mm");
 }
@@ -52,21 +56,36 @@ bool GUIUtil::parseBitcoinURL(const QUrl *url, SendCoinsRecipient *out)
 
     SendCoinsRecipient rv;
     rv.address = url->path();
-    rv.label = url->queryItemValue("label");
-
-    QString amount = url->queryItemValue("amount");
-    if(amount.isEmpty())
-    {
-        rv.amount = 0;
-    }
-    else // Amount is non-empty
+    rv.amount = 0;
+    QList<QPair<QString, QString> > items = url->queryItems();
+    for (QList<QPair<QString, QString> >::iterator i = items.begin(); i != items.end(); i++)
     {
-        // TODO: support <n>X<nexp> (exp = 8-nexp) (https://en.bitcoin.it/wiki/URI_Scheme)
-        // TODO: support <n>E<exp>
-        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)
     {
@@ -74,3 +93,31 @@ bool GUIUtil::parseBitcoinURL(const QUrl *url, SendCoinsRecipient *out)
     }
     return true;
 }
+
+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());
+    }
+}