Fix up file filters for filename fields of device configs for consistency
- Filter descriptions are now translatable - Extensions get uppercase and lowercase variations on *nix - Add "All files" option
This commit is contained in:
@@ -31,6 +31,7 @@
|
||||
#include <QLabel>
|
||||
#include <QDir>
|
||||
#include <QSettings>
|
||||
#include <QStringBuilder>
|
||||
|
||||
extern "C" {
|
||||
#include <86box/86box.h>
|
||||
@@ -45,6 +46,7 @@ extern "C" {
|
||||
|
||||
#include "qt_filefield.hpp"
|
||||
#include "qt_models_common.hpp"
|
||||
#include "qt_util.hpp"
|
||||
#ifdef Q_OS_LINUX
|
||||
# include <sys/stat.h>
|
||||
# include <sys/sysmacros.h>
|
||||
@@ -276,11 +278,25 @@ DeviceConfig::ProcessConfig(void *dc, const void *c, const bool is_dep)
|
||||
}
|
||||
case CONFIG_FNAME:
|
||||
{
|
||||
auto *fileField = new FileField();
|
||||
auto *fileField = new FileField(this);
|
||||
fileField->setObjectName(config->name);
|
||||
fileField->setFileName(selected);
|
||||
fileField->setFilter(QString(config->file_filter).left(static_cast<int>(strcspn(config->file_filter,
|
||||
"|"))));
|
||||
/* Get the actually used part of the filter */
|
||||
QString filter = QString(config->file_filter).left(static_cast<int>(strcspn(config->file_filter, "|")));
|
||||
/* Extract the description and the extension list */
|
||||
QRegularExpressionMatch match = QRegularExpression("(.+) \\((.+)\\)$").match(filter);
|
||||
QString description = match.captured(1);
|
||||
QString extensions = match.captured(2);
|
||||
QStringList extensionList;
|
||||
/* Split the extension list up and strip the filename globs */
|
||||
QRegularExpression re("\\*\\.(.*)");
|
||||
int i = 0;
|
||||
while (extensions.section(' ', i, i) != "") {
|
||||
QString extension = re.match(extensions.section(' ', i, i)).captured(1);
|
||||
extensionList.append(extension);
|
||||
i++;
|
||||
}
|
||||
fileField->setFilter(tr(description.toUtf8().constData()) % util::DlgFilter(extensionList) % tr("All files") % util::DlgFilter({ "*" }, true));
|
||||
this->ui->formLayout->addRow(tr(config->description), fileField);
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user