16 changed files with 402 additions and 156 deletions
@ -0,0 +1,73 @@
@@ -0,0 +1,73 @@
|
||||
/*=====================================================================
|
||||
|
||||
QGroundControl Open Source Ground Control Station |
||||
|
||||
(c) 2009, 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
|
||||
|
||||
This file is part of the QGROUNDCONTROL project |
||||
|
||||
QGROUNDCONTROL is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 3 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
QGROUNDCONTROL is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
======================================================================*/ |
||||
|
||||
#include "QGCMobileFileDialogController.h" |
||||
|
||||
#include <QStandardPaths> |
||||
#include <QDebug> |
||||
#include <QDir> |
||||
|
||||
QStringList QGCMobileFileDialogController::getFiles(const QString& fileExtension) |
||||
{ |
||||
QStringList files; |
||||
|
||||
QStringList docDirs = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation); |
||||
if (docDirs.count() <= 0) { |
||||
qWarning() << "No Documents location"; |
||||
return QStringList(); |
||||
} |
||||
QDir fileDir = docDirs.at(0); |
||||
|
||||
QFileInfoList fileInfoList = fileDir.entryInfoList(QStringList(QString("*.%1").arg(fileExtension)), QDir::Files, QDir::Name); |
||||
|
||||
foreach (const QFileInfo& fileInfo, fileInfoList) { |
||||
files << fileInfo.baseName() + QStringLiteral(".") + fileExtension; |
||||
} |
||||
|
||||
return files; |
||||
} |
||||
|
||||
QString QGCMobileFileDialogController::fullPath(const QString& filename, const QString& fileExtension) |
||||
{ |
||||
QStringList docDirs = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation); |
||||
if (docDirs.count() <= 0) { |
||||
qWarning() << "No Documents location"; |
||||
return filename; |
||||
} |
||||
|
||||
QString fixedFilename(filename); |
||||
QString correctExtension = QString(".%1").arg(fileExtension); |
||||
if (!filename.endsWith(correctExtension)) { |
||||
fixedFilename += correctExtension; |
||||
} |
||||
|
||||
QString fullPath = docDirs.at(0) + QDir::separator() + fixedFilename; |
||||
qDebug() << fullPath; |
||||
return fullPath; |
||||
} |
||||
|
||||
bool QGCMobileFileDialogController::fileExists(const QString& filename, const QString& fileExtension) |
||||
{ |
||||
QFile file(fullPath(filename, fileExtension)); |
||||
return file.exists(); |
||||
} |
@ -0,0 +1,49 @@
@@ -0,0 +1,49 @@
|
||||
/*=====================================================================
|
||||
|
||||
QGroundControl Open Source Ground Control Station |
||||
|
||||
(c) 2009, 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
|
||||
|
||||
This file is part of the QGROUNDCONTROL project |
||||
|
||||
QGROUNDCONTROL is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 3 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
QGROUNDCONTROL is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
======================================================================*/ |
||||
|
||||
#ifndef QGCMobileFileDialogController_H |
||||
#define QGCMobileFileDialogController_H |
||||
|
||||
#include <QObject> |
||||
|
||||
class QGCMobileFileDialogController : public QObject |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
public: |
||||
/// Return all file in Documents location which match the specified extension
|
||||
Q_INVOKABLE QStringList getFiles(const QString& fileExtension); |
||||
|
||||
/// Return the full path for specified file in the Documents location
|
||||
/// @param filename File name, not fully qualified, may not have extension
|
||||
/// @param fileExtension Expected file extension, added if needed
|
||||
Q_INVOKABLE QString fullPath(const QString& filename, const QString& fileExtension); |
||||
|
||||
/// Check for file existance
|
||||
/// @param filename File name, not fully qualified, may not have extension
|
||||
/// @param fileExtension Expected file extension, added if needed
|
||||
/// @return true: File exists at Documents location
|
||||
Q_INVOKABLE bool fileExists(const QString& filename, const QString& fileExtension); |
||||
}; |
||||
|
||||
#endif |
@ -0,0 +1,133 @@
@@ -0,0 +1,133 @@
|
||||
/*===================================================================== |
||||
|
||||
QGroundControl Open Source Ground Control Station |
||||
|
||||
(c) 2009, 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org> |
||||
|
||||
This file is part of the QGROUNDCONTROL project |
||||
|
||||
QGROUNDCONTROL is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 3 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
QGROUNDCONTROL is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>. |
||||
|
||||
======================================================================*/ |
||||
|
||||
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) { |
||||
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: "File name:" |
||||
} |
||||
|
||||
QGCTextField { |
||||
id: filenameTextField |
||||
onTextChanged: replaceMessage.visible = false |
||||
} |
||||
|
||||
QGCLabel { |
||||
anchors.left: parent.left |
||||
anchors.right: parent.right |
||||
wrapMode: Text.WordWrap |
||||
text: "File names must end with ." + fileExtension + " file extension. If missing it will be added." |
||||
} |
||||
|
||||
QGCLabel { |
||||
id: replaceMessage |
||||
anchors.left: parent.left |
||||
anchors.right: parent.right |
||||
wrapMode: Text.WordWrap |
||||
text: "The file " + filename + " exists. Click Save again to replace it." |
||||
visible: false |
||||
color: qgcPal.warningText |
||||
} |
||||
} |
||||
} |
||||
|
||||
Component { |
||||
id: openDialogComponent |
||||
|
||||
Item { |
||||
anchors.margins: _margins |
||||
anchors.fill: parent |
||||
|
||||
ListView { |
||||
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: "No files" |
||||
visible: controller.getFiles(fileExtension).length == 0 |
||||
} |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue