diff --git a/src/MissionManager/RallyPointController.cc b/src/MissionManager/RallyPointController.cc index a1a7126a02d9960ca90dcdda72800cfbfc3a005d..5a6a090aad67ec12f940403445342dd6e8b55585 100644 --- a/src/MissionManager/RallyPointController.cc +++ b/src/MissionManager/RallyPointController.cc @@ -20,6 +20,7 @@ #include "ParameterManager.h" #include "JsonHelper.h" #include "SimpleMissionItem.h" +#include "QGroundControlQmlGlobal.h" #ifndef __mobile__ #include "QGCFileDialog.h" @@ -266,7 +267,7 @@ void RallyPointController::addPoint(QGeoCoordinate point) if (_points.count()) { defaultAlt = qobject_cast(_points[_points.count() - 1])->coordinate().altitude(); } else { - defaultAlt = SimpleMissionItem::defaultAltitude; + defaultAlt = QGroundControlQmlGlobal::defaultMissionItemAltitude()->rawValue().toDouble(); } point.setAltitude(defaultAlt); RallyPoint* newPoint = new RallyPoint(point, this); diff --git a/src/MissionManager/SimpleMissionItem.cc b/src/MissionManager/SimpleMissionItem.cc index ccfdde11d12c4e08a1136bfa4d1a6c8b0ab554c2..355a59c0ac448ee1b167a96e8f445ca06c8a5735 100644 --- a/src/MissionManager/SimpleMissionItem.cc +++ b/src/MissionManager/SimpleMissionItem.cc @@ -17,8 +17,7 @@ #include "JsonHelper.h" #include "MissionCommandTree.h" #include "MissionCommandUIInfo.h" - -const double SimpleMissionItem::defaultAltitude = 50.0; +#include "QGroundControlQmlGlobal.h" FactMetaData* SimpleMissionItem::_altitudeMetaData = NULL; FactMetaData* SimpleMissionItem::_commandMetaData = NULL; @@ -528,7 +527,7 @@ void SimpleMissionItem::_syncFrameToAltitudeRelativeToHome(void) void SimpleMissionItem::setDefaultsForCommand(void) { // We set these global defaults first, then if there are param defaults they will get reset - _missionItem.setParam7(defaultAltitude); + _missionItem.setParam7(QGroundControlQmlGlobal::defaultMissionItemAltitude()->rawValue().toDouble()); MAV_CMD command = (MAV_CMD)this->command(); const MissionCommandUIInfo* uiInfo = _commandTree->getUIInfo(_vehicle, command); diff --git a/src/MissionManager/SimpleMissionItem.h b/src/MissionManager/SimpleMissionItem.h index 7efca0a6423d1b200a79eb9892b03254f239e7ae..e3d508ae92d458531494095c7a5cf1864a1cfd8f 100644 --- a/src/MissionManager/SimpleMissionItem.h +++ b/src/MissionManager/SimpleMissionItem.h @@ -75,8 +75,6 @@ public: bool relativeAltitude(void) { return _missionItem.frame() == MAV_FRAME_GLOBAL_RELATIVE_ALT; } - static const double defaultAltitude; - MissionItem& missionItem(void) { return _missionItem; } // Overrides from VisualMissionItem diff --git a/src/MissionManager/SimpleMissionItemTest.cc b/src/MissionManager/SimpleMissionItemTest.cc index 097fbec3d302fd4b5784dd37a99d3d0603d924ff..a5172881579269714a422cf3d3e7aecb9c209f50 100644 --- a/src/MissionManager/SimpleMissionItemTest.cc +++ b/src/MissionManager/SimpleMissionItemTest.cc @@ -11,6 +11,7 @@ #include "SimpleMissionItemTest.h" #include "SimpleMissionItem.h" #include "QGCApplication.h" +#include "QGroundControlQmlGlobal.h" const SimpleMissionItemTest::ItemInfo_t SimpleMissionItemTest::_rgItemInfo[] = { { MAV_CMD_NAV_WAYPOINT, MAV_FRAME_GLOBAL_RELATIVE_ALT }, @@ -139,7 +140,7 @@ void SimpleMissionItemTest::_testDefaultValues(void) item.missionItem().setCommand(MAV_CMD_NAV_WAYPOINT); item.missionItem().setFrame(MAV_FRAME_GLOBAL_RELATIVE_ALT); - QCOMPARE(item.missionItem().param7(), SimpleMissionItem::defaultAltitude); + QCOMPARE(item.missionItem().param7(), QGroundControlQmlGlobal::defaultMissionItemAltitude()->rawValue().toDouble()); } void SimpleMissionItemTest::_testSignals(void) @@ -224,7 +225,7 @@ void SimpleMissionItemTest::_testSignals(void) // dirtyChanged // Check that changing to the same coordinate does not signal - simpleMissionItem.setCoordinate(QGeoCoordinate(50.1234567, 60.1234567, SimpleMissionItem::defaultAltitude)); + simpleMissionItem.setCoordinate(QGeoCoordinate(50.1234567, 60.1234567, QGroundControlQmlGlobal::defaultMissionItemAltitude()->rawValue().toDouble())); QVERIFY(multiSpy->checkNoSignals()); // Check that actually changing coordinate signals correctly diff --git a/src/QmlControls/QGroundControlQmlGlobal.cc b/src/QmlControls/QGroundControlQmlGlobal.cc index 19f0c8ced8cb92de2492bc4524564ceb82d58f89..fab97270ec637f5673ee58b987ae0082c48e41b3 100644 --- a/src/QmlControls/QGroundControlQmlGlobal.cc +++ b/src/QmlControls/QGroundControlQmlGlobal.cc @@ -30,6 +30,7 @@ SettingsFact* QGroundControlQmlGlobal::_offlineEditingVehicleTypeFact = SettingsFact* QGroundControlQmlGlobal::_offlineEditingCruiseSpeedFact = NULL; SettingsFact* QGroundControlQmlGlobal::_offlineEditingHoverSpeedFact = NULL; SettingsFact* QGroundControlQmlGlobal::_batteryPercentRemainingAnnounceFact = NULL; +SettingsFact* QGroundControlQmlGlobal::_defaultMissionItemAltitudeFact = NULL; const char* QGroundControlQmlGlobal::_virtualTabletJoystickKey = "VirtualTabletJoystick"; const char* QGroundControlQmlGlobal::_baseFontPointSizeKey = "BaseDeviceFontPointSize"; @@ -339,6 +340,15 @@ Fact* QGroundControlQmlGlobal::batteryPercentRemainingAnnounce(void) return _batteryPercentRemainingAnnounceFact; } +Fact* QGroundControlQmlGlobal::defaultMissionItemAltitude(void) +{ + if (!_defaultMissionItemAltitudeFact) { + _defaultMissionItemAltitudeFact = _createSettingsFact(QStringLiteral("DefaultMissionItemAltitude")); + } + + return _defaultMissionItemAltitudeFact; +} + int QGroundControlQmlGlobal::supportedFirmwareCount() { return _firmwarePluginManager->knownFirmwareTypes().count(); diff --git a/src/QmlControls/QGroundControlQmlGlobal.h b/src/QmlControls/QGroundControlQmlGlobal.h index 47a46e647e4f5f445d0d5d1743b8b9ede42f7268..7a912e5746427ef4a0c3de0a95af9f8d7b257fe2 100644 --- a/src/QmlControls/QGroundControlQmlGlobal.h +++ b/src/QmlControls/QGroundControlQmlGlobal.h @@ -99,6 +99,7 @@ public: Q_PROPERTY(Fact* areaUnits READ areaUnits CONSTANT) Q_PROPERTY(Fact* speedUnits READ speedUnits CONSTANT) Q_PROPERTY(Fact* batteryPercentRemainingAnnounce READ batteryPercentRemainingAnnounce CONSTANT) + Q_PROPERTY(Fact* defaultMissionItemAltitude READ defaultMissionItemAltitude CONSTANT) Q_PROPERTY(int supportedFirmwareCount READ supportedFirmwareCount CONSTANT) Q_PROPERTY(QGeoCoordinate lastKnownHomePosition READ lastKnownHomePosition CONSTANT) @@ -196,6 +197,7 @@ public: static Fact* areaUnits (void); static Fact* speedUnits (void); static Fact* batteryPercentRemainingAnnounce(void); + static Fact* defaultMissionItemAltitude (void); int supportedFirmwareCount (); @@ -267,6 +269,7 @@ private: static SettingsFact* _speedUnitsFact; static FactMetaData* _speedUnitsMetaData; static SettingsFact* _batteryPercentRemainingAnnounceFact; + static SettingsFact* _defaultMissionItemAltitudeFact; static const char* _virtualTabletJoystickKey; static const char* _baseFontPointSizeKey; diff --git a/src/QmlControls/QGroundControlQmlGlobal.json b/src/QmlControls/QGroundControlQmlGlobal.json index f48c1b2a1c49586d069a7f8cfc81cfc71ebb0f9f..e58a6e2a6ab158e81cc631f0d180f0c98b7d634d 100644 --- a/src/QmlControls/QGroundControlQmlGlobal.json +++ b/src/QmlControls/QGroundControlQmlGlobal.json @@ -44,5 +44,15 @@ "units": "%", "min": 0, "max": 100 +}, +{ + "name": "DefaultMissionItemAltitude", + "shortDescription": "Default value for altitude", + "longDescription": "This value specifies the default altitude for new items added to a mission.", + "type": "double", + "defaultValue": 50.0, + "min": 0.0, + "units": "meters", + "decimalPlaces": 2 } ] diff --git a/src/ui/preferences/GeneralSettings.qml b/src/ui/preferences/GeneralSettings.qml index 59618eafe7b24d4f914c1ca254a9be8d36c05d4f..a02c919ebec4ba90296215b59c2ac661b95f62a8 100644 --- a/src/ui/preferences/GeneralSettings.qml +++ b/src/ui/preferences/GeneralSettings.qml @@ -206,6 +206,28 @@ QGCView { } } //----------------------------------------------------------------- + //-- Palette Styles + Row { + spacing: ScreenTools.defaultFontPixelWidth + QGCLabel { + anchors.baseline: paletteCombo.baseline + text: qsTr("UI Style:") + width: _labelWidth + } + QGCComboBox { + id: paletteCombo + width: _editFieldWidth + model: [ qsTr("Indoor"), qsTr("Outdoor") ] + currentIndex: QGroundControl.isDarkStyle ? 0 : 1 + onActivated: { + if (index != -1) { + currentIndex = index + QGroundControl.isDarkStyle = index === 0 ? true : false + } + } + } + } + //----------------------------------------------------------------- //-- Audio preferences QGCCheckBox { text: qsTr("Mute all audio output") @@ -295,6 +317,19 @@ QGCView { visible: QGroundControl.corePlugin.options.enableVirtualJoystick } //----------------------------------------------------------------- + //-- Default mission item altitude + Row { + spacing: ScreenTools.defaultFontPixelWidth + QGCLabel { + anchors.baseline: defaultItemAltitudeField.baseline + text: qsTr("Default mission item altitude:") + } + FactTextField { + id: defaultItemAltitudeField + fact: QGroundControl.defaultMissionItemAltitude + } + } + //----------------------------------------------------------------- //-- AutoLoad Row { spacing: ScreenTools.defaultFontPixelWidth @@ -358,28 +393,6 @@ QGCView { } } } - //----------------------------------------------------------------- - //-- Palette Styles - Row { - spacing: ScreenTools.defaultFontPixelWidth - QGCLabel { - anchors.baseline: paletteCombo.baseline - text: qsTr("UI Style:") - width: _labelWidth - } - QGCComboBox { - id: paletteCombo - width: _editFieldWidth - model: [ qsTr("Indoor"), qsTr("Outdoor") ] - currentIndex: QGroundControl.isDarkStyle ? 0 : 1 - onActivated: { - if (index != -1) { - currentIndex = index - QGroundControl.isDarkStyle = index === 0 ? true : false - } - } - } - } } } //-----------------------------------------------------------------