Skip to content

Commit

Permalink
Handle multiple file extensions correctly
Browse files Browse the repository at this point in the history
  • Loading branch information
Don Gagne committed Mar 6, 2020
1 parent f3072b2 commit 329e0de
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 15 deletions.
12 changes: 6 additions & 6 deletions src/QmlControls/QGCFileDialog.qml
Original file line number Diff line number Diff line change
Expand Up @@ -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()
}

Expand Down Expand Up @@ -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()
}

Expand Down Expand Up @@ -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()
}

Expand Down
22 changes: 15 additions & 7 deletions src/QmlControls/QGCFileDialogController.cc
Original file line number Diff line number Diff line change
Expand Up @@ -38,26 +38,34 @@ 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)
{
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)
Expand Down
4 changes: 2 additions & 2 deletions src/QmlControls/QGCFileDialogController.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ class QGCFileDialogController : public QObject
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);
Expand Down

0 comments on commit 329e0de

Please sign in to comment.