Browse Source

MobileFileDialog bug fixes

QGC4.4
Don Gagne 8 years ago
parent
commit
35c61df64d
  1. 3
      qgroundcontrol.qrc
  2. 8
      src/MissionEditor/MissionEditor.qml
  3. 13
      src/QGCMobileFileDialogController.cc
  4. 7
      src/QmlControls/ParameterEditor.qml
  5. 121
      src/QmlControls/QGCMobileFileDialog.qml
  6. 3
      src/QmlControls/QGroundControl.Controls.qmldir

3
qgroundcontrol.qrc

@ -67,7 +67,8 @@
<file alias="QGroundControl/Controls/QGCFlickableVerticalIndicator.qml">src/QmlControls/QGCFlickableVerticalIndicator.qml</file> <file alias="QGroundControl/Controls/QGCFlickableVerticalIndicator.qml">src/QmlControls/QGCFlickableVerticalIndicator.qml</file>
<file alias="QGroundControl/Controls/QGCLabel.qml">src/QmlControls/QGCLabel.qml</file> <file alias="QGroundControl/Controls/QGCLabel.qml">src/QmlControls/QGCLabel.qml</file>
<file alias="QGroundControl/Controls/QGCListView.qml">src/QmlControls/QGCListView.qml</file> <file alias="QGroundControl/Controls/QGCListView.qml">src/QmlControls/QGCListView.qml</file>
<file alias="QGroundControl/Controls/QGCMobileFileDialog.qml">src/QmlControls/QGCMobileFileDialog.qml</file> <file alias="QGroundControl/Controls/QGCMobileFileOpenDialog.qml">src/QmlControls/QGCMobileFileOpenDialog.qml</file>
<file alias="QGroundControl/Controls/QGCMobileFileSaveDialog.qml">src/QmlControls/QGCMobileFileSaveDialog.qml</file>
<file alias="QGroundControl/Controls/QGCMovableItem.qml">src/QmlControls/QGCMovableItem.qml</file> <file alias="QGroundControl/Controls/QGCMovableItem.qml">src/QmlControls/QGCMovableItem.qml</file>
<file alias="QGroundControl/Controls/QGCPipable.qml">src/QmlControls/QGCPipable.qml</file> <file alias="QGroundControl/Controls/QGCPipable.qml">src/QmlControls/QGCPipable.qml</file>
<file alias="QGroundControl/Controls/QGCRadioButton.qml">src/QmlControls/QGCRadioButton.qml</file> <file alias="QGroundControl/Controls/QGCRadioButton.qml">src/QmlControls/QGCRadioButton.qml</file>

8
src/MissionEditor/MissionEditor.qml

@ -207,7 +207,7 @@ QGCView {
function loadFromSelectedFile() { function loadFromSelectedFile() {
if (ScreenTools.isMobile) { if (ScreenTools.isMobile) {
qgcView.showDialog(mobileFilePicker, qsTr("Select Mission File"), qgcView.showDialogDefaultWidth, StandardButton.Yes | StandardButton.Cancel) qgcView.showDialog(mobileFilePicker, qsTr("Select Mission File"), qgcView.showDialogDefaultWidth, StandardButton.Cancel)
} else { } else {
missionController.loadFromFilePicker() missionController.loadFromFilePicker()
fitMapViewportToMissionItems() fitMapViewportToMissionItems()
@ -366,8 +366,7 @@ QGCView {
Component { Component {
id: mobileFilePicker id: mobileFilePicker
QGCMobileFileDialog { QGCMobileFileOpenDialog {
openDialog: true
fileExtension: _syncDropDownController.fileExtension fileExtension: _syncDropDownController.fileExtension
onFilenameReturned: { onFilenameReturned: {
_syncDropDownController.loadFromFile(filename) _syncDropDownController.loadFromFile(filename)
@ -379,8 +378,7 @@ QGCView {
Component { Component {
id: mobileFileSaver id: mobileFileSaver
QGCMobileFileDialog { QGCMobileFileSaveDialog {
openDialog: false
fileExtension: _syncDropDownController.fileExtension fileExtension: _syncDropDownController.fileExtension
onFilenameReturned: _syncDropDownController.saveToFile(filename) onFilenameReturned: _syncDropDownController.saveToFile(filename)
} }

13
src/QGCMobileFileDialogController.cc

@ -33,6 +33,7 @@ QStringList QGCMobileFileDialogController::getFiles(const QString& fileExtension
QString QGCMobileFileDialogController::fullPath(const QString& filename, const QString& fileExtension) QString QGCMobileFileDialogController::fullPath(const QString& filename, const QString& fileExtension)
{ {
qDebug() << "QGCMobileFileDialogController::fullPath" << filename << fileExtension;
QString saveLocation(_getSaveLocation()); QString saveLocation(_getSaveLocation());
if (saveLocation.isEmpty()) { if (saveLocation.isEmpty()) {
return filename; return filename;
@ -52,6 +53,7 @@ QString QGCMobileFileDialogController::fullPath(const QString& filename, const Q
bool QGCMobileFileDialogController::fileExists(const QString& filename, const QString& fileExtension) bool QGCMobileFileDialogController::fileExists(const QString& filename, const QString& fileExtension)
{ {
QFile file(fullPath(filename, fileExtension)); QFile file(fullPath(filename, fileExtension));
qDebug() << "QGCMobileFileDialogController::fileExists" << file.fileName();
return file.exists(); return file.exists();
} }
@ -59,10 +61,15 @@ QString QGCMobileFileDialogController::_getSaveLocation(void)
{ {
QStringList docDirs = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation); QStringList docDirs = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation);
if (docDirs.count() <= 0) { if (docDirs.count() <= 0) {
qCWarning(QGCMobileFileDialogControllerLog) << "No Documents location"; qCWarning(QGCMobileFileDialogControllerLog) << "No save location";
return QString(); return QString();
} }
qCDebug(QGCMobileFileDialogControllerLog) << "Save directory" << docDirs.at(0);
return docDirs.at(0); QString saveDirectory = docDirs[0];
if (!QDir(saveDirectory).exists()) {
QDir().mkdir(saveDirectory);
}
qCDebug(QGCMobileFileDialogControllerLog) << "Save directory" << saveDirectory;
return saveDirectory;
} }

7
src/QmlControls/ParameterEditor.qml

@ -96,7 +96,7 @@ QGCView {
text: qsTr("Load from file...") text: qsTr("Load from file...")
onTriggered: { onTriggered: {
if (ScreenTools.isMobile) { if (ScreenTools.isMobile) {
qgcView.showDialog(mobileFilePicker, qsTr("Select Parameter File"), qgcView.showDialogDefaultWidth, StandardButton.Yes | StandardButton.Cancel) qgcView.showDialog(mobileFilePicker, qsTr("Select Parameter File"), qgcView.showDialogDefaultWidth, StandardButton.Cancel)
} else { } else {
controller.loadFromFilePicker() controller.loadFromFilePicker()
} }
@ -263,7 +263,7 @@ QGCView {
Component { Component {
id: mobileFilePicker id: mobileFilePicker
QGCMobileFileDialog { QGCMobileFileOpenDialog {
fileExtension: QGroundControl.parameterFileExtension fileExtension: QGroundControl.parameterFileExtension
onFilenameReturned: controller.loadFromFile(filename) onFilenameReturned: controller.loadFromFile(filename)
} }
@ -272,8 +272,7 @@ QGCView {
Component { Component {
id: mobileFileSaver id: mobileFileSaver
QGCMobileFileDialog { QGCMobileFileSaveDialog {
openDialog: false
fileExtension: QGroundControl.parameterFileExtension fileExtension: QGroundControl.parameterFileExtension
onFilenameReturned: controller.saveToFile(filename) onFilenameReturned: controller.saveToFile(filename)
} }

121
src/QmlControls/QGCMobileFileDialog.qml

@ -1,121 +0,0 @@
/****************************************************************************
*
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
import QtQuick 2.5
import QtQuick.Controls 1.3
import QtQuick.Dialogs 1.2
import QGroundControl 1.0
import QGroundControl.ScreenTools 1.0
import QGroundControl.Controls 1.0
import QGroundControl.Controllers 1.0
import QGroundControl.Palette 1.0
/// Simple file picker for mobile
QGCViewDialog {
property bool openDialog: true ///< true: Show file open dialog, false: show file save dialog
property string fileExtension ///< File extension for file listing
signal filenameReturned(string filename)
readonly property real _margins: ScreenTools.defaultFontPixelHeight / 2
function accept() {
if (!openDialog) {
console.log("filename", dialogLoader.item.filename)
if (!dialogLoader.item.replaceMessageShown) {
if (controller.fileExists(dialogLoader.item.filename, fileExtension)) {
dialogLoader.item.replaceMessageShown = true
return
}
}
filenameReturned(controller.fullPath(dialogLoader.item.filename, fileExtension))
}
hideDialog()
}
QGCMobileFileDialogController { id: controller }
QGCPalette { id: qgcPal; colorGroupEnabled: true }
Loader {
id: dialogLoader
anchors.fill: parent
sourceComponent: openDialog ? openDialogComponent : saveDialogComponent
}
Component {
id: saveDialogComponent
Column {
anchors.left: parent.left
anchors.right: parent.right
spacing: ScreenTools.defaultFontPixelHeight
property alias filename: filenameTextField.text
property alias replaceMessageShown: replaceMessage.visible
QGCLabel {
text: qsTr("File name:")
}
QGCTextField {
id: filenameTextField
onTextChanged: replaceMessage.visible = false
}
QGCLabel {
anchors.left: parent.left
anchors.right: parent.right
wrapMode: Text.WordWrap
text: qsTr("File names must end with .%1 file extension. If missing it will be added.").arg(fileExtension)
}
QGCLabel {
id: replaceMessage
anchors.left: parent.left
anchors.right: parent.right
wrapMode: Text.WordWrap
text: qsTr("The file %1 exists. Click Save again to replace it.").arg(filename)
visible: false
color: qgcPal.warningText
}
}
}
Component {
id: openDialogComponent
Item {
anchors.margins: _margins
anchors.fill: parent
QGCListView {
anchors.fill: parent
spacing: _margins / 2
orientation: ListView.Vertical
model: controller.getFiles(fileExtension)
delegate: QGCButton {
text: modelData
onClicked: {
hideDialog()
filenameReturned(controller.fullPath(modelData, fileExtension))
}
}
}
QGCLabel {
text: qsTr("No files")
visible: controller.getFiles(fileExtension).length == 0
}
}
}
}

3
src/QmlControls/QGroundControl.Controls.qmldir

@ -28,7 +28,8 @@ QGCComboBox 1.0 QGCComboBox.qml
QGCFlickable 1.0 QGCFlickable.qml QGCFlickable 1.0 QGCFlickable.qml
QGCLabel 1.0 QGCLabel.qml QGCLabel 1.0 QGCLabel.qml
QGCListView 1.0 QGCListView.qml QGCListView 1.0 QGCListView.qml
QGCMobileFileDialog 1.0 QGCMobileFileDialog.qml QGCMobileFileOpenDialog 1.0 QGCMobileFileOpenDialog.qml
QGCMobileFileSaveDialog 1.0 QGCMobileFileSaveDialog.qml
QGCMovableItem 1.0 QGCMovableItem.qml QGCMovableItem 1.0 QGCMovableItem.qml
QGCPipable 1.0 QGCPipable.qml QGCPipable 1.0 QGCPipable.qml
QGCRadioButton 1.0 QGCRadioButton.qml QGCRadioButton 1.0 QGCRadioButton.qml

Loading…
Cancel
Save