Skip to content

Commit

Permalink
Merge pull request #8511 from DonLakeFlyer/MobileFileDialog
Browse files Browse the repository at this point in the history
Mobile file dialog: Handle multiple extensions correctly
  • Loading branch information
DonLakeFlyer committed Mar 6, 2020
2 parents 4e44689 + 329e0de commit b3ba76a
Show file tree
Hide file tree
Showing 12 changed files with 26 additions and 15 deletions.
1 change: 1 addition & 0 deletions src/MissionManager/UnitTest/MP 19.prj
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
Binary file added src/MissionManager/UnitTest/MP 19.shp
Binary file not shown.
Binary file added src/MissionManager/UnitTest/MP 19.shx
Binary file not shown.
1 change: 1 addition & 0 deletions src/MissionManager/UnitTest/MP Bonus.prj
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
Binary file added src/MissionManager/UnitTest/MP Bonus.shp
Binary file not shown.
Binary file added src/MissionManager/UnitTest/MP Bonus.shx
Binary file not shown.
1 change: 1 addition & 0 deletions src/MissionManager/UnitTest/Sarah's Farm.prj
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
Binary file added src/MissionManager/UnitTest/Sarah's Farm.shp
Binary file not shown.
Binary file added src/MissionManager/UnitTest/Sarah's Farm.shx
Binary file not shown.
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 b3ba76a

Please sign in to comment.