diff options
Diffstat (limited to 'src/qt/guiutil.cpp')
-rw-r--r-- | src/qt/guiutil.cpp | 137 |
1 files changed, 105 insertions, 32 deletions
diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index c951b21b80..85eeab2cbc 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -1,33 +1,16 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "guiutil.h" #include "bitcoinaddressvalidator.h" -#include "walletmodel.h" #include "bitcoinunits.h" +#include "walletmodel.h" -#include "util.h" +#include "core.h" #include "init.h" - -#include <QApplication> -#include <QDateTime> -#include <QDoubleValidator> -#include <QFont> -#include <QLineEdit> -#if QT_VERSION >= 0x050000 -#include <QUrlQuery> -#else -#include <QUrl> -#endif -#include <QTextDocument> // for Qt::mightBeRichText -#include <QAbstractItemView> -#include <QClipboard> -#include <QFileDialog> -#include <QDesktopServices> -#include <QThread> -#include <QSettings> -#include <QDesktopWidget> - -#include <boost/filesystem.hpp> -#include <boost/filesystem/fstream.hpp> +#include "util.h" #ifdef WIN32 #ifdef _WIN32_WINNT @@ -42,9 +25,31 @@ #ifndef NOMINMAX #define NOMINMAX #endif -#include "shlwapi.h" -#include "shlobj.h" #include "shellapi.h" +#include "shlobj.h" +#include "shlwapi.h" +#endif + +#include <boost/filesystem.hpp> +#include <boost/filesystem/fstream.hpp> +#include <QAbstractItemView> +#include <QApplication> +#include <QClipboard> +#include <QDateTime> +#include <QDesktopServices> +#include <QDesktopWidget> +#include <QDoubleValidator> +#include <QFileDialog> +#include <QFont> +#include <QLineEdit> +#include <QSettings> +#include <QTextDocument> // for Qt::mightBeRichText +#include <QThread> + +#if QT_VERSION < 0x050000 +#include <QUrl> +#else +#include <QUrlQuery> #endif namespace GUIUtil { @@ -112,6 +117,11 @@ bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out) rv.label = i->second; fShouldReturnFalse = false; } + if (i->first == "message") + { + rv.message = i->second; + fShouldReturnFalse = false; + } else if (i->first == "amount") { if(!i->second.isEmpty()) @@ -148,6 +158,34 @@ bool parseBitcoinURI(QString uri, SendCoinsRecipient *out) return parseBitcoinURI(uriInstance, out); } +QString formatBitcoinURI(const SendCoinsRecipient &info) +{ + QString ret = QString("bitcoin:%1").arg(info.address); + int paramCount = 0; + + if (info.amount) + { + ret += QString("?amount=%1").arg(BitcoinUnits::format(BitcoinUnits::BTC, info.amount)); + paramCount++; + } + + if (!info.label.isEmpty()) + { + QString lbl(QUrl::toPercentEncoding(info.label)); + ret += QString("%1label=%2").arg(paramCount == 0 ? "?" : "&").arg(lbl); + paramCount++; + } + + if (!info.message.isEmpty()) + { + QString msg(QUrl::toPercentEncoding(info.message));; + ret += QString("%1message=%2").arg(paramCount == 0 ? "?" : "&").arg(msg); + paramCount++; + } + + return ret; +} + bool isDust(const QString& address, qint64 amount) { CTxDestination dest = CBitcoinAddress(address.toStdString()).Get(); @@ -190,10 +228,9 @@ void copyEntryData(QAbstractItemView *view, int column, int role) } } -QString getSaveFileName(QWidget *parent, const QString &caption, - const QString &dir, - const QString &filter, - QString *selectedSuffixOut) +QString getSaveFileName(QWidget *parent, const QString &caption, const QString &dir, + const QString &filter, + QString *selectedSuffixOut) { QString selectedFilter; QString myDir; @@ -209,7 +246,8 @@ QString getSaveFileName(QWidget *parent, const QString &caption, { myDir = dir; } - QString result = QFileDialog::getSaveFileName(parent, caption, myDir, filter, &selectedFilter); + /* Directly convert path to native OS path separators */ + QString result = QDir::toNativeSeparators(QFileDialog::getSaveFileName(parent, caption, myDir, filter, &selectedFilter)); /* Extract first suffix from filter pattern "Description (*.foo)" or "Description (*.foo *.bar ...) */ QRegExp filter_re(".* \\(\\*\\.(.*)[ \\)]"); @@ -240,6 +278,41 @@ QString getSaveFileName(QWidget *parent, const QString &caption, return result; } +QString getOpenFileName(QWidget *parent, const QString &caption, const QString &dir, + const QString &filter, + QString *selectedSuffixOut) +{ + QString selectedFilter; + QString myDir; + if(dir.isEmpty()) // Default to user documents location + { +#if QT_VERSION < 0x050000 + myDir = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation); +#else + myDir = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); +#endif + } + else + { + myDir = dir; + } + /* Directly convert path to native OS path separators */ + QString result = QDir::toNativeSeparators(QFileDialog::getOpenFileName(parent, caption, myDir, filter, &selectedFilter)); + + if(selectedSuffixOut) + { + /* Extract first suffix from filter pattern "Description (*.foo)" or "Description (*.foo *.bar ...) */ + QRegExp filter_re(".* \\(\\*\\.(.*)[ \\)]"); + QString selectedSuffix; + if(filter_re.exactMatch(selectedFilter)) + { + selectedSuffix = filter_re.cap(1); + } + *selectedSuffixOut = selectedSuffix; + } + return result; +} + Qt::ConnectionType blockingGUIThreadConnection() { if(QThread::currentThread() != qApp->thread()) @@ -527,7 +600,7 @@ HelpMessageBox::HelpMessageBox(QWidget *parent) : tr("Usage:") + "\n" + " bitcoin-qt [" + tr("command-line options") + "] " + "\n"; - coreOptions = QString::fromStdString(HelpMessage()); + coreOptions = QString::fromStdString(HelpMessage(HMM_BITCOIN_QT)); uiOptions = tr("UI options") + ":\n" + " -lang=<lang> " + tr("Set language, for example \"de_DE\" (default: system locale)") + "\n" + |