|
@@ -1,4 +1,5 @@
|
|
-// ECOin - Copyright (c) - 2014/2021 - GPLv3 - epsylon@riseup.net (https://03c8.net)
|
|
|
|
|
|
+// ECOin - Copyright (c) - 2014/2024 - GPLv3 - epsylon@riseup.net (https://03c8.net)
|
|
|
|
+
|
|
#include "guiutil.h"
|
|
#include "guiutil.h"
|
|
#include "ecoinaddressvalidator.h"
|
|
#include "ecoinaddressvalidator.h"
|
|
#include "walletmodel.h"
|
|
#include "walletmodel.h"
|
|
@@ -11,7 +12,6 @@
|
|
#include <QFont>
|
|
#include <QFont>
|
|
#include <QLineEdit>
|
|
#include <QLineEdit>
|
|
#include <QUrl>
|
|
#include <QUrl>
|
|
-#include <QTextDocument> // For Qt::escape
|
|
|
|
#include <QAbstractItemView>
|
|
#include <QAbstractItemView>
|
|
#include <QApplication>
|
|
#include <QApplication>
|
|
#include <QClipboard>
|
|
#include <QClipboard>
|
|
@@ -20,30 +20,21 @@
|
|
#include <QThread>
|
|
#include <QThread>
|
|
#include <boost/filesystem.hpp>
|
|
#include <boost/filesystem.hpp>
|
|
#include <boost/filesystem/fstream.hpp>
|
|
#include <boost/filesystem/fstream.hpp>
|
|
|
|
+#include <QUrl>
|
|
|
|
+#include <QUrlQuery>
|
|
|
|
+#include <QtGlobal>
|
|
|
|
+#include <QToolTip>
|
|
|
|
|
|
#ifdef WIN32
|
|
#ifdef WIN32
|
|
-#ifdef _WIN32_WINNT
|
|
|
|
-#undef _WIN32_WINNT
|
|
|
|
-#endif
|
|
|
|
-#define _WIN32_WINNT 0x0501
|
|
|
|
-#ifdef _WIN32_IE
|
|
|
|
-#undef _WIN32_IE
|
|
|
|
-#endif
|
|
|
|
-#define _WIN32_IE 0x0501
|
|
|
|
-#define WIN32_LEAN_AND_MEAN 1
|
|
|
|
-#ifndef NOMINMAX
|
|
|
|
-#define NOMINMAX
|
|
|
|
-#endif
|
|
|
|
-#include "shlwapi.h"
|
|
|
|
-#include "shlobj.h"
|
|
|
|
-#include "shellapi.h"
|
|
|
|
|
|
+#include <windows.h>
|
|
|
|
+#include <shlobj.h>
|
|
#endif
|
|
#endif
|
|
|
|
|
|
namespace GUIUtil {
|
|
namespace GUIUtil {
|
|
|
|
|
|
-QString dateTimeStr(const QDateTime &date)
|
|
|
|
|
|
+QString dateTimeStr(const QDateTime &datetime)
|
|
{
|
|
{
|
|
- return date.date().toString(Qt::SystemLocaleShortDate) + QString(" ") + date.toString("hh:mm");
|
|
|
|
|
|
+ return datetime.date().toString(Qt::SystemLocaleShortDate) + QString(" ") + datetime.toString("hh:mm");
|
|
}
|
|
}
|
|
|
|
|
|
QString dateTimeStr(qint64 nTime)
|
|
QString dateTimeStr(qint64 nTime)
|
|
@@ -83,8 +74,8 @@ bool parseEcoinURI(const QUrl &uri, SendCoinsRecipient *out)
|
|
SendCoinsRecipient rv;
|
|
SendCoinsRecipient rv;
|
|
rv.address = uri.path();
|
|
rv.address = uri.path();
|
|
rv.amount = 0;
|
|
rv.amount = 0;
|
|
- QList<QPair<QString, QString> > items = uri.queryItems();
|
|
|
|
- for (QList<QPair<QString, QString> >::iterator i = items.begin(); i != items.end(); i++)
|
|
|
|
|
|
+ QList<QPair<QString, QString>> items = QUrlQuery(uri).queryItems();
|
|
|
|
+ for (QList<QPair<QString, QString>>::iterator i = items.begin(); i != items.end(); i++)
|
|
{
|
|
{
|
|
bool fShouldReturnFalse = false;
|
|
bool fShouldReturnFalse = false;
|
|
if (i->first.startsWith("req-"))
|
|
if (i->first.startsWith("req-"))
|
|
@@ -132,7 +123,7 @@ bool parseEcoinURI(QString uri, SendCoinsRecipient *out)
|
|
|
|
|
|
QString HtmlEscape(const QString& str, bool fMultiLine)
|
|
QString HtmlEscape(const QString& str, bool fMultiLine)
|
|
{
|
|
{
|
|
- QString escaped = Qt::escape(str);
|
|
|
|
|
|
+ QString escaped = str.toHtmlEscaped();
|
|
if(fMultiLine)
|
|
if(fMultiLine)
|
|
{
|
|
{
|
|
escaped = escaped.replace("\n", "<br>\n");
|
|
escaped = escaped.replace("\n", "<br>\n");
|
|
@@ -145,6 +136,31 @@ QString HtmlEscape(const std::string& str, bool fMultiLine)
|
|
return HtmlEscape(QString::fromStdString(str), fMultiLine);
|
|
return HtmlEscape(QString::fromStdString(str), fMultiLine);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ToolTipToRichTextFilter::ToolTipToRichTextFilter(int threshold, QObject *parent) :
|
|
|
|
+ QObject(parent),
|
|
|
|
+ size_threshold(threshold)
|
|
|
|
+{
|
|
|
|
+ // Constructor implementation
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+bool ToolTipToRichTextFilter::eventFilter(QObject *obj, QEvent *evt)
|
|
|
|
+{
|
|
|
|
+ if(evt->type() == QEvent::ToolTipChange)
|
|
|
|
+ {
|
|
|
|
+ QWidget *widget = static_cast<QWidget*>(obj);
|
|
|
|
+ QString tooltip = widget->toolTip();
|
|
|
|
+ if(tooltip.size() > size_threshold && !tooltip.startsWith("<qt>") && !QToolTip::isVisible())
|
|
|
|
+ {
|
|
|
|
+ // Prefix <qt/> to make sure Qt detects this as rich text
|
|
|
|
+ // Escape the current message as HTML and replace \n by <br>
|
|
|
|
+ tooltip = "<qt>" + HtmlEscape(tooltip, true) + "</qt>";
|
|
|
|
+ widget->setToolTip(tooltip);
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return QObject::eventFilter(obj, evt);
|
|
|
|
+}
|
|
|
|
+
|
|
void copyEntryData(QAbstractItemView *view, int column, int role)
|
|
void copyEntryData(QAbstractItemView *view, int column, int role)
|
|
{
|
|
{
|
|
if(!view || !view->selectionModel())
|
|
if(!view || !view->selectionModel())
|
|
@@ -167,7 +183,7 @@ QString getSaveFileName(QWidget *parent, const QString &caption,
|
|
QString myDir;
|
|
QString myDir;
|
|
if(dir.isEmpty()) // Default to user documents location
|
|
if(dir.isEmpty()) // Default to user documents location
|
|
{
|
|
{
|
|
- myDir = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation);
|
|
|
|
|
|
+ myDir = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
@@ -241,30 +257,6 @@ void openDebugLogfile()
|
|
QDesktopServices::openUrl(QUrl::fromLocalFile(QString::fromStdString(pathDebug.string())));
|
|
QDesktopServices::openUrl(QUrl::fromLocalFile(QString::fromStdString(pathDebug.string())));
|
|
}
|
|
}
|
|
|
|
|
|
-ToolTipToRichTextFilter::ToolTipToRichTextFilter(int size_threshold, QObject *parent) :
|
|
|
|
- QObject(parent), size_threshold(size_threshold)
|
|
|
|
-{
|
|
|
|
-
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-bool ToolTipToRichTextFilter::eventFilter(QObject *obj, QEvent *evt)
|
|
|
|
-{
|
|
|
|
- if(evt->type() == QEvent::ToolTipChange)
|
|
|
|
- {
|
|
|
|
- QWidget *widget = static_cast<QWidget*>(obj);
|
|
|
|
- QString tooltip = widget->toolTip();
|
|
|
|
- if(tooltip.size() > size_threshold && !tooltip.startsWith("<qt>") && !Qt::mightBeRichText(tooltip))
|
|
|
|
- {
|
|
|
|
- // Prefix <qt/> to make sure Qt detects this as rich text
|
|
|
|
- // Escape the current message as HTML and replace \n by <br>
|
|
|
|
- tooltip = "<qt>" + HtmlEscape(tooltip, true) + "<qt/>";
|
|
|
|
- widget->setToolTip(tooltip);
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return QObject::eventFilter(obj, evt);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
#ifdef WIN32
|
|
#ifdef WIN32
|
|
boost::filesystem::path static StartupShortcutPath()
|
|
boost::filesystem::path static StartupShortcutPath()
|
|
{
|
|
{
|