Unverified Commit a99d190a authored by Gus Grubba's avatar Gus Grubba Committed by GitHub

Merge pull request #6606 from mavlink/syncRework

Turn "Sync" menu into a proper "File" menu
parents d15e422c e163d336
......@@ -280,6 +280,7 @@ void PlanMasterController::loadFromFile(const QString& filename)
return;
}
QFileInfo fileInfo(filename);
QFile file(filename);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
......@@ -288,8 +289,8 @@ void PlanMasterController::loadFromFile(const QString& filename)
return;
}
QString fileExtension(".%1");
if (filename.endsWith(fileExtension.arg(AppSettings::planFileExtension))) {
bool success = false;
if(fileInfo.suffix() == AppSettings::planFileExtension) {
QJsonDocument jsonDoc;
QByteArray bytes = file.readAll();
......@@ -319,17 +320,31 @@ void PlanMasterController::loadFromFile(const QString& filename)
!_geoFenceController.load(json[_jsonGeoFenceObjectKey].toObject(), errorString) ||
!_rallyPointController.load(json[_jsonRallyPointsObjectKey].toObject(), errorString)) {
qgcApp()->showMessage(errorMessage.arg(errorString));
} else {
success = true;
}
} else if (filename.endsWith(fileExtension.arg(AppSettings::missionFileExtension))) {
} else if (fileInfo.suffix() == AppSettings::missionFileExtension) {
if (!_missionController.loadJsonFile(file, errorString)) {
qgcApp()->showMessage(errorMessage.arg(errorString));
} else {
success = true;
}
} else if (filename.endsWith(fileExtension.arg(AppSettings::waypointsFileExtension)) ||
filename.endsWith(fileExtension.arg(QStringLiteral("txt")))) {
} else if (fileInfo.suffix() == AppSettings::waypointsFileExtension || fileInfo.suffix() == QStringLiteral("txt")) {
if (!_missionController.loadTextFile(file, errorString)) {
qgcApp()->showMessage(errorMessage.arg(errorString));
} else {
success = true;
}
} else {
//-- TODO: What then?
}
if(success){
_currentPlanFile.sprintf("%s/%s.%s", fileInfo.path().toLocal8Bit().data(), fileInfo.completeBaseName().toLocal8Bit().data(), AppSettings::planFileExtension);
} else {
_currentPlanFile.clear();
}
emit currentPlanFileChanged();
if (!offline()) {
setDirty(true);
......@@ -352,6 +367,14 @@ QJsonDocument PlanMasterController::saveToJson()
return QJsonDocument(planJson);
}
void
PlanMasterController::saveToCurrent()
{
if(!_currentPlanFile.isEmpty()) {
saveToFile(_currentPlanFile);
}
}
void PlanMasterController::saveToFile(const QString& filename)
{
if (filename.isEmpty()) {
......@@ -367,9 +390,15 @@ void PlanMasterController::saveToFile(const QString& filename)
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
qgcApp()->showMessage(tr("Plan save error %1 : %2").arg(filename).arg(file.errorString()));
_currentPlanFile.clear();
emit currentPlanFileChanged();
} else {
QJsonDocument saveDoc = saveToJson();
file.write(saveDoc.toJson());
if(_currentPlanFile != planFilename) {
_currentPlanFile = planFilename;
emit currentPlanFileChanged();
}
}
// Only clear dirty bit if we are offline
......@@ -411,6 +440,8 @@ void PlanMasterController::removeAll(void)
_missionController.setDirty(false);
_geoFenceController.setDirty(false);
_rallyPointController.setDirty(false);
_currentPlanFile.clear();
emit currentPlanFileChanged();
}
}
......
......@@ -40,6 +40,7 @@ public:
Q_PROPERTY(bool dirty READ dirty WRITE setDirty NOTIFY dirtyChanged) ///< true: Unsaved/sent changes are present, false: no changes since last save/send
Q_PROPERTY(QString fileExtension READ fileExtension CONSTANT) ///< File extension for missions
Q_PROPERTY(QString kmlFileExtension READ kmlFileExtension CONSTANT)
Q_PROPERTY(QString currentPlanFile READ currentPlanFile NOTIFY currentPlanFileChanged)
///< kml file extension for missions
Q_PROPERTY(QStringList loadNameFilters READ loadNameFilters CONSTANT) ///< File filter list loading plan files
Q_PROPERTY(QStringList saveNameFilters READ saveNameFilters CONSTANT) ///< File filter list saving plan files
......@@ -63,6 +64,7 @@ public:
Q_INVOKABLE void loadFromVehicle(void);
Q_INVOKABLE void sendToVehicle(void);
Q_INVOKABLE void loadFromFile(const QString& filename);
Q_INVOKABLE void saveToCurrent();
Q_INVOKABLE void saveToFile(const QString& filename);
Q_INVOKABLE void saveToKml(const QString& filename);
Q_INVOKABLE void removeAll(void); ///< Removes all from controller only, synce required to remove from vehicle
......@@ -79,6 +81,7 @@ public:
void setDirty (bool dirty);
QString fileExtension (void) const;
QString kmlFileExtension(void) const;
QString currentPlanFile (void) const { return _currentPlanFile; }
QStringList loadNameFilters (void) const;
QStringList saveNameFilters (void) const;
QStringList fileKmlFilters (void) const;
......@@ -93,6 +96,7 @@ signals:
void syncInProgressChanged (void);
void dirtyChanged (bool dirty);
void offlineChanged (bool offlineEditing);
void currentPlanFileChanged ();
private slots:
void _activeVehicleChanged(Vehicle* activeVehicle);
......@@ -118,6 +122,7 @@ private:
bool _loadRallyPoints;
bool _sendGeoFence;
bool _sendRallyPoints;
QString _currentPlanFile;
static const int _planFileVersion;
static const char* _planFileType;
......
This diff is collapsed.
......@@ -71,11 +71,11 @@ Item {
}
function _calcPositions() {
var panelComponentWidth = panelLoader.item.width
var panelComponentWidth = panelLoader.item.width
var panelComponentHeight = panelLoader.item.height
dropDownItem.width = panelComponentWidth + _dropMarginX2 + _arrowPointWidth
dropDownItem.height = panelComponentHeight + _dropMarginX2
dropDownItem.width = panelComponentWidth + (_dropMarginX2 * 2) + _arrowPointWidth
dropDownItem.height = panelComponentHeight + (_dropMarginX2 * 2)
dropDownItem.x = _dropEdgeTopPoint.x + _dropMargin
dropDownItem.y = _dropEdgeTopPoint.y -(dropDownItem.height / 2) + radius
......
......@@ -16,7 +16,7 @@ import QGroundControl.Palette 1.0
Rectangle {
id: _root
color: qgcPal.window
width: ScreenTools.isMobile ? ScreenTools.minTouchPixels : ScreenTools.defaultFontPixelWidth * 6
width: ScreenTools.isMobile ? ScreenTools.minTouchPixels : ScreenTools.defaultFontPixelWidth * 7
height: buttonStripColumn.height + (buttonStripColumn.anchors.margins * 2)
radius: _radius
border.width: 1
......@@ -133,7 +133,7 @@ Rectangle {
id: scope
anchors.left: parent.left
anchors.right: parent.right
height: width
height: width * 0.8
Rectangle {
anchors.fill: parent
......@@ -141,9 +141,11 @@ Rectangle {
QGCColoredImage {
id: button
anchors.fill: parent
height: parent.height
width: height
anchors.centerIn: parent
source: _source
sourceSize.height: parent.height
sourceSize.height: height
fillMode: Image.PreserveAspectFit
mipmap: true
smooth: true
......
......@@ -49,6 +49,7 @@ public:
Q_PROPERTY(bool guidedActionsRequireRCRSSI READ guidedActionsRequireRCRSSI CONSTANT)
Q_PROPERTY(bool showMissionAbsoluteAltitude READ showMissionAbsoluteAltitude NOTIFY showMissionAbsoluteAltitudeChanged)
Q_PROPERTY(bool showSimpleMissionStart READ showSimpleMissionStart NOTIFY showSimpleMissionStartChanged)
Q_PROPERTY(bool disableVehicleConnection READ disableVehicleConnection CONSTANT)
/// Should QGC hide its settings menu and colapse it into one single menu (Settings and Vehicle Setup)?
/// @return true if QGC should consolidate both menus into one.
......@@ -90,6 +91,7 @@ public:
virtual bool showOfflineMapImport () const { return true; }
virtual bool showMissionAbsoluteAltitude () const { return true; }
virtual bool showSimpleMissionStart () const { return false; }
virtual bool disableVehicleConnection () const { return false; } ///< true: vehicle connection is disabled
#if defined(__mobile__)
virtual bool useMobileFileDialog () const { return true;}
......
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