From 329e0ded91e528ee4beb1a21b170ddc257e2d926 Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Fri, 6 Mar 2020 12:01:17 -0800 Subject: [PATCH] Handle multiple file extensions correctly --- src/QmlControls/QGCFileDialog.qml | 12 ++++++------ src/QmlControls/QGCFileDialogController.cc | 22 +++++++++++++++------- src/QmlControls/QGCFileDialogController.h | 4 ++-- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/QmlControls/QGCFileDialog.qml b/src/QmlControls/QGCFileDialog.qml index fedb66e15..06fe48e4a 100644 --- a/src/QmlControls/QGCFileDialog.qml +++ b/src/QmlControls/QGCFileDialog.qml @@ -117,12 +117,12 @@ Item { onClicked: { hideDialog() - _root.acceptedForLoad(controller.fullyQualifiedFilename(folder, modelData, fileExtension)) + _root.acceptedForLoad(controller.fullyQualifiedFilename(folder, modelData, _rgExtensions)) } onHamburgerClicked: { highlight = true - hamburgerMenu.fileToDelete = controller.fullyQualifiedFilename(folder, modelData, fileExtension) + hamburgerMenu.fileToDelete = controller.fullyQualifiedFilename(folder, modelData, _rgExtensions) hamburgerMenu.popup() } @@ -162,12 +162,12 @@ Item { return } if (!replaceMessage.visible) { - if (controller.fileExists(controller.fullyQualifiedFilename(folder, filenameTextField.text, fileExtension))) { + if (controller.fileExists(controller.fullyQualifiedFilename(folder, filenameTextField.text, _rgExtensions))) { replaceMessage.visible = true return } } - _root.acceptedForSave(controller.fullyQualifiedFilename(folder, filenameTextField.text, fileExtension)) + _root.acceptedForSave(controller.fullyQualifiedFilename(folder, filenameTextField.text, _rgExtensions)) hideDialog() } @@ -230,12 +230,12 @@ Item { onClicked: { hideDialog() - _root.acceptedForSave(controller.fullyQualifiedFilename(folder, modelData, fileExtension)) + _root.acceptedForSave(controller.fullyQualifiedFilename(folder, modelData, _rgExtensions)) } onHamburgerClicked: { highlight = true - hamburgerMenu.fileToDelete = controller.fullyQualifiedFilename(folder, modelData, fileExtension) + hamburgerMenu.fileToDelete = controller.fullyQualifiedFilename(folder, modelData, _rgExtensions) hamburgerMenu.popup() } diff --git a/src/QmlControls/QGCFileDialogController.cc b/src/QmlControls/QGCFileDialogController.cc index f5528df80..375fbd32a 100644 --- a/src/QmlControls/QGCFileDialogController.cc +++ b/src/QmlControls/QGCFileDialogController.cc @@ -38,16 +38,24 @@ QStringList QGCFileDialogController::getFiles(const QString& directoryPath, cons return files; } -QString QGCFileDialogController::filenameWithExtension(const QString& filename, const QString& fileExtension) +QString QGCFileDialogController::filenameWithExtension(const QString& filename, const QStringList& rgFileExtensions) { QString filenameWithExtension(filename); - QString correctExtension = QString(".%1").arg(fileExtension); - if (!filenameWithExtension.endsWith(correctExtension)) { - filenameWithExtension += correctExtension; + bool matchFound = false; + for (const QString& extension : rgFileExtensions) { + QString dotExtension = QString(".%1").arg(extension); + matchFound = filenameWithExtension.endsWith(dotExtension); + if (matchFound) { + break; + } } - return filenameWithExtension; + if (!matchFound) { + filenameWithExtension += rgFileExtensions[0]; + } + +return filenameWithExtension; } bool QGCFileDialogController::fileExists(const QString& filename) @@ -55,9 +63,9 @@ bool QGCFileDialogController::fileExists(const QString& filename) return QFile(filename).exists(); } -QString QGCFileDialogController::fullyQualifiedFilename(const QString& directoryPath, const QString& filename, const QString& fileExtension) +QString QGCFileDialogController::fullyQualifiedFilename(const QString& directoryPath, const QString& filename, const QStringList& rgFileExtensions) { - return directoryPath + QStringLiteral("/") + filenameWithExtension(filename, fileExtension); + return directoryPath + QStringLiteral("/") + filenameWithExtension(filename, rgFileExtensions); } void QGCFileDialogController::deleteFile(const QString& filename) diff --git a/src/QmlControls/QGCFileDialogController.h b/src/QmlControls/QGCFileDialogController.h index 209a483cd..4e80503a0 100644 --- a/src/QmlControls/QGCFileDialogController.h +++ b/src/QmlControls/QGCFileDialogController.h @@ -27,10 +27,10 @@ public: Q_INVOKABLE QStringList getFiles(const QString& directoryPath, const QStringList& fileExtensions); /// Returns the specified file name with the extension added it needed - Q_INVOKABLE QString filenameWithExtension(const QString& filename, const QString& fileExtension); + Q_INVOKABLE QString filenameWithExtension(const QString& filename, const QStringList& rgFileExtensions); /// Returns the fully qualified file name from the specified parts - Q_INVOKABLE QString fullyQualifiedFilename(const QString& directoryPath, const QString& filename, const QString& fileExtension); + Q_INVOKABLE QString fullyQualifiedFilename(const QString& directoryPath, const QString& filename, const QStringList& rgFileExtensions); /// Check for file existence of specified fully qualified file name Q_INVOKABLE bool fileExists(const QString& filename); -- 2.22.0