From 405e98639f14c7e6d5945596aec464d5a3b6f795 Mon Sep 17 00:00:00 2001 From: Cory Bloor Date: Thu, 12 Oct 2017 02:59:46 -0600 Subject: [PATCH] Parse getSaveFileName filter for default file exts Instead of manually specifying the default extension, just grab the first one from each filter. We can only specify one at a time, so update it whenever the selected filter changes. --- qrenderdoc/Code/QRDUtils.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/qrenderdoc/Code/QRDUtils.cpp b/qrenderdoc/Code/QRDUtils.cpp index 43791add8..d2c9d9190 100644 --- a/qrenderdoc/Code/QRDUtils.cpp +++ b/qrenderdoc/Code/QRDUtils.cpp @@ -36,6 +36,8 @@ #include #include #include +#include +#include #include #include @@ -536,6 +538,19 @@ QString RDDialog::getExecutableFileName(QWidget *parent, const QString &caption, return QString(); } +static QStringList getDefaultSuffixesFromFilter(const QString &filter) +{ + // capture the first suffix found and discard the rest + static const QRegularExpression regex(lit("\\*\\.([\\w.]+).*")); + + QStringList suffixes; + for(const QString &s : filter.split(lit(";;"))) + { + suffixes << regex.match(s).captured(1); + } + return suffixes; +} + QString RDDialog::getSaveFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFileDialog::Options options) @@ -543,6 +558,13 @@ QString RDDialog::getSaveFileName(QWidget *parent, const QString &caption, const QFileDialog fd(parent, caption, dir, filter); fd.setAcceptMode(QFileDialog::AcceptSave); fd.setOptions(options); + const QStringList &defaultSuffixes = getDefaultSuffixesFromFilter(filter); + if(!defaultSuffixes.isEmpty()) + fd.setDefaultSuffix(defaultSuffixes.first()); + QObject::connect(&fd, &QFileDialog::filterSelected, [&](const QString &filter) { + int i = fd.nameFilters().indexOf(filter); + fd.setDefaultSuffix(defaultSuffixes.value(i)); + }); show(&fd); if(fd.result() == QFileDialog::Accepted)