Commit da1296ef authored by DonLakeFlyer's avatar DonLakeFlyer

New file save settings and desktop/mobile file dialog capability

parent 5e3af5c1
...@@ -482,7 +482,6 @@ HEADERS += \ ...@@ -482,7 +482,6 @@ HEADERS += \
src/QGCGeo.h \ src/QGCGeo.h \
src/QGCLoggingCategory.h \ src/QGCLoggingCategory.h \
src/QGCMapPalette.h \ src/QGCMapPalette.h \
src/QGCMobileFileDialogController.h \
src/QGCPalette.h \ src/QGCPalette.h \
src/QGCQGeoCoordinate.h \ src/QGCQGeoCoordinate.h \
src/QGCQmlWidgetHolder.h \ src/QGCQmlWidgetHolder.h \
...@@ -493,6 +492,7 @@ HEADERS += \ ...@@ -493,6 +492,7 @@ HEADERS += \
src/QmlControls/CoordinateVector.h \ src/QmlControls/CoordinateVector.h \
src/QmlControls/MavlinkQmlSingleton.h \ src/QmlControls/MavlinkQmlSingleton.h \
src/QmlControls/ParameterEditorController.h \ src/QmlControls/ParameterEditorController.h \
src/QmlControls/QFileDialogController.h \
src/QmlControls/QGCImageProvider.h \ src/QmlControls/QGCImageProvider.h \
src/QmlControls/QGroundControlQmlGlobal.h \ src/QmlControls/QGroundControlQmlGlobal.h \
src/QmlControls/QmlObjectListModel.h \ src/QmlControls/QmlObjectListModel.h \
...@@ -565,7 +565,7 @@ HEADERS += \ ...@@ -565,7 +565,7 @@ HEADERS += \
src/GPS/satellite_info.h \ src/GPS/satellite_info.h \
src/GPS/vehicle_gps_position.h \ src/GPS/vehicle_gps_position.h \
src/Joystick/JoystickSDL.h \ src/Joystick/JoystickSDL.h \
src/QGCFileDialog.h \ src/QGCQFileDialog.h \
src/QGCMessageBox.h \ src/QGCMessageBox.h \
src/RunGuard.h \ src/RunGuard.h \
src/ViewWidgets/CustomCommandWidget.h \ src/ViewWidgets/CustomCommandWidget.h \
...@@ -659,7 +659,6 @@ SOURCES += \ ...@@ -659,7 +659,6 @@ SOURCES += \
src/QGCGeo.cc \ src/QGCGeo.cc \
src/QGCLoggingCategory.cc \ src/QGCLoggingCategory.cc \
src/QGCMapPalette.cc \ src/QGCMapPalette.cc \
src/QGCMobileFileDialogController.cc \
src/QGCPalette.cc \ src/QGCPalette.cc \
src/QGCQGeoCoordinate.cc \ src/QGCQGeoCoordinate.cc \
src/QGCQmlWidgetHolder.cpp \ src/QGCQmlWidgetHolder.cpp \
...@@ -669,6 +668,7 @@ SOURCES += \ ...@@ -669,6 +668,7 @@ SOURCES += \
src/QmlControls/AppMessages.cc \ src/QmlControls/AppMessages.cc \
src/QmlControls/CoordinateVector.cc \ src/QmlControls/CoordinateVector.cc \
src/QmlControls/ParameterEditorController.cc \ src/QmlControls/ParameterEditorController.cc \
src/QmlControls/QFileDialogController.cc \
src/QmlControls/QGCImageProvider.cc \ src/QmlControls/QGCImageProvider.cc \
src/QmlControls/QGroundControlQmlGlobal.cc \ src/QmlControls/QGroundControlQmlGlobal.cc \
src/QmlControls/QmlObjectListModel.cc \ src/QmlControls/QmlObjectListModel.cc \
...@@ -724,7 +724,7 @@ SOURCES += \ ...@@ -724,7 +724,7 @@ SOURCES += \
src/GPS/GPSProvider.cc \ src/GPS/GPSProvider.cc \
src/GPS/RTCM/RTCMMavlink.cc \ src/GPS/RTCM/RTCMMavlink.cc \
src/Joystick/JoystickSDL.cc \ src/Joystick/JoystickSDL.cc \
src/QGCFileDialog.cc \ src/QGCQFileDialog.cc \
src/RunGuard.cc \ src/RunGuard.cc \
src/ViewWidgets/CustomCommandWidget.cc \ src/ViewWidgets/CustomCommandWidget.cc \
src/ViewWidgets/CustomCommandWidgetController.cc \ src/ViewWidgets/CustomCommandWidgetController.cc \
......
...@@ -77,6 +77,7 @@ ...@@ -77,6 +77,7 @@
<file alias="QGroundControl/Controls/QGCCheckBox.qml">src/QmlControls/QGCCheckBox.qml</file> <file alias="QGroundControl/Controls/QGCCheckBox.qml">src/QmlControls/QGCCheckBox.qml</file>
<file alias="QGroundControl/Controls/QGCColoredImage.qml">src/QmlControls/QGCColoredImage.qml</file> <file alias="QGroundControl/Controls/QGCColoredImage.qml">src/QmlControls/QGCColoredImage.qml</file>
<file alias="QGroundControl/Controls/QGCComboBox.qml">src/QmlControls/QGCComboBox.qml</file> <file alias="QGroundControl/Controls/QGCComboBox.qml">src/QmlControls/QGCComboBox.qml</file>
<file alias="QGroundControl/Controls/QGCFileDialog.qml">src/QmlControls/QGCFileDialog.qml</file>
<file alias="QGroundControl/Controls/QGCFlickable.qml">src/QmlControls/QGCFlickable.qml</file> <file alias="QGroundControl/Controls/QGCFlickable.qml">src/QmlControls/QGCFlickable.qml</file>
<file alias="QGroundControl/Controls/QGCFlickableHorizontalIndicator.qml">src/QmlControls/QGCFlickableHorizontalIndicator.qml</file> <file alias="QGroundControl/Controls/QGCFlickableHorizontalIndicator.qml">src/QmlControls/QGCFlickableHorizontalIndicator.qml</file>
<file alias="QGroundControl/Controls/QGCFlickableVerticalIndicator.qml">src/QmlControls/QGCFlickableVerticalIndicator.qml</file> <file alias="QGroundControl/Controls/QGCFlickableVerticalIndicator.qml">src/QmlControls/QGCFlickableVerticalIndicator.qml</file>
...@@ -84,8 +85,6 @@ ...@@ -84,8 +85,6 @@
<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/QGCMapLabel.qml">src/QmlControls/QGCMapLabel.qml</file> <file alias="QGroundControl/Controls/QGCMapLabel.qml">src/QmlControls/QGCMapLabel.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/QGCMouseArea.qml">src/QmlControls/QGCMouseArea.qml</file> <file alias="QGroundControl/Controls/QGCMouseArea.qml">src/QmlControls/QGCMouseArea.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>
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include "GeoTagController.h" #include "GeoTagController.h"
#include "ExifParser.h" #include "ExifParser.h"
#include "QGCFileDialog.h" #include "QGCQFileDialog.h"
#include "QGCLoggingCategory.h" #include "QGCLoggingCategory.h"
#include "MainWindow.h" #include "MainWindow.h"
#include <math.h> #include <math.h>
...@@ -35,7 +35,7 @@ GeoTagController::~GeoTagController() ...@@ -35,7 +35,7 @@ GeoTagController::~GeoTagController()
void GeoTagController::pickLogFile(void) void GeoTagController::pickLogFile(void)
{ {
QString filename = QGCFileDialog::getOpenFileName(MainWindow::instance(), "Select log file load", QString(), "PX4 log file (*.px4log);;All Files (*.*)"); QString filename = QGCQFileDialog::getOpenFileName(MainWindow::instance(), "Select log file load", QString(), "PX4 log file (*.px4log);;All Files (*.*)");
if (!filename.isEmpty()) { if (!filename.isEmpty()) {
_worker.setLogFile(filename); _worker.setLogFile(filename);
emit logFileChanged(filename); emit logFileChanged(filename);
...@@ -44,7 +44,7 @@ void GeoTagController::pickLogFile(void) ...@@ -44,7 +44,7 @@ void GeoTagController::pickLogFile(void)
void GeoTagController::pickImageDirectory(void) void GeoTagController::pickImageDirectory(void)
{ {
QString dir = QGCFileDialog::getExistingDirectory(MainWindow::instance(), "Select image directory"); QString dir = QGCQFileDialog::getExistingDirectory(MainWindow::instance(), "Select image directory");
if (!dir.isEmpty()) { if (!dir.isEmpty()) {
_worker.setImageDirectory(dir); _worker.setImageDirectory(dir);
emit imageDirectoryChanged(dir); emit imageDirectoryChanged(dir);
...@@ -53,7 +53,7 @@ void GeoTagController::pickImageDirectory(void) ...@@ -53,7 +53,7 @@ void GeoTagController::pickImageDirectory(void)
void GeoTagController::pickSaveDirectory(void) void GeoTagController::pickSaveDirectory(void)
{ {
QString dir = QGCFileDialog::getExistingDirectory(MainWindow::instance(), "Select save directory"); QString dir = QGCQFileDialog::getExistingDirectory(MainWindow::instance(), "Select save directory");
if (!dir.isEmpty()) { if (!dir.isEmpty()) {
_worker.setSaveDirectory(dir); _worker.setSaveDirectory(dir);
emit saveDirectoryChanged(dir); emit saveDirectoryChanged(dir);
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
#include "MultiVehicleManager.h" #include "MultiVehicleManager.h"
#include "QGCMAVLink.h" #include "QGCMAVLink.h"
#if !defined(__mobile__) #if !defined(__mobile__)
#include "QGCFileDialog.h" #include "QGCQFileDialog.h"
#include "MainWindow.h" #include "MainWindow.h"
#endif #endif
#include "UAS.h" #include "UAS.h"
...@@ -514,11 +514,11 @@ LogDownloadController::download(QString path) ...@@ -514,11 +514,11 @@ LogDownloadController::download(QString path)
} }
#else #else
if(dir.isEmpty()) { if(dir.isEmpty()) {
dir = QGCFileDialog::getExistingDirectory( dir = QGCQFileDialog::getExistingDirectory(
MainWindow::instance(), MainWindow::instance(),
"Log Download Directory", "Log Download Directory",
QDir::homePath(), QDir::homePath(),
QGCFileDialog::ShowDirsOnly | QGCFileDialog::DontResolveSymlinks); QGCQFileDialog::ShowDirsOnly | QGCQFileDialog::DontResolveSymlinks);
} }
#endif #endif
downloadToDirectory(dir); downloadToDirectory(dir);
......
...@@ -30,6 +30,9 @@ public: ...@@ -30,6 +30,9 @@ public:
Q_PROPERTY(bool visible MEMBER _visible CONSTANT) Q_PROPERTY(bool visible MEMBER _visible CONSTANT)
// Must be called before any references to fact
void setVisible(bool visible) { _visible = visible; }
private slots: private slots:
void _rawValueChanged(QVariant value); void _rawValueChanged(QVariant value);
......
...@@ -34,7 +34,6 @@ ColumnLayout { ...@@ -34,7 +34,6 @@ ColumnLayout {
text: qsTr("Mission") text: qsTr("Mission")
Layout.fillWidth: true Layout.fillWidth: true
visible: showMission visible: showMission
enabled: !followVehicleCheckBox.checked
onClicked: { onClicked: {
dropPanel.hide() dropPanel.hide()
...@@ -46,7 +45,6 @@ ColumnLayout { ...@@ -46,7 +45,6 @@ ColumnLayout {
text: qsTr("All items") text: qsTr("All items")
Layout.fillWidth: true Layout.fillWidth: true
visible: showAllItems visible: showAllItems
enabled: !followVehicleCheckBox.checked
onClicked: { onClicked: {
dropPanel.hide() dropPanel.hide()
...@@ -57,7 +55,6 @@ ColumnLayout { ...@@ -57,7 +55,6 @@ ColumnLayout {
QGCButton { QGCButton {
text: qsTr("Home") text: qsTr("Home")
Layout.fillWidth: true Layout.fillWidth: true
enabled: !followVehicleCheckBox.checked
onClicked: { onClicked: {
dropPanel.hide() dropPanel.hide()
......
...@@ -19,10 +19,11 @@ ...@@ -19,10 +19,11 @@
#include "ParameterManager.h" #include "ParameterManager.h"
#include "JsonHelper.h" #include "JsonHelper.h"
#include "QGCQGeoCoordinate.h" #include "QGCQGeoCoordinate.h"
#include "AppSettings.h"
#ifndef __mobile__ #ifndef __mobile__
#include "MainWindow.h" #include "MainWindow.h"
#include "QGCFileDialog.h" #include "QGCQFileDialog.h"
#endif #endif
#include <QJsonDocument> #include <QJsonDocument>
...@@ -238,18 +239,6 @@ void GeoFenceController::loadFromFile(const QString& filename) ...@@ -238,18 +239,6 @@ void GeoFenceController::loadFromFile(const QString& filename)
setDirty(true); setDirty(true);
} }
void GeoFenceController::loadFromFilePicker(void)
{
#ifndef __mobile__
QString filename = QGCFileDialog::getOpenFileName(MainWindow::instance(), "Select GeoFence File to load", QString(), "Fence file (*.fence);;All Files (*.*)");
if (filename.isEmpty()) {
return;
}
loadFromFile(filename);
#endif
}
void GeoFenceController::saveToFile(const QString& filename) void GeoFenceController::saveToFile(const QString& filename)
{ {
if (filename.isEmpty()) { if (filename.isEmpty()) {
...@@ -258,7 +247,7 @@ void GeoFenceController::saveToFile(const QString& filename) ...@@ -258,7 +247,7 @@ void GeoFenceController::saveToFile(const QString& filename)
QString fenceFilename = filename; QString fenceFilename = filename;
if (!QFileInfo(filename).fileName().contains(".")) { if (!QFileInfo(filename).fileName().contains(".")) {
fenceFilename += QString(".%1").arg(QGCApplication::fenceFileExtension); fenceFilename += QString(".%1").arg(AppSettings::fenceFileExtension);
} }
QFile file(fenceFilename); QFile file(fenceFilename);
...@@ -301,18 +290,6 @@ void GeoFenceController::saveToFile(const QString& filename) ...@@ -301,18 +290,6 @@ void GeoFenceController::saveToFile(const QString& filename)
setDirty(false); setDirty(false);
} }
void GeoFenceController::saveToFilePicker(void)
{
#ifndef __mobile__
QString filename = QGCFileDialog::getSaveFileName(MainWindow::instance(), "Select file to save GeoFence to", QString(), "Fence file (*.fence);;All Files (*.*)");
if (filename.isEmpty()) {
return;
}
saveToFile(filename);
#endif
}
void GeoFenceController::removeAll(void) void GeoFenceController::removeAll(void)
{ {
setBreachReturnPoint(QGeoCoordinate()); setBreachReturnPoint(QGeoCoordinate());
...@@ -433,7 +410,7 @@ void GeoFenceController::_loadComplete(const QGeoCoordinate& breachReturn, const ...@@ -433,7 +410,7 @@ void GeoFenceController::_loadComplete(const QGeoCoordinate& breachReturn, const
QString GeoFenceController::fileExtension(void) const QString GeoFenceController::fileExtension(void) const
{ {
return QGCApplication::fenceFileExtension; return AppSettings::fenceFileExtension;
} }
bool GeoFenceController::containsItems(void) const bool GeoFenceController::containsItems(void) const
......
...@@ -49,9 +49,7 @@ public: ...@@ -49,9 +49,7 @@ public:
void startStaticActiveVehicle (Vehicle* vehicle) final; void startStaticActiveVehicle (Vehicle* vehicle) final;
void loadFromVehicle (void) final; void loadFromVehicle (void) final;
void sendToVehicle (void) final; void sendToVehicle (void) final;
void loadFromFilePicker (void) final;
void loadFromFile (const QString& filename) final; void loadFromFile (const QString& filename) final;
void saveToFilePicker (void) final;
void saveToFile (const QString& filename) final; void saveToFile (const QString& filename) final;
void removeAll (void) final; void removeAll (void) final;
void removeAllFromVehicle (void) final; void removeAllFromVehicle (void) final;
......
...@@ -21,11 +21,12 @@ ...@@ -21,11 +21,12 @@
#include "ParameterManager.h" #include "ParameterManager.h"
#include "QGroundControlQmlGlobal.h" #include "QGroundControlQmlGlobal.h"
#include "SettingsManager.h" #include "SettingsManager.h"
#include "AppSettings.h"
#include "MissionSettingsItem.h" #include "MissionSettingsItem.h"
#ifndef __mobile__ #ifndef __mobile__
#include "MainWindow.h" #include "MainWindow.h"
#include "QGCFileDialog.h" #include "QGCQFileDialog.h"
#endif #endif
QGC_LOGGING_CATEGORY(MissionControllerLog, "MissionControllerLog") QGC_LOGGING_CATEGORY(MissionControllerLog, "MissionControllerLog")
...@@ -686,18 +687,6 @@ bool MissionController::loadItemsFromFile(Vehicle* vehicle, const QString& filen ...@@ -686,18 +687,6 @@ bool MissionController::loadItemsFromFile(Vehicle* vehicle, const QString& filen
return true; return true;
} }
void MissionController::loadFromFilePicker(void)
{
#ifndef __mobile__
QString filename = QGCFileDialog::getOpenFileName(MainWindow::instance(), "Select Mission File to load", QString(), "Mission file (*.mission);;All Files (*.*)");
if (filename.isEmpty()) {
return;
}
loadFromFile(filename);
#endif
}
void MissionController::saveToFile(const QString& filename) void MissionController::saveToFile(const QString& filename)
{ {
qDebug() << filename; qDebug() << filename;
...@@ -708,7 +697,7 @@ void MissionController::saveToFile(const QString& filename) ...@@ -708,7 +697,7 @@ void MissionController::saveToFile(const QString& filename)
QString missionFilename = filename; QString missionFilename = filename;
if (!QFileInfo(filename).fileName().contains(".")) { if (!QFileInfo(filename).fileName().contains(".")) {
missionFilename += QString(".%1").arg(QGCApplication::missionFileExtension); missionFilename += QString(".%1").arg(AppSettings::missionFileExtension);
} }
QFile file(missionFilename); QFile file(missionFilename);
...@@ -769,18 +758,6 @@ void MissionController::saveToFile(const QString& filename) ...@@ -769,18 +758,6 @@ void MissionController::saveToFile(const QString& filename)
_visualItems->setDirty(false); _visualItems->setDirty(false);
} }
void MissionController::saveToFilePicker(void)
{
#ifndef __mobile__
QString filename = QGCFileDialog::getSaveFileName(MainWindow::instance(), "Select file to save mission to", QString(), "Mission file (*.mission);;All Files (*.*)");
if (filename.isEmpty()) {
return;
}
saveToFile(filename);
#endif
}
void MissionController::_calcPrevWaypointValues(double homeAlt, VisualMissionItem* currentItem, VisualMissionItem* prevItem, double* azimuth, double* distance, double* altDifference) void MissionController::_calcPrevWaypointValues(double homeAlt, VisualMissionItem* currentItem, VisualMissionItem* prevItem, double* azimuth, double* distance, double* altDifference)
{ {
QGeoCoordinate currentCoord = currentItem->coordinate(); QGeoCoordinate currentCoord = currentItem->coordinate();
...@@ -1541,7 +1518,7 @@ void MissionController::setDirty(bool dirty) ...@@ -1541,7 +1518,7 @@ void MissionController::setDirty(bool dirty)
QString MissionController::fileExtension(void) const QString MissionController::fileExtension(void) const
{ {
return QGCApplication::missionFileExtension; return AppSettings::missionFileExtension;
} }
void MissionController::_scanForAdditionalSettings(QmlObjectListModel* visualItems, Vehicle* vehicle) void MissionController::_scanForAdditionalSettings(QmlObjectListModel* visualItems, Vehicle* vehicle)
......
...@@ -93,9 +93,7 @@ public: ...@@ -93,9 +93,7 @@ public:
void startStaticActiveVehicle (Vehicle* vehicle) final; void startStaticActiveVehicle (Vehicle* vehicle) final;
void loadFromVehicle (void) final; void loadFromVehicle (void) final;
void sendToVehicle (void) final; void sendToVehicle (void) final;
void loadFromFilePicker (void) final;
void loadFromFile (const QString& filename) final; void loadFromFile (const QString& filename) final;
void saveToFilePicker (void) final;
void saveToFile (const QString& filename) final; void saveToFile (const QString& filename) final;
void removeAll (void) final; void removeAll (void) final;
void removeAllFromVehicle (void) final; void removeAllFromVehicle (void) final;
......
...@@ -44,9 +44,7 @@ public: ...@@ -44,9 +44,7 @@ public:
Q_INVOKABLE virtual void loadFromVehicle(void) = 0; Q_INVOKABLE virtual void loadFromVehicle(void) = 0;
Q_INVOKABLE virtual void sendToVehicle(void) = 0; Q_INVOKABLE virtual void sendToVehicle(void) = 0;
Q_INVOKABLE virtual void loadFromFilePicker(void) = 0;
Q_INVOKABLE virtual void loadFromFile(const QString& filename) = 0; Q_INVOKABLE virtual void loadFromFile(const QString& filename) = 0;
Q_INVOKABLE virtual void saveToFilePicker(void) = 0;
Q_INVOKABLE virtual void saveToFile(const QString& filename) = 0; Q_INVOKABLE virtual void saveToFile(const QString& filename) = 0;
Q_INVOKABLE virtual void removeAll(void) = 0; ///< Removes all from controller only, synce required to remove from vehicle Q_INVOKABLE virtual void removeAll(void) = 0; ///< Removes all from controller only, synce required to remove from vehicle
Q_INVOKABLE virtual void removeAllFromVehicle(void) = 0; ///< Removes all from vehicle and controller Q_INVOKABLE virtual void removeAllFromVehicle(void) = 0; ///< Removes all from vehicle and controller
......
...@@ -22,9 +22,10 @@ ...@@ -22,9 +22,10 @@
#include "SimpleMissionItem.h" #include "SimpleMissionItem.h"
#include "QGroundControlQmlGlobal.h" #include "QGroundControlQmlGlobal.h"
#include "SettingsManager.h" #include "SettingsManager.h"
#include "AppSettings.h"
#ifndef __mobile__ #ifndef __mobile__
#include "QGCFileDialog.h" #include "QGCQFileDialog.h"
#endif #endif
#include <QJsonDocument> #include <QJsonDocument>
...@@ -135,18 +136,6 @@ void RallyPointController::loadFromFile(const QString& filename) ...@@ -135,18 +136,6 @@ void RallyPointController::loadFromFile(const QString& filename)
_setFirstPointCurrent(); _setFirstPointCurrent();
} }
void RallyPointController::loadFromFilePicker(void)
{
#ifndef __mobile__
QString filename = QGCFileDialog::getOpenFileName(NULL, "Select Rally Point File to load", QString(), "Rally point file (*.rally);;All Files (*.*)");
if (filename.isEmpty()) {
return;
}
loadFromFile(filename);
#endif
}
void RallyPointController::saveToFile(const QString& filename) void RallyPointController::saveToFile(const QString& filename)
{ {
if (filename.isEmpty()) { if (filename.isEmpty()) {
...@@ -155,7 +144,7 @@ void RallyPointController::saveToFile(const QString& filename) ...@@ -155,7 +144,7 @@ void RallyPointController::saveToFile(const QString& filename)
QString rallyFilename = filename; QString rallyFilename = filename;
if (!QFileInfo(filename).fileName().contains(".")) { if (!QFileInfo(filename).fileName().contains(".")) {
rallyFilename += QString(".%1").arg(QGCApplication::rallyPointFileExtension); rallyFilename += QString(".%1").arg(AppSettings::rallyPointFileExtension);
} }
QFile file(rallyFilename); QFile file(rallyFilename);
...@@ -184,18 +173,6 @@ void RallyPointController::saveToFile(const QString& filename) ...@@ -184,18 +173,6 @@ void RallyPointController::saveToFile(const QString& filename)
setDirty(false); setDirty(false);
} }
void RallyPointController::saveToFilePicker(void)
{
#ifndef __mobile__
QString filename = QGCFileDialog::getSaveFileName(NULL, "Select file to save Rally Points to", QString(), "Rally point file (*.rally);;All Files (*.*)");
if (filename.isEmpty()) {
return;
}
saveToFile(filename);
#endif
}
void RallyPointController::removeAll(void) void RallyPointController::removeAll(void)
{ {
_points.clearAndDeleteContents(); _points.clearAndDeleteContents();
...@@ -259,7 +236,7 @@ void RallyPointController::_loadComplete(const QList<QGeoCoordinate> rgPoints) ...@@ -259,7 +236,7 @@ void RallyPointController::_loadComplete(const QList<QGeoCoordinate> rgPoints)
QString RallyPointController::fileExtension(void) const QString RallyPointController::fileExtension(void) const
{ {
return QGCApplication::rallyPointFileExtension; return AppSettings::rallyPointFileExtension;
} }
void RallyPointController::addPoint(QGeoCoordinate point) void RallyPointController::addPoint(QGeoCoordinate point)
......
...@@ -39,9 +39,7 @@ public: ...@@ -39,9 +39,7 @@ public:
void loadFromVehicle (void) final; void loadFromVehicle (void) final;
void sendToVehicle (void) final; void sendToVehicle (void) final;
void loadFromFilePicker (void) final;
void loadFromFile (const QString& filename) final; void loadFromFile (const QString& filename) final;
void saveToFilePicker (void) final;
void saveToFile (const QString& filename) final; void saveToFile (const QString& filename) final;
void removeAll (void) final; void removeAll (void) final;
void removeAllFromVehicle (void) final; void removeAllFromVehicle (void) final;
......
...@@ -26,7 +26,7 @@ import QGroundControl.Controllers 1.0 ...@@ -26,7 +26,7 @@ import QGroundControl.Controllers 1.0
/// Mission Editor /// Mission Editor
QGCView { QGCView {
id: qgcView id: _qgcView
viewPanel: panel viewPanel: panel
// zOrder comes from the Loader in MainWindow.qml // zOrder comes from the Loader in MainWindow.qml
...@@ -96,27 +96,29 @@ QGCView { ...@@ -96,27 +96,29 @@ QGCView {
MissionController { MissionController {
id: missionController id: missionController
property var nameFilters: [ qsTr("Mission Files (*.%1)").arg(missionController.fileExtension) , qsTr("All Files (*.*)") ]
Component.onCompleted: { Component.onCompleted: {
start(true /* editMode */) start(true /* editMode */)
setCurrentItem(0) setCurrentItem(0)
} }
function loadFromSelectedFile() { function loadFromSelectedFile() {
if (ScreenTools.isMobile) { fileDialog.title = qsTr("Select Mission File")
qgcView.showDialog(mobileFilePicker, qsTr("Select Mission File"), qgcView.showDialogDefaultWidth, StandardButton.Cancel) fileDialog.selectExisting = true
} else { fileDialog.nameFilters = missionController.nameFilters
missionController.loadFromFilePicker() fileDialog.openForLoad()
mapFitFunctions.fitMapViewportToMissionItems()
_currentMissionItem = _visualItems.get(0) // FIXME: Hmm
} //mapFitFunctions.fitMapViewportToMissionItems()
//_currentMissionItem = _visualItems.get(0)
} }
function saveToSelectedFile() { function saveToSelectedFile() {
if (ScreenTools.isMobile) { fileDialog.title = qsTr("Save Mission")
qgcView.showDialog(mobileFileSaver, qsTr("Save Mission File"), qgcView.showDialogDefaultWidth, StandardButton.Save | StandardButton.Cancel) fileDialog.selectExisting = false
} else { fileDialog.nameFilters = missionController.nameFilters
missionController.saveToFilePicker() fileDialog.openForSave()
}
} }
function fitViewportToItems() { function fitViewportToItems() {
...@@ -138,23 +140,23 @@ QGCView { ...@@ -138,23 +140,23 @@ QGCView {
GeoFenceController { GeoFenceController {
id: geoFenceController id: geoFenceController
property var nameFilters: [ qsTr("GeoFence Files (*.%1)").arg(geoFenceController.fileExtension) , qsTr("All Files (*.*)") ]
Component.onCompleted: start(true /* editMode */) Component.onCompleted: start(true /* editMode */)
function saveToSelectedFile() { function saveToSelectedFile() {
if (ScreenTools.isMobile) { fileDialog.title = qsTr("Save GeoFence")
qgcView.showDialog(mobileFileSaver, qsTr("Save Fence File"), qgcView.showDialogDefaultWidth, StandardButton.Save | StandardButton.Cancel) fileDialog.selectExisting = false
} else { fileDialog.nameFilters = geoFenceController.nameFilters
geoFenceController.saveToFilePicker() fileDialog.openForSave()
}
} }
function loadFromSelectedFile() { function loadFromSelectedFile() {
if (ScreenTools.isMobile) { fileDialog.title = qsTr("Select GeoFence File")
qgcView.showDialog(mobileFilePicker, qsTr("Select Fence File"), qgcView.showDialogDefaultWidth, StandardButton.Yes | StandardButton.Cancel) fileDialog.selectExisting = true
} else { fileDialog.nameFilters = geoFenceController.nameFilters
geoFenceController.loadFromFilePicker() fileDialog.openForLoad()
mapFitFunctions.fitMapViewportToFenceItems() ///mapFitFunctions.fitMapViewportToFenceItems()
}
} }
function fitViewportToItems() { function fitViewportToItems() {
...@@ -177,6 +179,8 @@ QGCView { ...@@ -177,6 +179,8 @@ QGCView {
RallyPointController { RallyPointController {
id: rallyPointController id: rallyPointController
property var nameFilters: [ qsTr("Rally Point Files (*.%1)").arg(rallyPointController.fileExtension) , qsTr("All Files (*.*)") ]
onCurrentRallyPointChanged: { onCurrentRallyPointChanged: {
if (_editingLayer == _layerRallyPoints && !currentRallyPoint) { if (_editingLayer == _layerRallyPoints && !currentRallyPoint) {
itemDragger.visible = false itemDragger.visible = false
...@@ -188,20 +192,18 @@ QGCView { ...@@ -188,20 +192,18 @@ QGCView {
Component.onCompleted: start(true /* editMode */) Component.onCompleted: start(true /* editMode */)
function saveToSelectedFile() { function saveToSelectedFile() {
if (ScreenTools.isMobile) { fileDialog.title = qsTr("Save Rally Points")
qgcView.showDialog(mobileFileSaver, qsTr("Save Rally Point File"), qgcView.showDialogDefaultWidth, StandardButton.Save | StandardButton.Cancel) fileDialog.selectExisting = false
} else { fileDialog.nameFilters = rallyPointController.nameFilters
rallyPointController.saveToFilePicker() fileDialog.openForSave()
}
} }
function loadFromSelectedFile() { function loadFromSelectedFile() {
if (ScreenTools.isMobile) { fileDialog.title = qsTr("Select Rally Point File")
qgcView.showDialog(mobileFilePicker, qsTr("Select Rally Point File"), qgcView.showDialogDefaultWidth, StandardButton.Yes | StandardButton.Cancel) fileDialog.selectExisting = true
} else { fileDialog.nameFilters = rallyPointController.nameFilters
rallyPointController.loadFromFilePicker() fileDialog.openForLoad()
mapFitFunctions.fitMapViewportToRallyItems() //mapFitFunctions.fitMapViewportToRallyItems()
}
} }
function fitViewportToItems() { function fitViewportToItems() {
...@@ -257,24 +259,22 @@ QGCView { ...@@ -257,24 +259,22 @@ QGCView {
property int _moveDialogMissionItemIndex property int _moveDialogMissionItemIndex
Component { QGCFileDialog {
id: mobileFilePicker id: fileDialog
qgcView: _qgcView
folder: QGroundControl.settingsManager.appSettings.missionSavePath
fileExtension: _syncDropDownController.fileExtension
QGCMobileFileOpenDialog { onAcceptedForSave: {
fileExtension: _syncDropDownController.fileExtension _syncDropDownController.saveToFile(file)
onFilenameReturned: { close()
_syncDropDownController.loadFromFile(filename)
_syncDropDownController.fitViewportToItems()
}
} }
}
Component {
id: mobileFileSaver
QGCMobileFileSaveDialog { onAcceptedForLoad: {
fileExtension: _syncDropDownController.fileExtension _syncDropDownController.loadFromFile(file)
onFilenameReturned: _syncDropDownController.saveToFile(filename) _syncDropDownController.fitViewportToItems()
_currentMissionItem = _visualItems.get(0)
close()
} }
} }
...@@ -325,7 +325,7 @@ QGCView { ...@@ -325,7 +325,7 @@ QGCView {
FlightMap { FlightMap {
id: editorMap id: editorMap
height: qgcView.height height: _qgcView.height
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
...@@ -334,7 +334,7 @@ QGCView { ...@@ -334,7 +334,7 @@ QGCView {
// This is the center rectangle of the map which is not obscured by tools // This is the center rectangle of the map which is not obscured by tools
property rect centerViewport: Qt.rect(_leftToolWidth, _toolbarHeight, editorMap.width - _leftToolWidth - _rightPanelWidth, editorMap.height - _statusHeight - _toolbarHeight) property rect centerViewport: Qt.rect(_leftToolWidth, _toolbarHeight, editorMap.width - _leftToolWidth - _rightPanelWidth, editorMap.height - _statusHeight - _toolbarHeight)
property real _toolbarHeight: qgcView.height - ScreenTools.availableHeight property real _toolbarHeight: _qgcView.height - ScreenTools.availableHeight
property real _leftToolWidth: toolStrip.x + toolStrip.width property real _leftToolWidth: toolStrip.x + toolStrip.width
property real _statusHeight: waypointValuesDisplay.visible ? editorMap.height - waypointValuesDisplay.y : 0 property real _statusHeight: waypointValuesDisplay.visible ? editorMap.height - waypointValuesDisplay.y : 0
...@@ -850,7 +850,7 @@ QGCView { ...@@ -850,7 +850,7 @@ QGCView {
onClicked: { onClicked: {
dropPanel.hide() dropPanel.hide()
if (_syncDropDownController.dirty) { if (_syncDropDownController.dirty) {
qgcView.showDialog(syncLoadFromVehicleOverwrite, columnHolder._overwriteText, qgcView.showDialogDefaultWidth, StandardButton.Yes | StandardButton.Cancel) _qgcView.showDialog(syncLoadFromVehicleOverwrite, columnHolder._overwriteText, _qgcView.showDialogDefaultWidth, StandardButton.Yes | StandardButton.Cancel)
} else { } else {
_syncDropDownController.loadFromVehicle() _syncDropDownController.loadFromVehicle()
} }
...@@ -874,7 +874,7 @@ QGCView { ...@@ -874,7 +874,7 @@ QGCView {
onClicked: { onClicked: {
dropPanel.hide() dropPanel.hide()
if (_syncDropDownController.dirty) { if (_syncDropDownController.dirty) {
qgcView.showDialog(syncLoadFromFileOverwrite, columnHolder._overwriteText, qgcView.showDialogDefaultWidth, StandardButton.Yes | StandardButton.Cancel) _qgcView.showDialog(syncLoadFromFileOverwrite, columnHolder._overwriteText, _qgcView.showDialogDefaultWidth, StandardButton.Yes | StandardButton.Cancel)
} else { } else {
_syncDropDownController.loadFromSelectedFile() _syncDropDownController.loadFromSelectedFile()
} }
...@@ -886,7 +886,7 @@ QGCView { ...@@ -886,7 +886,7 @@ QGCView {
Layout.fillWidth: true Layout.fillWidth: true
onClicked: { onClicked: {
dropPanel.hide() dropPanel.hide()
qgcView.showDialog(removeAllPromptDialog, qsTr("Remove all"), qgcView.showDialogDefaultWidth, StandardButton.Yes | StandardButton.No) _qgcView.showDialog(removeAllPromptDialog, qsTr("Remove all"), _qgcView.showDialogDefaultWidth, StandardButton.Yes | StandardButton.No)
} }
} }
} }
......
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
#include "CustomCommandWidgetController.h" #include "CustomCommandWidgetController.h"
#include "ESP8266ComponentController.h" #include "ESP8266ComponentController.h"
#include "ScreenToolsController.h" #include "ScreenToolsController.h"
#include "QGCMobileFileDialogController.h" #include "QFileDialogController.h"
#include "RCChannelMonitorController.h" #include "RCChannelMonitorController.h"
#include "AutoPilotPlugin.h" #include "AutoPilotPlugin.h"
#include "VehicleComponent.h" #include "VehicleComponent.h"
...@@ -86,7 +86,7 @@ ...@@ -86,7 +86,7 @@
#endif #endif
#ifndef __mobile__ #ifndef __mobile__
#include "QGCFileDialog.h" #include "QGCQFileDialog.h"
#include "QGCMessageBox.h" #include "QGCMessageBox.h"
#include "FirmwareUpgradeController.h" #include "FirmwareUpgradeController.h"
#include "MainWindow.h" #include "MainWindow.h"
...@@ -108,12 +108,6 @@ ...@@ -108,12 +108,6 @@
QGCApplication* QGCApplication::_app = NULL; QGCApplication* QGCApplication::_app = NULL;
const char* QGCApplication::parameterFileExtension = "params";
const char* QGCApplication::missionFileExtension = "mission";
const char* QGCApplication::fenceFileExtension = "fence";
const char* QGCApplication::rallyPointFileExtension = "rally";
const char* QGCApplication::telemetryFileExtension = "tlog";
const char* QGCApplication::_deleteAllSettingsKey = "DeleteAllSettingsNextBoot"; const char* QGCApplication::_deleteAllSettingsKey = "DeleteAllSettingsNextBoot";
const char* QGCApplication::_settingsVersionKey = "SettingsVersion"; const char* QGCApplication::_settingsVersionKey = "SettingsVersion";
...@@ -374,7 +368,7 @@ void QGCApplication::_initCommon(void) ...@@ -374,7 +368,7 @@ void QGCApplication::_initCommon(void)
qmlRegisterType<GeoFenceController> ("QGroundControl.Controllers", 1, 0, "GeoFenceController"); qmlRegisterType<GeoFenceController> ("QGroundControl.Controllers", 1, 0, "GeoFenceController");
qmlRegisterType<RallyPointController> ("QGroundControl.Controllers", 1, 0, "RallyPointController"); qmlRegisterType<RallyPointController> ("QGroundControl.Controllers", 1, 0, "RallyPointController");
qmlRegisterType<ValuesWidgetController> ("QGroundControl.Controllers", 1, 0, "ValuesWidgetController"); qmlRegisterType<ValuesWidgetController> ("QGroundControl.Controllers", 1, 0, "ValuesWidgetController");
qmlRegisterType<QGCMobileFileDialogController> ("QGroundControl.Controllers", 1, 0, "QGCMobileFileDialogController"); qmlRegisterType<QFileDialogController> ("QGroundControl.Controllers", 1, 0, "QFileDialogController");
qmlRegisterType<RCChannelMonitorController> ("QGroundControl.Controllers", 1, 0, "RCChannelMonitorController"); qmlRegisterType<RCChannelMonitorController> ("QGroundControl.Controllers", 1, 0, "RCChannelMonitorController");
qmlRegisterType<JoystickConfigController> ("QGroundControl.Controllers", 1, 0, "JoystickConfigController"); qmlRegisterType<JoystickConfigController> ("QGroundControl.Controllers", 1, 0, "JoystickConfigController");
qmlRegisterType<LogDownloadController> ("QGroundControl.Controllers", 1, 0, "LogDownloadController"); qmlRegisterType<LogDownloadController> ("QGroundControl.Controllers", 1, 0, "LogDownloadController");
...@@ -495,7 +489,7 @@ void QGCApplication::saveTelemetryLogOnMainThread(QString tempLogfile) ...@@ -495,7 +489,7 @@ void QGCApplication::saveTelemetryLogOnMainThread(QString tempLogfile)
// The vehicle is gone now and we are shutting down so we need to use a message box for errors to hold shutdown and show the error // The vehicle is gone now and we are shutting down so we need to use a message box for errors to hold shutdown and show the error
if (_checkTelemetrySavePath(true /* useMessageBox */)) { if (_checkTelemetrySavePath(true /* useMessageBox */)) {
QString saveDirPath = _toolbox->settingsManager()->appSettings()->telemetrySavePath()->rawValue().toString(); QString saveDirPath = _toolbox->settingsManager()->appSettings()->telemetrySavePath();
QDir saveDir(saveDirPath); QDir saveDir(saveDirPath);
QString nameFormat("%1%2.tlog"); QString nameFormat("%1%2.tlog");
...@@ -527,9 +521,9 @@ bool QGCApplication::_checkTelemetrySavePath(bool useMessageBox) ...@@ -527,9 +521,9 @@ bool QGCApplication::_checkTelemetrySavePath(bool useMessageBox)
{ {
QString errorTitle = tr("Telemetry save error"); QString errorTitle = tr("Telemetry save error");
QString saveDirPath = _toolbox->settingsManager()->appSettings()->telemetrySavePath()->rawValue().toString(); QString saveDirPath = _toolbox->settingsManager()->appSettings()->telemetrySavePath();
if (saveDirPath.isEmpty()) { if (saveDirPath.isEmpty()) {
QString error = tr("Unable to save telemetry log. Telemetry save directory is not set."); QString error = tr("Unable to save telemetry log. Application save directory is not set.");
if (useMessageBox) { if (useMessageBox) {
QGCMessageBox::warning(errorTitle, error); QGCMessageBox::warning(errorTitle, error);
} else { } else {
......
...@@ -63,12 +63,6 @@ public: ...@@ -63,12 +63,6 @@ public:
QGCApplication(int &argc, char* argv[], bool unitTesting); QGCApplication(int &argc, char* argv[], bool unitTesting);
~QGCApplication(); ~QGCApplication();
static const char* parameterFileExtension;
static const char* missionFileExtension;
static const char* fenceFileExtension;
static const char* rallyPointFileExtension;
static const char* telemetryFileExtension;
/// @brief Sets the persistent flag to delete all settings the next time QGroundControl is started. /// @brief Sets the persistent flag to delete all settings the next time QGroundControl is started.
void deleteAllSettingsNextBoot(void); void deleteAllSettingsNextBoot(void);
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
****************************************************************************/ ****************************************************************************/
#include "QGCFileDialog.h" #include "QGCQFileDialog.h"
#include "QGCApplication.h" #include "QGCApplication.h"
#include "MainWindow.h" #include "MainWindow.h"
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#include <QMessageBox> #include <QMessageBox>
#include <QPushButton> #include <QPushButton>
QString QGCFileDialog::getExistingDirectory( QString QGCQFileDialog::getExistingDirectory(
QWidget* parent, QWidget* parent,
const QString& caption, const QString& caption,
const QString& dir, const QString& dir,
...@@ -38,7 +38,7 @@ QString QGCFileDialog::getExistingDirectory( ...@@ -38,7 +38,7 @@ QString QGCFileDialog::getExistingDirectory(
} }
} }
QString QGCFileDialog::getOpenFileName( QString QGCQFileDialog::getOpenFileName(
QWidget* parent, QWidget* parent,
const QString& caption, const QString& caption,
const QString& dir, const QString& dir,
...@@ -57,7 +57,7 @@ QString QGCFileDialog::getOpenFileName( ...@@ -57,7 +57,7 @@ QString QGCFileDialog::getOpenFileName(
} }
} }
QStringList QGCFileDialog::getOpenFileNames( QStringList QGCQFileDialog::getOpenFileNames(
QWidget* parent, QWidget* parent,
const QString& caption, const QString& caption,
const QString& dir, const QString& dir,
...@@ -76,7 +76,7 @@ QStringList QGCFileDialog::getOpenFileNames( ...@@ -76,7 +76,7 @@ QStringList QGCFileDialog::getOpenFileNames(
} }
} }
QString QGCFileDialog::getSaveFileName( QString QGCQFileDialog::getSaveFileName(
QWidget* parent, QWidget* parent,
const QString& caption, const QString& caption,
const QString& dir, const QString& dir,
...@@ -162,7 +162,7 @@ QString QGCFileDialog::getSaveFileName( ...@@ -162,7 +162,7 @@ QString QGCFileDialog::getSaveFileName(
} }
/// @brief Make sure filename is using one of the valid extensions defined in the filter /// @brief Make sure filename is using one of the valid extensions defined in the filter
bool QGCFileDialog::_validateExtension(const QString& filter, const QString& extension) { bool QGCQFileDialog::_validateExtension(const QString& filter, const QString& extension) {
QRegularExpression re("(\\*\\.\\w+)"); QRegularExpression re("(\\*\\.\\w+)");
QRegularExpressionMatchIterator i = re.globalMatch(filter); QRegularExpressionMatchIterator i = re.globalMatch(filter);
while (i.hasNext()) { while (i.hasNext()) {
...@@ -178,7 +178,7 @@ bool QGCFileDialog::_validateExtension(const QString& filter, const QString& ext ...@@ -178,7 +178,7 @@ bool QGCFileDialog::_validateExtension(const QString& filter, const QString& ext
} }
/// @brief Returns first extension found in filter /// @brief Returns first extension found in filter
QString QGCFileDialog::_getFirstExtensionInFilter(const QString& filter) { QString QGCQFileDialog::_getFirstExtensionInFilter(const QString& filter) {
QRegularExpression re("(\\*\\.\\w+)"); QRegularExpression re("(\\*\\.\\w+)");
QRegularExpressionMatchIterator i = re.globalMatch(filter); QRegularExpressionMatchIterator i = re.globalMatch(filter);
while (i.hasNext()) { while (i.hasNext()) {
...@@ -192,14 +192,14 @@ QString QGCFileDialog::_getFirstExtensionInFilter(const QString& filter) { ...@@ -192,14 +192,14 @@ QString QGCFileDialog::_getFirstExtensionInFilter(const QString& filter) {
} }
/// @brief Validates and updates the parameters for the file dialog calls /// @brief Validates and updates the parameters for the file dialog calls
void QGCFileDialog::_validate(Options& options) void QGCQFileDialog::_validate(Options& options)
{ {
Q_UNUSED(options) Q_UNUSED(options)
// You can't use QGCFileDialog if QGCApplication is not created yet. // You can't use QGCQFileDialog if QGCApplication is not created yet.
Q_ASSERT(qgcApp()); Q_ASSERT(qgcApp());
Q_ASSERT_X(QThread::currentThread() == qgcApp()->thread(), "Threading issue", "QGCFileDialog can only be called from main thread"); Q_ASSERT_X(QThread::currentThread() == qgcApp()->thread(), "Threading issue", "QGCQFileDialog can only be called from main thread");
if (MainWindow::instance()) { if (MainWindow::instance()) {
} }
} }
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
use to catch these dialogs for unit testing. use to catch these dialogs for unit testing.
@remark If you need to know what type of file was returned by these functions, you can use something like: @remark If you need to know what type of file was returned by these functions, you can use something like:
@code{.cpp} @code{.cpp}
QString filename = QGCFileDialog::getSaveFileName(this, tr("Save File"), "~/", "Foo files (*.foo);;All Files (*.*)", "foo"); QString filename = QGCQFileDialog::getSaveFileName(this, tr("Save File"), "~/", "Foo files (*.foo);;All Files (*.*)", "foo");
if (!filename.isEmpty()) { if (!filename.isEmpty()) {
QFileInfo fi(filename); QFileInfo fi(filename);
QString fileExtension(fi.suffix()); QString fileExtension(fi.suffix());
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
@endcode @endcode
*/ */
class QGCFileDialog : public QFileDialog { class QGCQFileDialog : public QFileDialog {
public: public:
...@@ -119,7 +119,7 @@ public: ...@@ -119,7 +119,7 @@ public:
Options options = 0); Options options = 0);
private slots: private slots:
/// @brief The exec slot is private because we only want QGCFileDialog users to use the static methods. Otherwise it will break /// @brief The exec slot is private because we only want QGCQFileDialog users to use the static methods. Otherwise it will break
/// unit testing. /// unit testing.
int exec(void) { return QFileDialog::exec(); } int exec(void) { return QFileDialog::exec(); }
......
...@@ -111,21 +111,29 @@ QGCView { ...@@ -111,21 +111,29 @@ QGCView {
MenuItem { MenuItem {
text: qsTr("Load from file...") text: qsTr("Load from file...")
onTriggered: { onTriggered: {
if (ScreenTools.isMobile) { var appSettings = QGroundControl.settingsManager.appSettings
qgcView.showDialog(mobileFilePicker, qsTr("Select Parameter File"), qgcView.showDialogDefaultWidth, StandardButton.Cancel)
} else { fileDialog.qgcView = qgcView
controller.loadFromFilePicker() fileDialog.title = qsTr("Select Parameter File")
} fileDialog.selectExisting = true
fileDialog.folder = appSettings.parameterSavePath
fileDialog.fileExtension = appSettings.parameterFileExtension
fileDialog.nameFilters = [ qsTr("Parameter Files (*.%1)").arg(appSettings.parameterFileExtension) , qsTr("All Files (*.*)") ]
fileDialog.openForLoad()
} }
} }
MenuItem { MenuItem {
text: qsTr("Save to file...") text: qsTr("Save to file...")
onTriggered: { onTriggered: {
if (ScreenTools.isMobile) { var appSettings = QGroundControl.settingsManager.appSettings
qgcView.showDialog(mobileFileSaver, qsTr("Save Parameter File"), qgcView.showDialogDefaultWidth, StandardButton.Save | StandardButton.Cancel)
} else { fileDialog.qgcView = qgcView
controller.saveToFilePicker() fileDialog.title = qsTr("Save Parameters")
} fileDialog.selectExisting = false
fileDialog.folder = appSettings.parameterSavePath
fileDialog.fileExtension = appSettings.parameterFileExtension
fileDialog.nameFilters = [ qsTr("Parameter Files (*.%1)").arg(appSettings.parameterFileExtension) , qsTr("All Files (*.*)") ]
fileDialog.openForSave()
} }
} }
MenuSeparator { visible: _showRCToParam } MenuSeparator { visible: _showRCToParam }
...@@ -272,30 +280,26 @@ QGCView { ...@@ -272,30 +280,26 @@ QGCView {
} }
} // QGCViewPanel } // QGCViewPanel
Component { QGCFileDialog {
id: editorDialogComponent id: fileDialog
ParameterEditorDialog { onAcceptedForSave: {
fact: _editorDialogFact controller.saveToFile(file)
showRCToParam: _showRCToParam close()
} }
}
Component {
id: mobileFilePicker
QGCMobileFileOpenDialog { onAcceptedForLoad: {
fileExtension: QGroundControl.parameterFileExtension controller.loadFromFile(file)
onFilenameReturned: controller.loadFromFile(filename) close()
} }
} }
Component { Component {
id: mobileFileSaver id: editorDialogComponent
QGCMobileFileSaveDialog { ParameterEditorDialog {
fileExtension: QGroundControl.parameterFileExtension fact: _editorDialogFact
onFilenameReturned: controller.saveToFile(filename) showRCToParam: _showRCToParam
} }
} }
......
...@@ -14,9 +14,11 @@ ...@@ -14,9 +14,11 @@
#include "ParameterEditorController.h" #include "ParameterEditorController.h"
#include "QGCApplication.h" #include "QGCApplication.h"
#include "ParameterManager.h" #include "ParameterManager.h"
#include "SettingsManager.h"
#include "AppSettings.h"
#ifndef __mobile__ #ifndef __mobile__
#include "QGCFileDialog.h" #include "QGCQFileDialog.h"
#include "QGCMapRCToParamDialog.h" #include "QGCMapRCToParamDialog.h"
#include "MainWindow.h" #include "MainWindow.h"
#endif #endif
...@@ -93,11 +95,6 @@ void ParameterEditorController::clearRCToParam(void) ...@@ -93,11 +95,6 @@ void ParameterEditorController::clearRCToParam(void)
void ParameterEditorController::saveToFile(const QString& filename) void ParameterEditorController::saveToFile(const QString& filename)
{ {
if (!_autopilot) {
qWarning() << "Internal error _autopilot==NULL";
return;
}
if (!filename.isEmpty()) { if (!filename.isEmpty()) {
QFile file(filename); QFile file(filename);
...@@ -112,28 +109,10 @@ void ParameterEditorController::saveToFile(const QString& filename) ...@@ -112,28 +109,10 @@ void ParameterEditorController::saveToFile(const QString& filename)
} }
} }
void ParameterEditorController::saveToFilePicker(void)
{
#ifndef __mobile__
QString fileName = QGCFileDialog::getSaveFileName(MainWindow::instance(),
"Save Parameters",
QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation),
"Parameter Files (*.params)",
"params",
true);
saveToFile(fileName);
#endif
}
void ParameterEditorController::loadFromFile(const QString& filename) void ParameterEditorController::loadFromFile(const QString& filename)
{ {
QString errors; QString errors;
if (!_autopilot) {
qWarning() << "Internal error _autopilot==NULL";
return;
}
if (!filename.isEmpty()) { if (!filename.isEmpty()) {
QFile file(filename); QFile file(filename);
...@@ -152,17 +131,6 @@ void ParameterEditorController::loadFromFile(const QString& filename) ...@@ -152,17 +131,6 @@ void ParameterEditorController::loadFromFile(const QString& filename)
} }
} }
void ParameterEditorController::loadFromFilePicker(void)
{
#ifndef __mobile__
QString fileName = QGCFileDialog::getOpenFileName(MainWindow::instance(),
"Load Parameters",
QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation),
"Parameter Files (*.params);;All Files (*)");
loadFromFile(fileName);
#endif
}
void ParameterEditorController::refresh(void) void ParameterEditorController::refresh(void)
{ {
_vehicle->parameterManager()->refreshAllParameters(); _vehicle->parameterManager()->refreshAllParameters();
......
...@@ -41,8 +41,6 @@ public: ...@@ -41,8 +41,6 @@ public:
Q_INVOKABLE QStringList searchParametersForComponent(int componentId, const QString& searchText, bool searchInName=true, bool searchInDescriptions=true); Q_INVOKABLE QStringList searchParametersForComponent(int componentId, const QString& searchText, bool searchInName=true, bool searchInDescriptions=true);
Q_INVOKABLE void clearRCToParam(void); Q_INVOKABLE void clearRCToParam(void);
Q_INVOKABLE void saveToFilePicker(void);
Q_INVOKABLE void loadFromFilePicker(void);
Q_INVOKABLE void saveToFile(const QString& filename); Q_INVOKABLE void saveToFile(const QString& filename);
Q_INVOKABLE void loadFromFile(const QString& filename); Q_INVOKABLE void loadFromFile(const QString& filename);
Q_INVOKABLE void refresh(void); Q_INVOKABLE void refresh(void);
......
...@@ -8,68 +8,49 @@ ...@@ -8,68 +8,49 @@
****************************************************************************/ ****************************************************************************/
#include "QGCMobileFileDialogController.h" #include "QFileDialogController.h"
#include <QStandardPaths> #include <QStandardPaths>
#include <QDebug> #include <QDebug>
#include <QDir> #include <QDir>
QGC_LOGGING_CATEGORY(QGCMobileFileDialogControllerLog, "QGCMobileFileDialogControllerLog") QGC_LOGGING_CATEGORY(QFileDialogControllerLog, "QFileDialogControllerLog")
QStringList QGCMobileFileDialogController::getFiles(const QString& fileExtension) QStringList QFileDialogController::getFiles(const QString& directoryPath, const QString& fileExtension)
{ {
qCDebug(QFileDialogControllerLog) << "getFiles" << directoryPath << fileExtension;
QStringList files; QStringList files;
QDir fileDir(_getSaveLocation()); QDir fileDir(directoryPath);
QFileInfoList fileInfoList = fileDir.entryInfoList(QStringList(QString("*.%1").arg(fileExtension)), QDir::Files, QDir::Name); QFileInfoList fileInfoList = fileDir.entryInfoList(QStringList(QString("*.%1").arg(fileExtension)), QDir::Files, QDir::Name);
foreach (const QFileInfo& fileInfo, fileInfoList) { foreach (const QFileInfo& fileInfo, fileInfoList) {
qCDebug(QFileDialogControllerLog) << "getFiles found" << fileInfo.baseName();
files << fileInfo.baseName() + QStringLiteral(".") + fileExtension; files << fileInfo.baseName() + QStringLiteral(".") + fileExtension;
} }
return files; return files;
} }
QString QGCMobileFileDialogController::fullPath(const QString& filename, const QString& fileExtension) QString QFileDialogController::filenameWithExtension(const QString& filename, const QString& fileExtension)
{ {
qDebug() << "QGCMobileFileDialogController::fullPath" << filename << fileExtension; QString filenameWithExtension(filename);
QString saveLocation(_getSaveLocation());
if (saveLocation.isEmpty()) {
return filename;
}
QString fixedFilename(filename);
QString correctExtension = QString(".%1").arg(fileExtension); QString correctExtension = QString(".%1").arg(fileExtension);
if (!filename.endsWith(correctExtension)) { if (!filenameWithExtension.endsWith(correctExtension)) {
fixedFilename += correctExtension; filenameWithExtension += correctExtension;
} }
QString fullPath = saveLocation + QDir::separator() + fixedFilename; return filenameWithExtension;
qCDebug(QGCMobileFileDialogControllerLog) << "Full path" << fullPath;
return fullPath;
} }
bool QGCMobileFileDialogController::fileExists(const QString& filename, const QString& fileExtension) bool QFileDialogController::fileExists(const QString& filename)
{ {
QFile file(fullPath(filename, fileExtension)); return QFile(filename).exists();
qDebug() << "QGCMobileFileDialogController::fileExists" << file.fileName();
return file.exists();
} }
QString QGCMobileFileDialogController::_getSaveLocation(void) QString QFileDialogController::fullyQualifiedFilename(const QString& directoryPath, const QString& filename, const QString& fileExtension)
{ {
QStringList docDirs = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation); return directoryPath + QStringLiteral("/") + filenameWithExtension(filename, fileExtension);
if (docDirs.count() <= 0) {
qCWarning(QGCMobileFileDialogControllerLog) << "No save location";
return QString();
}
QString saveDirectory = docDirs[0];
if (!QDir(saveDirectory).exists()) {
QDir().mkdir(saveDirectory);
}
qCDebug(QGCMobileFileDialogControllerLog) << "Save directory" << saveDirectory;
return saveDirectory;
} }
...@@ -8,36 +8,34 @@ ...@@ -8,36 +8,34 @@
****************************************************************************/ ****************************************************************************/
#ifndef QGCMobileFileDialogController_H #ifndef QFileDialogController_H
#define QGCMobileFileDialogController_H #define QFileDialogController_H
#include <QObject> #include <QObject>
#include <QUrl>
#include "QGCLoggingCategory.h" #include "QGCLoggingCategory.h"
Q_DECLARE_LOGGING_CATEGORY(QGCMobileFileDialogControllerLog) Q_DECLARE_LOGGING_CATEGORY(QFileDialogControllerLog)
class QGCMobileFileDialogController : public QObject class QFileDialogController : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
/// Return all file in Documents location which match the specified extension /// Return all file in the specified path which match the specified extension
Q_INVOKABLE QStringList getFiles(const QString& fileExtension); Q_INVOKABLE QStringList getFiles(const QString& directoryPath, const QString& fileExtension);
/// Return the full path for specified file in the Documents location /// Returns the specified file name with the extension added it needed
/// @param filename File name, not fully qualified, may not have extension Q_INVOKABLE QString filenameWithExtension(const QString& filename, const QString& fileExtension);
/// @param fileExtension Expected file extension, added if needed
Q_INVOKABLE QString fullPath(const QString& filename, const QString& fileExtension); /// Returns the fully qualified file name from the specified parts
Q_INVOKABLE QString fullyQualifiedFilename(const QString& directoryPath, const QString& filename, const QString& fileExtension);
/// Check for file existence
/// @param filename File name, not fully qualified, may not have extension /// Check for file existence of specified fully qualified file name
/// @param fileExtension Expected file extension, added if needed Q_INVOKABLE bool fileExists(const QString& filename);
/// @return true: File exists at Documents location
Q_INVOKABLE bool fileExists(const QString& filename, const QString& fileExtension);
private: Q_INVOKABLE QString urlToLocalFile(QUrl url) { return url.toLocalFile(); }
QString _getSaveLocation(void);
}; };
#endif #endif
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
}
}
}
}
}
/****************************************************************************
*
* (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.3
import QtQuick.Controls 1.2
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 open dialog for mobile
QGCViewDialog {
property string fileExtension ///< File extension for file listing
signal filenameReturned(string filename)
readonly property real _margins: ScreenTools.defaultFontPixelHeight / 2
QGCMobileFileDialogController { id: controller }
QGCPalette { id: qgcPal; colorGroupEnabled: true }
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
}
}
}
/****************************************************************************
*
* (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.3
import QtQuick.Controls 1.2
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 string fileExtension ///< File extension for file listing
signal filenameReturned(string filename)
readonly property real _margins: ScreenTools.defaultFontPixelHeight / 2
function accept() {
if (filenameTextField.text == "") {
return
}
if (!replaceMessage.visible) {
if (controller.fileExists(filenameTextField.text, fileExtension)) {
console.log("File exists")
replaceMessage.visible = true
return
}
}
filenameReturned(controller.fullPath(filenameTextField.text, fileExtension))
hideDialog()
}
QGCMobileFileDialogController { id: controller }
QGCPalette { id: qgcPal; colorGroupEnabled: true }
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
}
}
}
...@@ -33,13 +33,12 @@ QGCButton 1.0 QGCButton.qml ...@@ -33,13 +33,12 @@ QGCButton 1.0 QGCButton.qml
QGCCheckBox 1.0 QGCCheckBox.qml QGCCheckBox 1.0 QGCCheckBox.qml
QGCColoredImage 1.0 QGCColoredImage.qml QGCColoredImage 1.0 QGCColoredImage.qml
QGCComboBox 1.0 QGCComboBox.qml QGCComboBox 1.0 QGCComboBox.qml
QGCFileDialog 1.0 QGCFileDialog.qml
QGCFlickable 1.0 QGCFlickable.qml QGCFlickable 1.0 QGCFlickable.qml
QGCGroupBox 1.0 QGCGroupBox.qml QGCGroupBox 1.0 QGCGroupBox.qml
QGCLabel 1.0 QGCLabel.qml QGCLabel 1.0 QGCLabel.qml
QGCListView 1.0 QGCListView.qml QGCListView 1.0 QGCListView.qml
QGCMapLabel 1.0 QGCMapLabel.qml QGCMapLabel 1.0 QGCMapLabel.qml
QGCMobileFileOpenDialog 1.0 QGCMobileFileOpenDialog.qml
QGCMobileFileSaveDialog 1.0 QGCMobileFileSaveDialog.qml
QGCMouseArea 1.0 QGCMouseArea.qml QGCMouseArea 1.0 QGCMouseArea.qml
QGCMovableItem 1.0 QGCMovableItem.qml QGCMovableItem 1.0 QGCMovableItem.qml
QGCPipable 1.0 QGCPipable.qml QGCPipable 1.0 QGCPipable.qml
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include "FactMetaData.h" #include "FactMetaData.h"
#include "SimulatedPosition.h" #include "SimulatedPosition.h"
#include "QGCLoggingCategory.h" #include "QGCLoggingCategory.h"
#include "AppSettings.h"
#ifdef QT_DEBUG #ifdef QT_DEBUG
#include "MockLink.h" #include "MockLink.h"
...@@ -118,8 +119,6 @@ public: ...@@ -118,8 +119,6 @@ public:
Q_INVOKABLE bool linesIntersect(QPointF xLine1, QPointF yLine1, QPointF xLine2, QPointF yLine2); Q_INVOKABLE bool linesIntersect(QPointF xLine1, QPointF yLine1, QPointF xLine2, QPointF yLine2);
Q_INVOKABLE QString urlToLocalFile(QUrl url) { return url.toLocalFile(); }
// Property accesors // Property accesors
QString appName () { return qgcApp()->applicationName(); } QString appName () { return qgcApp()->applicationName(); }
...@@ -151,9 +150,9 @@ public: ...@@ -151,9 +150,9 @@ public:
void setFlightMapPosition (QGeoCoordinate& coordinate); void setFlightMapPosition (QGeoCoordinate& coordinate);
void setFlightMapZoom (double zoom); void setFlightMapZoom (double zoom);
QString parameterFileExtension(void) const { return QGCApplication::parameterFileExtension; } QString parameterFileExtension(void) const { return AppSettings::parameterFileExtension; }
QString missionFileExtension(void) const { return QGCApplication::missionFileExtension; } QString missionFileExtension(void) const { return AppSettings::missionFileExtension; }
QString telemetryFileExtension(void) const { return QGCApplication::telemetryFileExtension; } QString telemetryFileExtension(void) const { return AppSettings::telemetryFileExtension; }
QString qgcVersion(void) const { return qgcApp()->applicationVersion(); } QString qgcVersion(void) const { return qgcApp()->applicationVersion(); }
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
/// @author Gus Grubba <mavlink@grubba.com> /// @author Gus Grubba <mavlink@grubba.com>
#if !defined(__mobile__) #if !defined(__mobile__)
#include "QGCFileDialog.h" #include "QGCQFileDialog.h"
#include "MainWindow.h" #include "MainWindow.h"
#endif #endif
...@@ -407,7 +407,7 @@ QGCMapEngineManager::importSets(QString path) { ...@@ -407,7 +407,7 @@ QGCMapEngineManager::importSets(QString path) {
//-- TODO: This has to be something fixed //-- TODO: This has to be something fixed
dir = QDir(QDir::homePath()).filePath(QString("export_%1.db").arg(QDateTime::currentDateTime().toTime_t())); dir = QDir(QDir::homePath()).filePath(QString("export_%1.db").arg(QDateTime::currentDateTime().toTime_t()));
#else #else
dir = QGCFileDialog::getOpenFileName( dir = QGCQFileDialog::getOpenFileName(
MainWindow::instance(), MainWindow::instance(),
"Export Tile Set", "Export Tile Set",
QDir::homePath(), QDir::homePath(),
...@@ -437,7 +437,7 @@ QGCMapEngineManager::exportSets(QString path) { ...@@ -437,7 +437,7 @@ QGCMapEngineManager::exportSets(QString path) {
#if defined(__mobile__) #if defined(__mobile__)
dir = QDir(QDir::homePath()).filePath(QString("export_%1.db").arg(QDateTime::currentDateTime().toTime_t())); dir = QDir(QDir::homePath()).filePath(QString("export_%1.db").arg(QDateTime::currentDateTime().toTime_t()));
#else #else
dir = QGCFileDialog::getSaveFileName( dir = QGCQFileDialog::getSaveFileName(
MainWindow::instance(), MainWindow::instance(),
"Export Tile Set", "Export Tile Set",
QDir::homePath(), QDir::homePath(),
......
...@@ -55,13 +55,6 @@ ...@@ -55,13 +55,6 @@
"units": "meters", "units": "meters",
"decimalPlaces": 2 "decimalPlaces": 2
}, },
{
"name": "MissionAutoLoadDir",
"shortDescription": "Mission auto load directory",
"longDescription": "The directory from which missions will be automatically loaded onto a vehicle when it connects. The mission file must be named AutoLoad#.mission where the # is replaced with the vehicle id.",
"type": "string",
"defaultValue": ""
},
{ {
"name": "PromptFLightDataSave", "name": "PromptFLightDataSave",
"shortDescription": "Save telemetry Log after each flight", "shortDescription": "Save telemetry Log after each flight",
...@@ -90,6 +83,13 @@ ...@@ -90,6 +83,13 @@
"type": "bool", "type": "bool",
"defaultValue": false "defaultValue": false
}, },
{
"name": "AutoLoadMissions",
"shortDescription": "AutoLoad mission on vehicle connect",
"longDescription": "Automatically load a mission file named AutoLoad#.mission when a vehicle with id # connects.",
"type": "bool",
"defaultValue": false
},
{ {
"name": "BaseDeviceFontPointSize", "name": "BaseDeviceFontPointSize",
"shortDescription": "Application font size", "shortDescription": "Application font size",
...@@ -116,9 +116,9 @@ ...@@ -116,9 +116,9 @@
"defaultValue": false "defaultValue": false
}, },
{ {
"name": "TelemetrySavePath", "name": "SavePath",
"shortDescription": "Telemetry log save directory", "shortDescription": "Application save directory",
"longDescription": "The directory to which telemetry logs are automatically saved to.", "longDescription": "Directory to which all data files are saved/loaded from",
"type": "string", "type": "string",
"defaultValue": "" "defaultValue": ""
} }
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <QQmlEngine> #include <QQmlEngine>
#include <QtQml> #include <QtQml>
#include <QStandardPaths>
const char* AppSettings::appSettingsGroupName = "App"; const char* AppSettings::appSettingsGroupName = "App";
const char* AppSettings::offlineEditingFirmwareTypeSettingsName = "OfflineEditingFirmwareType"; const char* AppSettings::offlineEditingFirmwareTypeSettingsName = "OfflineEditingFirmwareType";
...@@ -21,7 +22,6 @@ const char* AppSettings::offlineEditingCruiseSpeedSettingsName = "Offline ...@@ -21,7 +22,6 @@ const char* AppSettings::offlineEditingCruiseSpeedSettingsName = "Offline
const char* AppSettings::offlineEditingHoverSpeedSettingsName = "OfflineEditingHoverSpeed"; const char* AppSettings::offlineEditingHoverSpeedSettingsName = "OfflineEditingHoverSpeed";
const char* AppSettings::batteryPercentRemainingAnnounceSettingsName = "batteryPercentRemainingAnnounce"; const char* AppSettings::batteryPercentRemainingAnnounceSettingsName = "batteryPercentRemainingAnnounce";
const char* AppSettings::defaultMissionItemAltitudeSettingsName = "DefaultMissionItemAltitude"; const char* AppSettings::defaultMissionItemAltitudeSettingsName = "DefaultMissionItemAltitude";
const char* AppSettings::missionAutoLoadDirSettingsName = "MissionAutoLoadDir";
const char* AppSettings::telemetrySaveName = "PromptFLightDataSave"; const char* AppSettings::telemetrySaveName = "PromptFLightDataSave";
const char* AppSettings::telemetrySaveNotArmedName = "PromptFLightDataSaveNotArmed"; const char* AppSettings::telemetrySaveNotArmedName = "PromptFLightDataSaveNotArmed";
const char* AppSettings::audioMutedName = "AudioMuted"; const char* AppSettings::audioMutedName = "AudioMuted";
...@@ -29,7 +29,18 @@ const char* AppSettings::virtualJoystickName = "Virtual ...@@ -29,7 +29,18 @@ const char* AppSettings::virtualJoystickName = "Virtual
const char* AppSettings::appFontPointSizeName = "BaseDeviceFontPointSize"; const char* AppSettings::appFontPointSizeName = "BaseDeviceFontPointSize";
const char* AppSettings::indoorPaletteName = "StyleIsDark"; const char* AppSettings::indoorPaletteName = "StyleIsDark";
const char* AppSettings::showLargeCompassName = "ShowLargeCompass"; const char* AppSettings::showLargeCompassName = "ShowLargeCompass";
const char* AppSettings::telemetrySavePathName = "TelemetrySavePath"; const char* AppSettings::savePathName = "SavePath";
const char* AppSettings::autoLoadMissionsName = "AutoLoadMissions";
const char* AppSettings::parameterFileExtension = "params";
const char* AppSettings::missionFileExtension = "mission";
const char* AppSettings::fenceFileExtension = "fence";
const char* AppSettings::rallyPointFileExtension = "rally";
const char* AppSettings::telemetryFileExtension = "tlog";
const char* AppSettings::parameterDirectory = "Parameters";
const char* AppSettings::telemetryDirectory = "Telemetry";
const char* AppSettings::missionDirectory = "Missions";
AppSettings::AppSettings(QObject* parent) AppSettings::AppSettings(QObject* parent)
: SettingsGroup(appSettingsGroupName, QString() /* root settings group */, parent) : SettingsGroup(appSettingsGroupName, QString() /* root settings group */, parent)
...@@ -39,7 +50,6 @@ AppSettings::AppSettings(QObject* parent) ...@@ -39,7 +50,6 @@ AppSettings::AppSettings(QObject* parent)
, _offlineEditingHoverSpeedFact(NULL) , _offlineEditingHoverSpeedFact(NULL)
, _batteryPercentRemainingAnnounceFact(NULL) , _batteryPercentRemainingAnnounceFact(NULL)
, _defaultMissionItemAltitudeFact(NULL) , _defaultMissionItemAltitudeFact(NULL)
, _missionAutoLoadDirFact(NULL)
, _telemetrySaveFact(NULL) , _telemetrySaveFact(NULL)
, _telemetrySaveNotArmedFact(NULL) , _telemetrySaveNotArmedFact(NULL)
, _audioMutedFact(NULL) , _audioMutedFact(NULL)
...@@ -47,11 +57,44 @@ AppSettings::AppSettings(QObject* parent) ...@@ -47,11 +57,44 @@ AppSettings::AppSettings(QObject* parent)
, _appFontPointSizeFact(NULL) , _appFontPointSizeFact(NULL)
, _indoorPaletteFact(NULL) , _indoorPaletteFact(NULL)
, _showLargeCompassFact(NULL) , _showLargeCompassFact(NULL)
, _telemetrySavePathFact(NULL) , _savePathFact(NULL)
, _autoLoadMissionsFact(NULL)
{ {
QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership); QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
qmlRegisterUncreatableType<AppSettings>("QGroundControl.SettingsManager", 1, 0, "AppSettings", "Reference only"); qmlRegisterUncreatableType<AppSettings>("QGroundControl.SettingsManager", 1, 0, "AppSettings", "Reference only");
QGCPalette::setGlobalTheme(indoorPalette()->rawValue().toBool() ? QGCPalette::Dark : QGCPalette::Light); QGCPalette::setGlobalTheme(indoorPalette()->rawValue().toBool() ? QGCPalette::Dark : QGCPalette::Light);
// Instantiate savePath so we can check for override and setup default path if needed
Fact* savePathFact = savePath();
QString appName = qgcApp()->applicationName();
if (savePathFact->rawValue().toString().isEmpty() && _nameToMetaDataMap[savePathName]->rawDefaultValue().toString().isEmpty()) {
#ifdef __mobile__
QDir rootDir = QDir(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation));
savePathFact->setVisible(false);
#else
QDir rootDir = QDir(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation));
#endif
savePathFact->setRawValue(rootDir.filePath(appName));
}
connect(savePathFact, &Fact::rawValueChanged, this, &AppSettings::savePathsChanged);
connect(savePathFact, &Fact::rawValueChanged, this, &AppSettings::_checkSavePathDirectories);
_checkSavePathDirectories();
}
void AppSettings::_checkSavePathDirectories(void)
{
QDir savePathDir(savePath()->rawValue().toString());
if (!savePathDir.exists()) {
QDir().mkpath(savePathDir.absolutePath());
}
if (savePathDir.exists()) {
savePathDir.mkdir(parameterDirectory);
savePathDir.mkdir(telemetryDirectory);
savePathDir.mkdir(missionDirectory);
}
} }
Fact* AppSettings::offlineEditingFirmwareType(void) Fact* AppSettings::offlineEditingFirmwareType(void)
...@@ -106,15 +149,6 @@ Fact* AppSettings::defaultMissionItemAltitude(void) ...@@ -106,15 +149,6 @@ Fact* AppSettings::defaultMissionItemAltitude(void)
return _defaultMissionItemAltitudeFact; return _defaultMissionItemAltitudeFact;
} }
Fact* AppSettings::missionAutoLoadDir(void)
{
if (!_missionAutoLoadDirFact) {
_missionAutoLoadDirFact = _createSettingsFact(missionAutoLoadDirSettingsName);
}
return _missionAutoLoadDirFact;
}
Fact* AppSettings::telemetrySave(void) Fact* AppSettings::telemetrySave(void)
{ {
if (!_telemetrySaveFact) { if (!_telemetrySaveFact) {
...@@ -185,12 +219,60 @@ Fact* AppSettings::showLargeCompass(void) ...@@ -185,12 +219,60 @@ Fact* AppSettings::showLargeCompass(void)
return _showLargeCompassFact; return _showLargeCompassFact;
} }
Fact* AppSettings::telemetrySavePath(void) Fact* AppSettings::savePath(void)
{
if (!_savePathFact) {
_savePathFact = _createSettingsFact(savePathName);
}
return _savePathFact;
}
QString AppSettings::missionSavePath(void)
{
QString fullPath;
QString path = savePath()->rawValue().toString();
if (!path.isEmpty() && QDir(path).exists()) {
QDir dir(path);
return dir.filePath(missionDirectory);
}
return fullPath;
}
QString AppSettings::parameterSavePath(void)
{
QString fullPath;
QString path = savePath()->rawValue().toString();
if (!path.isEmpty() && QDir(path).exists()) {
QDir dir(path);
return dir.filePath(parameterDirectory);
}
return fullPath;
}
QString AppSettings::telemetrySavePath(void)
{
QString fullPath;
QString path = savePath()->rawValue().toString();
if (!path.isEmpty() && QDir(path).exists()) {
QDir dir(path);
return dir.filePath(telemetryDirectory);
}
return fullPath;
}
Fact* AppSettings::autoLoadMissions(void)
{ {
if (!_telemetrySavePathFact) { if (!_autoLoadMissionsFact) {
_telemetrySavePathFact = _createSettingsFact(telemetrySavePathName); _autoLoadMissionsFact = _createSettingsFact(autoLoadMissionsName);
} }
return _telemetrySavePathFact; return _autoLoadMissionsFact;
} }
...@@ -25,7 +25,6 @@ public: ...@@ -25,7 +25,6 @@ public:
Q_PROPERTY(Fact* offlineEditingHoverSpeed READ offlineEditingHoverSpeed CONSTANT) Q_PROPERTY(Fact* offlineEditingHoverSpeed READ offlineEditingHoverSpeed CONSTANT)
Q_PROPERTY(Fact* batteryPercentRemainingAnnounce READ batteryPercentRemainingAnnounce CONSTANT) Q_PROPERTY(Fact* batteryPercentRemainingAnnounce READ batteryPercentRemainingAnnounce CONSTANT)
Q_PROPERTY(Fact* defaultMissionItemAltitude READ defaultMissionItemAltitude CONSTANT) Q_PROPERTY(Fact* defaultMissionItemAltitude READ defaultMissionItemAltitude CONSTANT)
Q_PROPERTY(Fact* missionAutoLoadDir READ missionAutoLoadDir CONSTANT)
Q_PROPERTY(Fact* telemetrySave READ telemetrySave CONSTANT) Q_PROPERTY(Fact* telemetrySave READ telemetrySave CONSTANT)
Q_PROPERTY(Fact* telemetrySaveNotArmed READ telemetrySaveNotArmed CONSTANT) Q_PROPERTY(Fact* telemetrySaveNotArmed READ telemetrySaveNotArmed CONSTANT)
Q_PROPERTY(Fact* audioMuted READ audioMuted CONSTANT) Q_PROPERTY(Fact* audioMuted READ audioMuted CONSTANT)
...@@ -33,7 +32,16 @@ public: ...@@ -33,7 +32,16 @@ public:
Q_PROPERTY(Fact* appFontPointSize READ appFontPointSize CONSTANT) Q_PROPERTY(Fact* appFontPointSize READ appFontPointSize CONSTANT)
Q_PROPERTY(Fact* indoorPalette READ indoorPalette CONSTANT) Q_PROPERTY(Fact* indoorPalette READ indoorPalette CONSTANT)
Q_PROPERTY(Fact* showLargeCompass READ showLargeCompass CONSTANT) Q_PROPERTY(Fact* showLargeCompass READ showLargeCompass CONSTANT)
Q_PROPERTY(Fact* telemetrySavePath READ telemetrySavePath CONSTANT) Q_PROPERTY(Fact* savePath READ savePath CONSTANT)
Q_PROPERTY(Fact* autoLoadMissions READ autoLoadMissions CONSTANT)
Q_PROPERTY(QString missionSavePath READ missionSavePath NOTIFY savePathsChanged)
Q_PROPERTY(QString parameterSavePath READ parameterSavePath NOTIFY savePathsChanged)
Q_PROPERTY(QString telemetrySavePath READ telemetrySavePath NOTIFY savePathsChanged)
Q_PROPERTY(QString missionFileExtension MEMBER missionFileExtension CONSTANT)
Q_PROPERTY(QString parameterFileExtension MEMBER parameterFileExtension CONSTANT)
Q_PROPERTY(QString telemetryFileExtension MEMBER telemetryFileExtension CONSTANT)
Fact* offlineEditingFirmwareType (void); Fact* offlineEditingFirmwareType (void);
Fact* offlineEditingVehicleType (void); Fact* offlineEditingVehicleType (void);
...@@ -41,7 +49,6 @@ public: ...@@ -41,7 +49,6 @@ public:
Fact* offlineEditingHoverSpeed (void); Fact* offlineEditingHoverSpeed (void);
Fact* batteryPercentRemainingAnnounce (void); Fact* batteryPercentRemainingAnnounce (void);
Fact* defaultMissionItemAltitude (void); Fact* defaultMissionItemAltitude (void);
Fact* missionAutoLoadDir (void);
Fact* telemetrySave (void); Fact* telemetrySave (void);
Fact* telemetrySaveNotArmed (void); Fact* telemetrySaveNotArmed (void);
Fact* audioMuted (void); Fact* audioMuted (void);
...@@ -49,7 +56,12 @@ public: ...@@ -49,7 +56,12 @@ public:
Fact* appFontPointSize (void); Fact* appFontPointSize (void);
Fact* indoorPalette (void); Fact* indoorPalette (void);
Fact* showLargeCompass (void); Fact* showLargeCompass (void);
Fact* telemetrySavePath (void); Fact* savePath (void);
Fact* autoLoadMissions (void);
QString missionSavePath (void);
QString parameterSavePath (void);
QString telemetrySavePath (void);
static const char* appSettingsGroupName; static const char* appSettingsGroupName;
...@@ -59,7 +71,6 @@ public: ...@@ -59,7 +71,6 @@ public:
static const char* offlineEditingHoverSpeedSettingsName; static const char* offlineEditingHoverSpeedSettingsName;
static const char* batteryPercentRemainingAnnounceSettingsName; static const char* batteryPercentRemainingAnnounceSettingsName;
static const char* defaultMissionItemAltitudeSettingsName; static const char* defaultMissionItemAltitudeSettingsName;
static const char* missionAutoLoadDirSettingsName;
static const char* telemetrySaveName; static const char* telemetrySaveName;
static const char* telemetrySaveNotArmedName; static const char* telemetrySaveNotArmedName;
static const char* audioMutedName; static const char* audioMutedName;
...@@ -67,10 +78,27 @@ public: ...@@ -67,10 +78,27 @@ public:
static const char* appFontPointSizeName; static const char* appFontPointSizeName;
static const char* indoorPaletteName; static const char* indoorPaletteName;
static const char* showLargeCompassName; static const char* showLargeCompassName;
static const char* telemetrySavePathName; static const char* savePathName;
static const char* autoLoadMissionsName;
// Application wide file extensions
static const char* parameterFileExtension;
static const char* missionFileExtension;
static const char* fenceFileExtension;
static const char* rallyPointFileExtension;
static const char* telemetryFileExtension;
// Child directories of savePath for specific file types
static const char* parameterDirectory;
static const char* telemetryDirectory;
static const char* missionDirectory;
signals:
void savePathsChanged(void);
private slots: private slots:
void _indoorPaletteChanged(void); void _indoorPaletteChanged(void);
void _checkSavePathDirectories(void);
private: private:
SettingsFact* _offlineEditingFirmwareTypeFact; SettingsFact* _offlineEditingFirmwareTypeFact;
...@@ -79,7 +107,6 @@ private: ...@@ -79,7 +107,6 @@ private:
SettingsFact* _offlineEditingHoverSpeedFact; SettingsFact* _offlineEditingHoverSpeedFact;
SettingsFact* _batteryPercentRemainingAnnounceFact; SettingsFact* _batteryPercentRemainingAnnounceFact;
SettingsFact* _defaultMissionItemAltitudeFact; SettingsFact* _defaultMissionItemAltitudeFact;
SettingsFact* _missionAutoLoadDirFact;
SettingsFact* _telemetrySaveFact; SettingsFact* _telemetrySaveFact;
SettingsFact* _telemetrySaveNotArmedFact; SettingsFact* _telemetrySaveNotArmedFact;
SettingsFact* _audioMutedFact; SettingsFact* _audioMutedFact;
...@@ -87,7 +114,8 @@ private: ...@@ -87,7 +114,8 @@ private:
SettingsFact* _appFontPointSizeFact; SettingsFact* _appFontPointSizeFact;
SettingsFact* _indoorPaletteFact; SettingsFact* _indoorPaletteFact;
SettingsFact* _showLargeCompassFact; SettingsFact* _showLargeCompassFact;
SettingsFact* _telemetrySavePathFact; SettingsFact* _savePathFact;
SettingsFact* _autoLoadMissionsFact;
}; };
#endif #endif
...@@ -1665,17 +1665,19 @@ void Vehicle::_startMissionRequest(void) ...@@ -1665,17 +1665,19 @@ void Vehicle::_startMissionRequest(void)
if (!_missionManagerInitialRequestSent && _parameterManager->parametersReady() && _vehicleCapabilitiesKnown) { if (!_missionManagerInitialRequestSent && _parameterManager->parametersReady() && _vehicleCapabilitiesKnown) {
qCDebug(VehicleLog) << "_startMissionRequest"; qCDebug(VehicleLog) << "_startMissionRequest";
_missionManagerInitialRequestSent = true; _missionManagerInitialRequestSent = true;
QString missionAutoLoadDirPath = _settingsManager->appSettings()->missionAutoLoadDir()->rawValue().toString(); if (_settingsManager->appSettings()->autoLoadMissions()->rawValue().toBool()) {
if (missionAutoLoadDirPath.isEmpty()) { QString missionAutoLoadDirPath = _settingsManager->appSettings()->missionSavePath();
_missionManager->requestMissionItems(); if (!missionAutoLoadDirPath.isEmpty()) {
} else { QmlObjectListModel* visualItems = NULL;
QmlObjectListModel* visualItems = NULL; QDir missionAutoLoadDir(missionAutoLoadDirPath);
QDir missionAutoLoadDir(missionAutoLoadDirPath); QString autoloadFilename = missionAutoLoadDir.absoluteFilePath(tr("AutoLoad%1.%2").arg(_id).arg(AppSettings::missionFileExtension));
QString autoloadFilename = missionAutoLoadDir.absoluteFilePath(tr("AutoLoad%1.mission").arg(_id)); if (MissionController::loadItemsFromFile(this, autoloadFilename, &visualItems)) {
if (MissionController::loadItemsFromFile(this, autoloadFilename, &visualItems)) { MissionController::sendItemsToVehicle(this, visualItems);
MissionController::sendItemsToVehicle(this, visualItems); return;
}
} }
} }
_missionManager->requestMissionItems();
} else { } else {
if (!_parameterManager->parametersReady()) { if (!_parameterManager->parametersReady()) {
qCDebug(VehicleLog) << "Delaying _startMissionRequest due to parameters not ready"; qCDebug(VehicleLog) << "Delaying _startMissionRequest due to parameters not ready";
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
#include "FirmwareUpgradeController.h" #include "FirmwareUpgradeController.h"
#include "Bootloader.h" #include "Bootloader.h"
#include "QGCFileDialog.h" #include "QGCQFileDialog.h"
#include "QGCApplication.h" #include "QGCApplication.h"
#include "QGCFileDownload.h" #include "QGCFileDownload.h"
#include "QGCOptions.h" #include "QGCOptions.h"
...@@ -442,7 +442,7 @@ void FirmwareUpgradeController::_getFirmwareFile(FirmwareIdentifier firmwareId) ...@@ -442,7 +442,7 @@ void FirmwareUpgradeController::_getFirmwareFile(FirmwareIdentifier firmwareId)
} }
if (firmwareId.firmwareType == CustomFirmware) { if (firmwareId.firmwareType == CustomFirmware) {
_firmwareFilename = QGCFileDialog::getOpenFileName(NULL, // Parent to main window _firmwareFilename = QGCQFileDialog::getOpenFileName(NULL, // Parent to main window
"Select Firmware File", // Dialog Caption "Select Firmware File", // Dialog Caption
QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), // Initial directory QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), // Initial directory
"Firmware Files (*.px4 *.bin *.ihx)"); // File filter "Firmware Files (*.px4 *.bin *.ihx)"); // File filter
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#include "CustomCommandWidgetController.h" #include "CustomCommandWidgetController.h"
#include "MultiVehicleManager.h" #include "MultiVehicleManager.h"
#include "QGCMAVLink.h" #include "QGCMAVLink.h"
#include "QGCFileDialog.h" #include "QGCQFileDialog.h"
#include "UAS.h" #include "UAS.h"
#include "QGCApplication.h" #include "QGCApplication.h"
...@@ -53,7 +53,7 @@ void CustomCommandWidgetController::_activeVehicleChanged(Vehicle* activeVehicle ...@@ -53,7 +53,7 @@ void CustomCommandWidgetController::_activeVehicleChanged(Vehicle* activeVehicle
void CustomCommandWidgetController::selectQmlFile(void) void CustomCommandWidgetController::selectQmlFile(void)
{ {
QSettings settings; QSettings settings;
QString qmlFile = QGCFileDialog::getOpenFileName(NULL, "Select custom Qml file", QString(), "Qml files (*.qml)"); QString qmlFile = QGCQFileDialog::getOpenFileName(NULL, "Select custom Qml file", QString(), "Qml files (*.qml)");
if (qmlFile.isEmpty()) { if (qmlFile.isEmpty()) {
_customQmlFile.clear(); _customQmlFile.clear();
settings.remove(_settingsKey); settings.remove(_settingsKey);
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
#include "QGCFlightGearLink.h" #include "QGCFlightGearLink.h"
#include "QGC.h" #include "QGC.h"
#include "QGCFileDialog.h" #include "QGCQFileDialog.h"
#include "QGCMessageBox.h" #include "QGCMessageBox.h"
#include "QGCApplication.h" #include "QGCApplication.h"
#include "Vehicle.h" #include "Vehicle.h"
...@@ -744,7 +744,7 @@ bool QGCFlightGearLink::connectSimulation() ...@@ -744,7 +744,7 @@ bool QGCFlightGearLink::connectSimulation()
} }
// Let the user pick the right directory // Let the user pick the right directory
QString dirPath = QGCFileDialog::getExistingDirectory(MainWindow::instance(), tr("Please select directory of FlightGear application : ") + fgAppName); QString dirPath = QGCQFileDialog::getExistingDirectory(MainWindow::instance(), tr("Please select directory of FlightGear application : ") + fgAppName);
if (dirPath.isEmpty()) { if (dirPath.isEmpty()) {
return false; return false;
} }
......
...@@ -9,12 +9,12 @@ ...@@ -9,12 +9,12 @@
/// @file /// @file
/// @brief Unit test for QGCFileDialog catching mechanism. /// @brief Unit test for QGCQFileDialog catching mechanism.
/// ///
/// @author Don Gagne <don@thegagnes.com> /// @author Don Gagne <don@thegagnes.com>
#include "FileDialogTest.h" #include "FileDialogTest.h"
#include "QGCFileDialog.h" #include "QGCQFileDialog.h"
FileDialogTest::FileDialogTest(void) FileDialogTest::FileDialogTest(void)
{ {
...@@ -28,19 +28,19 @@ void FileDialogTest::_fileDialogExpected_test(void) ...@@ -28,19 +28,19 @@ void FileDialogTest::_fileDialogExpected_test(void)
for (int i=0; i<response.count(); i++) { for (int i=0; i<response.count(); i++) {
setExpectedFileDialog(getExistingDirectory, QStringList(response[i])); setExpectedFileDialog(getExistingDirectory, QStringList(response[i]));
QCOMPARE(QGCFileDialog::getExistingDirectory(), response[i]); QCOMPARE(QGCQFileDialog::getExistingDirectory(), response[i]);
checkExpectedFileDialog(); checkExpectedFileDialog();
} }
for (int i=0; i<response.count(); i++) { for (int i=0; i<response.count(); i++) {
setExpectedFileDialog(getOpenFileName, QStringList(response[i])); setExpectedFileDialog(getOpenFileName, QStringList(response[i]));
QCOMPARE(QGCFileDialog::getOpenFileName(), response[i]); QCOMPARE(QGCQFileDialog::getOpenFileName(), response[i]);
checkExpectedFileDialog(); checkExpectedFileDialog();
} }
for (int i=0; i<response.count(); i++) { for (int i=0; i<response.count(); i++) {
setExpectedFileDialog(getSaveFileName, QStringList(response[i])); setExpectedFileDialog(getSaveFileName, QStringList(response[i]));
QCOMPARE(QGCFileDialog::getSaveFileName(), response[i]); QCOMPARE(QGCQFileDialog::getSaveFileName(), response[i]);
checkExpectedFileDialog(); checkExpectedFileDialog();
} }
...@@ -54,7 +54,7 @@ void FileDialogTest::_fileDialogExpected_test(void) ...@@ -54,7 +54,7 @@ void FileDialogTest::_fileDialogExpected_test(void)
for (int i=0; i<responseList.count(); i++) { for (int i=0; i<responseList.count(); i++) {
setExpectedFileDialog(getOpenFileNames, responseList[i]); setExpectedFileDialog(getOpenFileNames, responseList[i]);
QStringList retResponse = QGCFileDialog::getOpenFileNames(); QStringList retResponse = QGCQFileDialog::getOpenFileNames();
checkExpectedFileDialog(); checkExpectedFileDialog();
QCOMPARE(retResponse.count(), responseList[i].count()); QCOMPARE(retResponse.count(), responseList[i].count());
for (int j=0; j<retResponse.count(); j++) { for (int j=0; j<retResponse.count(); j++) {
...@@ -66,14 +66,14 @@ void FileDialogTest::_fileDialogExpected_test(void) ...@@ -66,14 +66,14 @@ void FileDialogTest::_fileDialogExpected_test(void)
void FileDialogTest::_fileDialogUnexpected_test(void) void FileDialogTest::_fileDialogUnexpected_test(void)
{ {
// This should cause an expected failure in the cleanup method // This should cause an expected failure in the cleanup method
QGCFileDialog::getOpenFileName(); QGCQFileDialog::getOpenFileName();
_expectMissedFileDialog = true; _expectMissedFileDialog = true;
} }
void FileDialogTest::_previousFileDialog_test(void) void FileDialogTest::_previousFileDialog_test(void)
{ {
// This is the previous unexpected file dialog // This is the previous unexpected file dialog
QGCFileDialog::getOpenFileName(); QGCQFileDialog::getOpenFileName();
// Setup for an expected message box. // Setup for an expected message box.
QEXPECT_FAIL("", "Expecting failure due to previous file dialog", Continue); QEXPECT_FAIL("", "Expecting failure due to previous file dialog", Continue);
...@@ -90,7 +90,7 @@ void FileDialogTest::_fileDialogExpectedIncorrect_test(void) ...@@ -90,7 +90,7 @@ void FileDialogTest::_fileDialogExpectedIncorrect_test(void)
{ {
// Expecting save but get open dialog // Expecting save but get open dialog
setExpectedFileDialog(getSaveFileName, QStringList()); setExpectedFileDialog(getSaveFileName, QStringList());
QGCFileDialog::getOpenFileName(); QGCQFileDialog::getOpenFileName();
checkExpectedFileDialog(expectFailWrongFileDialog); checkExpectedFileDialog(expectFailWrongFileDialog);
// This is going to fail in cleanup as well since we have a missed file dialog // This is going to fail in cleanup as well since we have a missed file dialog
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
/// @file /// @file
/// @brief Unit test for QGCFileDialog catching mechanism. /// @brief Unit test for QGCQFileDialog catching mechanism.
/// ///
/// @author Don Gagne <don@thegagnes.com> /// @author Don Gagne <don@thegagnes.com>
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
#define UT_REGISTER_TEST(className) static UnitTestWrapper<className> className(#className); #define UT_REGISTER_TEST(className) static UnitTestWrapper<className> className(#className);
class QGCMessageBox; class QGCMessageBox;
class QGCFileDialog; class QGCQFileDialog;
class LinkManager; class LinkManager;
class MockLink; class MockLink;
class MainWindow; class MainWindow;
...@@ -58,7 +58,7 @@ public: ...@@ -58,7 +58,7 @@ public:
getSaveFileName getSaveFileName
}; };
/// @brief Sets up for an expected QGCFileDialog /// @brief Sets up for an expected QGCQFileDialog
/// @param type Type of expected file dialog /// @param type Type of expected file dialog
/// @param response Files to return from call. Multiple files only supported by getOpenFileNames /// @param response Files to return from call. Multiple files only supported by getOpenFileNames
void setExpectedFileDialog(enum FileDialogType type, QStringList response); void setExpectedFileDialog(enum FileDialogType type, QStringList response);
...@@ -67,7 +67,7 @@ public: ...@@ -67,7 +67,7 @@ public:
expectFailNoFailure = 1 << 0, ///< not expecting any failures expectFailNoFailure = 1 << 0, ///< not expecting any failures
expectFailNoDialog = 1 << 1, ///< expecting a failure due to no dialog displayed expectFailNoDialog = 1 << 1, ///< expecting a failure due to no dialog displayed
expectFailBadResponseButton = 1 << 2, ///< expecting a failure due to bad button response (QGCMessageBox only) expectFailBadResponseButton = 1 << 2, ///< expecting a failure due to bad button response (QGCMessageBox only)
expectFailWrongFileDialog = 1 << 3 ///< expecting one dialog type, got the wrong type (QGCFileDialog ony) expectFailWrongFileDialog = 1 << 3 ///< expecting one dialog type, got the wrong type (QGCQFileDialog ony)
}; };
/// @brief Check whether a message box was displayed and correctly responded to /// @brief Check whether a message box was displayed and correctly responded to
...@@ -134,7 +134,7 @@ private: ...@@ -134,7 +134,7 @@ private:
// This allows the private call to _messageBox // This allows the private call to _messageBox
friend class QGCMessageBox; friend class QGCMessageBox;
// When the app is running in unit test mode the QGCFileDialog methods are re-routed here. // When the app is running in unit test mode the QGCQFileDialog methods are re-routed here.
static QString _getExistingDirectory( static QString _getExistingDirectory(
QWidget* parent, QWidget* parent,
...@@ -167,7 +167,7 @@ private: ...@@ -167,7 +167,7 @@ private:
static QString _fileDialogResponseSingle(enum FileDialogType type); static QString _fileDialogResponseSingle(enum FileDialogType type);
// This allows the private calls to the file dialog methods // This allows the private calls to the file dialog methods
friend class QGCFileDialog; friend class QGCQFileDialog;
void _unitTestCalled(void); void _unitTestCalled(void);
static QList<QObject*>& _testList(void); static QList<QObject*>& _testList(void);
...@@ -178,7 +178,7 @@ private: ...@@ -178,7 +178,7 @@ private:
static QMessageBox::StandardButton _messageBoxResponseButton; ///< Response to next message box static QMessageBox::StandardButton _messageBoxResponseButton; ///< Response to next message box
static int _missedMessageBoxCount; ///< Count of message box not checked with call to messageBoxWasDisplayed static int _missedMessageBoxCount; ///< Count of message box not checked with call to messageBoxWasDisplayed
// Catch QGCFileDialog calls // Catch QGCQFileDialog calls
static bool _fileDialogRespondedTo; ///< File dialog was responded to static bool _fileDialogRespondedTo; ///< File dialog was responded to
static bool _fileDialogResponseSet; ///< true: _fileDialogResponse was set by a call to UnitTest::setExpectedFileDialog static bool _fileDialogResponseSet; ///< true: _fileDialogResponse was set by a call to UnitTest::setExpectedFileDialog
static QStringList _fileDialogResponse; ///< Response to next file dialog static QStringList _fileDialogResponse; ///< Response to next file dialog
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
#include "ui_QGCMAVLinkLogPlayer.h" #include "ui_QGCMAVLinkLogPlayer.h"
#include "QGCApplication.h" #include "QGCApplication.h"
#include "LinkManager.h" #include "LinkManager.h"
#include "QGCFileDialog.h" #include "QGCQFileDialog.h"
#include "QGCMessageBox.h" #include "QGCMessageBox.h"
QGCMAVLinkLogPlayer::QGCMAVLinkLogPlayer(QWidget *parent) : QGCMAVLinkLogPlayer::QGCMAVLinkLogPlayer(QWidget *parent) :
...@@ -69,7 +69,7 @@ void QGCMAVLinkLogPlayer::_selectLogFileForPlayback(void) ...@@ -69,7 +69,7 @@ void QGCMAVLinkLogPlayer::_selectLogFileForPlayback(void)
return; return;
} }
QString logFilename = QGCFileDialog::getOpenFileName( QString logFilename = QGCQFileDialog::getOpenFileName(
this, this,
tr("Load MAVLink Log File"), tr("Load MAVLink Log File"),
QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation),
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
#include "QGCUASFileView.h" #include "QGCUASFileView.h"
#include "FileManager.h" #include "FileManager.h"
#include "QGCFileDialog.h" #include "QGCQFileDialog.h"
#include "UAS.h" #include "UAS.h"
#include <QFileDialog> #include <QFileDialog>
...@@ -54,10 +54,10 @@ void QGCUASFileView::_downloadFile(void) ...@@ -54,10 +54,10 @@ void QGCUASFileView::_downloadFile(void)
_ui.statusText->clear(); _ui.statusText->clear();
QString downloadToHere = QGCFileDialog::getExistingDirectory(this, QString downloadToHere = QGCQFileDialog::getExistingDirectory(this,
"Download Directory", "Download Directory",
QDir::homePath(), QDir::homePath(),
QGCFileDialog::ShowDirsOnly | QGCFileDialog::DontResolveSymlinks); QGCQFileDialog::ShowDirsOnly | QGCQFileDialog::DontResolveSymlinks);
// And now download to this location // And now download to this location
...@@ -111,7 +111,7 @@ void QGCUASFileView::_uploadFile(void) ...@@ -111,7 +111,7 @@ void QGCUASFileView::_uploadFile(void)
item = item->parent(); item = item->parent();
} while (item); } while (item);
QString uploadFromHere = QGCFileDialog::getOpenFileName(this, "Upload File", QDir::homePath()); QString uploadFromHere = QGCQFileDialog::getOpenFileName(this, "Upload File", QDir::homePath());
_ui.statusText->setText(QString("Uploading: %1").arg(uploadFromHere)); _ui.statusText->setText(QString("Uploading: %1").arg(uploadFromHere));
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
#include "LogCompressor.h" #include "LogCompressor.h"
#include "QGC.h" #include "QGC.h"
#include "MG.h" #include "MG.h"
#include "QGCFileDialog.h" #include "QGCQFileDialog.h"
#include "QGCMessageBox.h" #include "QGCMessageBox.h"
#include "QGCApplication.h" #include "QGCApplication.h"
#include "SettingsManager.h" #include "SettingsManager.h"
...@@ -433,7 +433,7 @@ void LinechartWidget::startLogging() ...@@ -433,7 +433,7 @@ void LinechartWidget::startLogging()
// Let user select the log file name // Let user select the log file name
// QDate date(QDate::currentDate()); // QDate date(QDate::currentDate());
// QString("./pixhawk-log-" + date.toString("yyyy-MM-dd") + "-" + QString::number(logindex) + ".log") // QString("./pixhawk-log-" + date.toString("yyyy-MM-dd") + "-" + QString::number(logindex) + ".log")
QString fileName = QGCFileDialog::getSaveFileName(this, QString fileName = QGCQFileDialog::getSaveFileName(this,
tr("Save Log File"), tr("Save Log File"),
QStandardPaths::writableLocation(QStandardPaths::DesktopLocation), QStandardPaths::writableLocation(QStandardPaths::DesktopLocation),
tr("Log Files (*.log)"), tr("Log Files (*.log)"),
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment