Skip to content

Commit 58b9d6c

Browse files
committed
Merge #620: Replace QRegExp with QRegularExpression
67364eb test, qt: Add tests for `GUIUtil::extractFirstSuffixFromFilter` (w0xlt) ace9af5 qt: Replace `QRegExp` with `QRegularExpression` (w0xlt) c378535 qt: Add a function that extracts the suffix from a filter (w0xlt) Pull request description: Picking up #606 (labeled "Up for grabs") and applying #606 (review) and #606 (comment). Replaces occurrences of `QRegExp` usage with `QRegularExpression` as part of the roadmap for Qt6 integration. Fixes #578 ACKs for top commit: laanwj: Code review and lightly tested ACK 67364eb hebasto: ACK 67364eb Tree-SHA512: 4a17d83e557bc635cbd1a15776856e9edb7162b23a369ccbd2ac59c68b8a1ea663baaa7d5ad98e419dc03b91ef3315c768eeadc01c0b29162de109493161e814
2 parents 174b821 + 67364eb commit 58b9d6c

File tree

5 files changed

+38
-19
lines changed

5 files changed

+38
-19
lines changed

src/qt/guiutil.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
#include <QMouseEvent>
5454
#include <QPluginLoader>
5555
#include <QProgressDialog>
56+
#include <QRegularExpression>
5657
#include <QScreen>
5758
#include <QSettings>
5859
#include <QShortcut>
@@ -289,6 +290,17 @@ QString getDefaultDataDirectory()
289290
return PathToQString(GetDefaultDataDir());
290291
}
291292

293+
QString ExtractFirstSuffixFromFilter(const QString& filter)
294+
{
295+
QRegularExpression filter_re(QStringLiteral(".* \\(\\*\\.(.*)[ \\)]"), QRegularExpression::InvertedGreedinessOption);
296+
QString suffix;
297+
QRegularExpressionMatch m = filter_re.match(filter);
298+
if (m.hasMatch()) {
299+
suffix = m.captured(1);
300+
}
301+
return suffix;
302+
}
303+
292304
QString getSaveFileName(QWidget *parent, const QString &caption, const QString &dir,
293305
const QString &filter,
294306
QString *selectedSuffixOut)
@@ -306,13 +318,7 @@ QString getSaveFileName(QWidget *parent, const QString &caption, const QString &
306318
/* Directly convert path to native OS path separators */
307319
QString result = QDir::toNativeSeparators(QFileDialog::getSaveFileName(parent, caption, myDir, filter, &selectedFilter));
308320

309-
/* Extract first suffix from filter pattern "Description (*.foo)" or "Description (*.foo *.bar ...) */
310-
QRegExp filter_re(".* \\(\\*\\.(.*)[ \\)]");
311-
QString selectedSuffix;
312-
if(filter_re.exactMatch(selectedFilter))
313-
{
314-
selectedSuffix = filter_re.cap(1);
315-
}
321+
QString selectedSuffix = ExtractFirstSuffixFromFilter(selectedFilter);
316322

317323
/* Add suffix if needed */
318324
QFileInfo info(result);
@@ -354,14 +360,8 @@ QString getOpenFileName(QWidget *parent, const QString &caption, const QString &
354360

355361
if(selectedSuffixOut)
356362
{
357-
/* Extract first suffix from filter pattern "Description (*.foo)" or "Description (*.foo *.bar ...) */
358-
QRegExp filter_re(".* \\(\\*\\.(.*)[ \\)]");
359-
QString selectedSuffix;
360-
if(filter_re.exactMatch(selectedFilter))
361-
{
362-
selectedSuffix = filter_re.cap(1);
363-
}
364-
*selectedSuffixOut = selectedSuffix;
363+
*selectedSuffixOut = ExtractFirstSuffixFromFilter(selectedFilter);
364+
;
365365
}
366366
return result;
367367
}

src/qt/guiutil.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,14 @@ namespace GUIUtil
123123
*/
124124
QString getDefaultDataDirectory();
125125

126+
/**
127+
* Extract first suffix from filter pattern "Description (*.foo)" or "Description (*.foo *.bar ...).
128+
*
129+
* @param[in] filter Filter specification such as "Comma Separated Files (*.csv)"
130+
* @return QString
131+
*/
132+
QString ExtractFirstSuffixFromFilter(const QString& filter);
133+
126134
/** Get save filename, mimics QFileDialog::getSaveFileName, except that it appends a default suffix
127135
when no suffix is provided by the user.
128136

src/qt/test/optiontests.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#include <init.h>
66
#include <qt/bitcoin.h>
7+
#include <qt/guiutil.h>
78
#include <qt/test/optiontests.h>
89
#include <test/util/setup_common.h>
910
#include <util/system.h>
@@ -122,3 +123,12 @@ void OptionTests::parametersInteraction()
122123
QVERIFY(!settings.contains("fListen"));
123124
gArgs.ClearPathCache();
124125
}
126+
127+
void OptionTests::extractFilter()
128+
{
129+
QString filter = QString("Partially Signed Transaction (Binary) (*.psbt)");
130+
QCOMPARE(GUIUtil::ExtractFirstSuffixFromFilter(filter), "psbt");
131+
132+
filter = QString("Image (*.png *.jpg)");
133+
QCOMPARE(GUIUtil::ExtractFirstSuffixFromFilter(filter), "png");
134+
}

src/qt/test/optiontests.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ private Q_SLOTS:
2222
void migrateSettings();
2323
void integerGetArgBug();
2424
void parametersInteraction();
25+
void extractFilter();
2526

2627
private:
2728
interfaces::Node& m_node;

src/qt/utilitydialog.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
#include <QCloseEvent>
2323
#include <QLabel>
2424
#include <QMainWindow>
25-
#include <QRegExp>
25+
#include <QRegularExpression>
26+
#include <QString>
2627
#include <QTextCursor>
2728
#include <QTextTable>
2829
#include <QVBoxLayout>
@@ -44,9 +45,8 @@ HelpMessageDialog::HelpMessageDialog(QWidget *parent, bool about) :
4445
/// HTML-format the license message from the core
4546
QString licenseInfoHTML = QString::fromStdString(LicenseInfo());
4647
// Make URLs clickable
47-
QRegExp uri("<(.*)>", Qt::CaseSensitive, QRegExp::RegExp2);
48-
uri.setMinimal(true); // use non-greedy matching
49-
licenseInfoHTML.replace(uri, "<a href=\"\\1\">\\1</a>");
48+
QRegularExpression uri(QStringLiteral("<(.*)>"), QRegularExpression::InvertedGreedinessOption);
49+
licenseInfoHTML.replace(uri, QStringLiteral("<a href=\"\\1\">\\1</a>"));
5050
// Replace newlines with HTML breaks
5151
licenseInfoHTML.replace("\n", "<br>");
5252

0 commit comments

Comments
 (0)