From c378535e28e0c54353fde9c4a66cb3134a3ee742 Mon Sep 17 00:00:00 2001 From: w0xlt <94266259+w0xlt@users.noreply.github.com> Date: Tue, 21 Jun 2022 18:53:03 -0300 Subject: qt: Add a function that extracts the suffix from a filter Extract the 'Extract first suffix from filter pattern...' functionality into a testable utility function --- src/qt/guiutil.cpp | 28 +++++++++++++--------------- src/qt/guiutil.h | 8 ++++++++ 2 files changed, 21 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index e3c6d8a624..2059ef8583 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -292,6 +292,16 @@ QString getDefaultDataDirectory() return PathToQString(GetDefaultDataDir()); } +QString ExtractFirstSuffixFromFilter(const QString& filter) +{ + QRegExp filter_re(".* \\(\\*\\.(.*)[ \\)]"); + QString suffix; + if (filter_re.exactMatch(filter)) { + suffix = filter_re.cap(1); + } + return suffix; +} + QString getSaveFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedSuffixOut) @@ -309,13 +319,7 @@ QString getSaveFileName(QWidget *parent, const QString &caption, const QString & /* 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(".* \\(\\*\\.(.*)[ \\)]"); - QString selectedSuffix; - if(filter_re.exactMatch(selectedFilter)) - { - selectedSuffix = filter_re.cap(1); - } + QString selectedSuffix = ExtractFirstSuffixFromFilter(selectedFilter); /* Add suffix if needed */ QFileInfo info(result); @@ -357,14 +361,8 @@ QString getOpenFileName(QWidget *parent, const QString &caption, const QString & 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; + *selectedSuffixOut = ExtractFirstSuffixFromFilter(selectedFilter); + ; } return result; } diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h index e38ac6026a..acbe415a91 100644 --- a/src/qt/guiutil.h +++ b/src/qt/guiutil.h @@ -123,6 +123,14 @@ namespace GUIUtil */ QString getDefaultDataDirectory(); + /** + * Extract first suffix from filter pattern "Description (*.foo)" or "Description (*.foo *.bar ...). + * + * @param[in] filter Filter specification such as "Comma Separated Files (*.csv)" + * @return QString + */ + QString ExtractFirstSuffixFromFilter(const QString& filter); + /** Get save filename, mimics QFileDialog::getSaveFileName, except that it appends a default suffix when no suffix is provided by the user. -- cgit v1.2.3 From ace9af5688662a56d855bd26f36bc5c145b909e3 Mon Sep 17 00:00:00 2001 From: w0xlt <94266259+w0xlt@users.noreply.github.com> Date: Tue, 21 Jun 2022 19:11:54 -0300 Subject: qt: Replace `QRegExp` with `QRegularExpression` Co-authored-by: Pavol Rusnak Co-authored-by: Jarol Rodriguez --- src/qt/guiutil.cpp | 8 +++++--- src/qt/utilitydialog.cpp | 8 ++++---- 2 files changed, 9 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index 2059ef8583..2104d5601f 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -56,6 +56,7 @@ #include #include #include +#include #include #include #include @@ -294,10 +295,11 @@ QString getDefaultDataDirectory() QString ExtractFirstSuffixFromFilter(const QString& filter) { - QRegExp filter_re(".* \\(\\*\\.(.*)[ \\)]"); + QRegularExpression filter_re(QStringLiteral(".* \\(\\*\\.(.*)[ \\)]"), QRegularExpression::InvertedGreedinessOption); QString suffix; - if (filter_re.exactMatch(filter)) { - suffix = filter_re.cap(1); + QRegularExpressionMatch m = filter_re.match(filter); + if (m.hasMatch()) { + suffix = m.captured(1); } return suffix; } diff --git a/src/qt/utilitydialog.cpp b/src/qt/utilitydialog.cpp index e68095f8e5..4894cac905 100644 --- a/src/qt/utilitydialog.cpp +++ b/src/qt/utilitydialog.cpp @@ -22,7 +22,8 @@ #include #include #include -#include +#include +#include #include #include #include @@ -44,9 +45,8 @@ HelpMessageDialog::HelpMessageDialog(QWidget *parent, bool about) : /// HTML-format the license message from the core QString licenseInfoHTML = QString::fromStdString(LicenseInfo()); // Make URLs clickable - QRegExp uri("<(.*)>", Qt::CaseSensitive, QRegExp::RegExp2); - uri.setMinimal(true); // use non-greedy matching - licenseInfoHTML.replace(uri, "\\1"); + QRegularExpression uri(QStringLiteral("<(.*)>"), QRegularExpression::InvertedGreedinessOption); + licenseInfoHTML.replace(uri, QStringLiteral("\\1")); // Replace newlines with HTML breaks licenseInfoHTML.replace("\n", "
"); -- cgit v1.2.3 From 67364ebe4c499eb8effe8dac11a5e3648f30c6c7 Mon Sep 17 00:00:00 2001 From: w0xlt <94266259+w0xlt@users.noreply.github.com> Date: Tue, 21 Jun 2022 19:15:06 -0300 Subject: test, qt: Add tests for `GUIUtil::extractFirstSuffixFromFilter` --- src/qt/test/optiontests.cpp | 10 ++++++++++ src/qt/test/optiontests.h | 1 + 2 files changed, 11 insertions(+) (limited to 'src') diff --git a/src/qt/test/optiontests.cpp b/src/qt/test/optiontests.cpp index 3bd0af19ad..17ffeb220b 100644 --- a/src/qt/test/optiontests.cpp +++ b/src/qt/test/optiontests.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include #include @@ -122,3 +123,12 @@ void OptionTests::parametersInteraction() QVERIFY(!settings.contains("fListen")); gArgs.ClearPathCache(); } + +void OptionTests::extractFilter() +{ + QString filter = QString("Partially Signed Transaction (Binary) (*.psbt)"); + QCOMPARE(GUIUtil::ExtractFirstSuffixFromFilter(filter), "psbt"); + + filter = QString("Image (*.png *.jpg)"); + QCOMPARE(GUIUtil::ExtractFirstSuffixFromFilter(filter), "png"); +} diff --git a/src/qt/test/optiontests.h b/src/qt/test/optiontests.h index 286d785572..57ec8bd0f2 100644 --- a/src/qt/test/optiontests.h +++ b/src/qt/test/optiontests.h @@ -22,6 +22,7 @@ private Q_SLOTS: void migrateSettings(); void integerGetArgBug(); void parametersInteraction(); + void extractFilter(); private: interfaces::Node& m_node; -- cgit v1.2.3