You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
160 lines
5.1 KiB
160 lines
5.1 KiB
8 years ago
|
import QtQuick 2.3
|
||
|
import QtQuick.Controls 1.2
|
||
|
import QtQuick.Dialogs 1.2
|
||
|
|
||
|
import QGroundControl 1.0
|
||
|
import QGroundControl.ScreenTools 1.0
|
||
|
import QGroundControl.Palette 1.0
|
||
|
import QGroundControl.Controllers 1.0
|
||
|
|
||
|
/// This control is meant to be a direct replacement for the standard Qml FileDialog control.
|
||
|
/// It differs for mobile builds which uses a completely custom file picker.
|
||
|
Item {
|
||
|
id: _root
|
||
|
visible: false
|
||
|
|
||
|
property var qgcView
|
||
|
property string folder
|
||
|
property var nameFilters
|
||
|
property string fileExtension
|
||
|
property string title
|
||
|
property bool selectExisting
|
||
|
property bool selectFolder
|
||
|
|
||
|
property bool _openForLoad
|
||
|
property real _margins: ScreenTools.defaultFontPixelHeight / 2
|
||
|
|
||
|
function openForLoad() {
|
||
|
_openForLoad = true
|
||
|
if (ScreenTools.isMobile && folder.length !== 0) {
|
||
|
qgcView.showDialog(mobileFileOpenDialog, title, qgcView.showDialogDefaultWidth, StandardButton.Cancel)
|
||
|
} else {
|
||
|
fullFileDialog.open()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function openForSave() {
|
||
|
_openForLoad = false
|
||
|
if (ScreenTools.isMobile && folder.length !== 0) {
|
||
|
qgcView.showDialog(mobileFileSaveDialog, title, qgcView.showDialogDefaultWidth, StandardButton.Cancel | StandardButton.Ok)
|
||
|
} else {
|
||
|
fullFileDialog.open()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function close() {
|
||
|
fullFileDialog.close()
|
||
|
}
|
||
|
|
||
|
signal acceptedForLoad(string file)
|
||
|
signal acceptedForSave(string file)
|
||
|
signal rejected
|
||
|
|
||
|
QFileDialogController { id: controller }
|
||
|
QGCPalette { id: qgcPal; colorGroupEnabled: true }
|
||
|
|
||
|
FileDialog {
|
||
|
id: fullFileDialog
|
||
|
folder: "file://" + _root.folder
|
||
|
nameFilters: _root.nameFilters
|
||
|
title: _root.title
|
||
|
selectExisting: _root.selectExisting
|
||
|
selectMultiple: false
|
||
|
selectFolder: _root.selectFolder
|
||
|
|
||
|
onAccepted: {
|
||
|
if (_openForLoad) {
|
||
|
_root.acceptedForLoad(controller.urlToLocalFile(fileUrl))
|
||
|
} else {
|
||
|
_root.acceptedForSave(controller.urlToLocalFile(fileUrl))
|
||
|
}
|
||
|
}
|
||
|
onRejected: _root.rejected()
|
||
|
}
|
||
|
|
||
|
Component {
|
||
|
id: mobileFileOpenDialog
|
||
|
|
||
|
QGCViewDialog {
|
||
|
Item {
|
||
|
anchors.margins: _margins
|
||
|
anchors.fill: parent
|
||
|
|
||
|
QGCListView {
|
||
|
id: listView
|
||
|
anchors.fill: parent
|
||
|
spacing: _margins / 2
|
||
|
orientation: ListView.Vertical
|
||
|
model: controller.getFiles(folder, fileExtension)
|
||
|
|
||
|
delegate: QGCButton {
|
||
|
text: modelData
|
||
|
|
||
|
onClicked: {
|
||
|
hideDialog()
|
||
|
_root.acceptedForLoad(controller.fullyQualifiedFilename(folder, modelData, fileExtension))
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
QGCLabel {
|
||
|
text: qsTr("No files")
|
||
|
visible: listView.model.length == 0
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Component {
|
||
|
id: mobileFileSaveDialog
|
||
|
|
||
|
QGCViewDialog {
|
||
|
function accept() {
|
||
|
if (filenameTextField.text == "") {
|
||
|
return
|
||
|
}
|
||
|
if (!replaceMessage.visible) {
|
||
|
if (controller.fileExists(controller.fullyQualifiedFilename(folder, filenameTextField.text, fileExtension))) {
|
||
|
replaceMessage.visible = true
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
_root.acceptedForSave(controller.fullyQualifiedFilename(folder, filenameTextField.text, fileExtension))
|
||
|
hideDialog()
|
||
|
}
|
||
|
|
||
|
Column {
|
||
|
anchors.left: parent.left
|
||
|
anchors.right: parent.right
|
||
|
spacing: ScreenTools.defaultFontPixelHeight
|
||
|
|
||
|
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(filenameTextField.text)
|
||
|
visible: false
|
||
|
color: qgcPal.warningText
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|