Commit b3e13a6f authored by Don Gagne's avatar Don Gagne Committed by GitHub

Merge pull request #4575 from DonLakeFlyer/StringFact

FactSystem: String support
parents 0faac4c4 80ee708c
...@@ -17,11 +17,13 @@ QGCTextField { ...@@ -17,11 +17,13 @@ QGCTextField {
showHelp: true showHelp: true
property Fact fact: null property Fact fact: null
property string _validateString property string _validateString
property bool _factIsString: fact ? fact.type === FactMetaData.valueTypeString : false
// At this point all Facts are numeric // At this point all Facts are numeric
inputMethodHints: ScreenTools.isiOS ? inputMethodHints: (_factIsString || ScreenTools.isiOS) ?
Qt.ImhNone : // iOS numeric keyboard has not done button, we can't use it Qt.ImhNone : // iOS numeric keyboard has no done button, we can't use it
Qt.ImhFormattedNumbersOnly // Forces use of virtual numeric keyboard Qt.ImhFormattedNumbersOnly // Forces use of virtual numeric keyboard
onEditingFinished: { onEditingFinished: {
......
...@@ -7,12 +7,6 @@ ...@@ -7,12 +7,6 @@
* *
****************************************************************************/ ****************************************************************************/
/// @file
/// @brief Object which exposes a FactMetaData
///
/// @author Don Gagne <don@thegagnes.com>
#include "FactMetaData.h" #include "FactMetaData.h"
#include "SettingsManager.h" #include "SettingsManager.h"
#include "JsonHelper.h" #include "JsonHelper.h"
...@@ -157,7 +151,7 @@ QVariant FactMetaData::rawDefaultValue(void) const ...@@ -157,7 +151,7 @@ QVariant FactMetaData::rawDefaultValue(void) const
void FactMetaData::setRawDefaultValue(const QVariant& rawDefaultValue) void FactMetaData::setRawDefaultValue(const QVariant& rawDefaultValue)
{ {
if (_rawMin <= rawDefaultValue && rawDefaultValue <= _rawMax) { if (_type == valueTypeString || (_rawMin <= rawDefaultValue && rawDefaultValue <= _rawMax)) {
_rawDefaultValue = rawDefaultValue; _rawDefaultValue = rawDefaultValue;
_defaultValueAvailable = true; _defaultValueAvailable = true;
} else { } else {
...@@ -208,6 +202,8 @@ QVariant FactMetaData::_minForType(void) const ...@@ -208,6 +202,8 @@ QVariant FactMetaData::_minForType(void) const
return QVariant(-std::numeric_limits<float>::max()); return QVariant(-std::numeric_limits<float>::max());
case valueTypeDouble: case valueTypeDouble:
return QVariant(-std::numeric_limits<double>::max()); return QVariant(-std::numeric_limits<double>::max());
case valueTypeString:
return QVariant();
} }
// Make windows compiler happy, even switch is full cased // Make windows compiler happy, even switch is full cased
...@@ -233,6 +229,8 @@ QVariant FactMetaData::_maxForType(void) const ...@@ -233,6 +229,8 @@ QVariant FactMetaData::_maxForType(void) const
return QVariant(std::numeric_limits<float>::max()); return QVariant(std::numeric_limits<float>::max());
case valueTypeDouble: case valueTypeDouble:
return QVariant(std::numeric_limits<double>::max()); return QVariant(std::numeric_limits<double>::max());
case valueTypeString:
return QVariant();
} }
// Make windows compiler happy, even switch is full cased // Make windows compiler happy, even switch is full cased
...@@ -285,6 +283,10 @@ bool FactMetaData::convertAndValidateRaw(const QVariant& rawValue, bool convertO ...@@ -285,6 +283,10 @@ bool FactMetaData::convertAndValidateRaw(const QVariant& rawValue, bool convertO
} }
} }
break; break;
case FactMetaData::valueTypeString:
convertOk = true;
typedValue = QVariant(rawValue.toString());
break;
} }
if (!convertOk) { if (!convertOk) {
...@@ -340,6 +342,10 @@ bool FactMetaData::convertAndValidateCooked(const QVariant& cookedValue, bool co ...@@ -340,6 +342,10 @@ bool FactMetaData::convertAndValidateCooked(const QVariant& cookedValue, bool co
} }
} }
break; break;
case FactMetaData::valueTypeString:
convertOk = true;
typedValue = QVariant(cookedValue.toString());
break;
} }
if (!convertOk) { if (!convertOk) {
...@@ -556,7 +562,8 @@ FactMetaData::ValueType_t FactMetaData::stringToType(const QString& typeString, ...@@ -556,7 +562,8 @@ FactMetaData::ValueType_t FactMetaData::stringToType(const QString& typeString,
<< QStringLiteral("Uint32") << QStringLiteral("Uint32")
<< QStringLiteral("Int32") << QStringLiteral("Int32")
<< QStringLiteral("Float") << QStringLiteral("Float")
<< QStringLiteral("Double"); << QStringLiteral("Double")
<< QStringLiteral("String");
knownTypes << valueTypeUint8 knownTypes << valueTypeUint8
<< valueTypeInt8 << valueTypeInt8
...@@ -565,7 +572,8 @@ FactMetaData::ValueType_t FactMetaData::stringToType(const QString& typeString, ...@@ -565,7 +572,8 @@ FactMetaData::ValueType_t FactMetaData::stringToType(const QString& typeString,
<< valueTypeUint32 << valueTypeUint32
<< valueTypeInt32 << valueTypeInt32
<< valueTypeFloat << valueTypeFloat
<< valueTypeDouble; << valueTypeDouble
<< valueTypeString;
for (int i=0; i<knownTypeStrings.count(); i++) { for (int i=0; i<knownTypeStrings.count(); i++) {
if (knownTypeStrings[i].compare(typeString, Qt::CaseInsensitive) == 0) { if (knownTypeStrings[i].compare(typeString, Qt::CaseInsensitive) == 0) {
...@@ -599,7 +607,7 @@ size_t FactMetaData::typeToSize(ValueType_t type) ...@@ -599,7 +607,7 @@ size_t FactMetaData::typeToSize(ValueType_t type)
default: default:
qWarning() << "Unsupported fact value type" << type; qWarning() << "Unsupported fact value type" << type;
return 4; return 0;
} }
} }
...@@ -766,8 +774,8 @@ FactMetaData* FactMetaData::createFromJsonObject(const QJsonObject& json, QObjec ...@@ -766,8 +774,8 @@ FactMetaData* FactMetaData::createFromJsonObject(const QJsonObject& json, QObjec
// Validate key types // Validate key types
QStringList keys; QStringList keys;
QList<QJsonValue::Type> types; QList<QJsonValue::Type> types;
keys << _nameJsonKey << _decimalPlacesJsonKey << _typeJsonKey << _shortDescriptionJsonKey << _longDescriptionJsonKey << _unitsJsonKey << _defaultValueJsonKey << _minJsonKey << _maxJsonKey; keys << _nameJsonKey << _decimalPlacesJsonKey << _typeJsonKey << _shortDescriptionJsonKey << _longDescriptionJsonKey << _unitsJsonKey << _minJsonKey << _maxJsonKey;
types << QJsonValue::String << QJsonValue::Double << QJsonValue::String << QJsonValue::String << QJsonValue::String << QJsonValue::String << QJsonValue::Double << QJsonValue::Double << QJsonValue::Double; types << QJsonValue::String << QJsonValue::Double << QJsonValue::String << QJsonValue::String << QJsonValue::String << QJsonValue::String << QJsonValue::Double << QJsonValue::Double;
if (!JsonHelper::validateKeyTypes(json, keys, types, errorString)) { if (!JsonHelper::validateKeyTypes(json, keys, types, errorString)) {
qWarning() << errorString; qWarning() << errorString;
return new FactMetaData(valueTypeUint32, metaDataParent); return new FactMetaData(valueTypeUint32, metaDataParent);
...@@ -811,7 +819,7 @@ FactMetaData* FactMetaData::createFromJsonObject(const QJsonObject& json, QObjec ...@@ -811,7 +819,7 @@ FactMetaData* FactMetaData::createFromJsonObject(const QJsonObject& json, QObjec
metaData->setRawUnits(json[_unitsJsonKey].toString()); metaData->setRawUnits(json[_unitsJsonKey].toString());
} }
if (json.contains(_defaultValueJsonKey)) { if (json.contains(_defaultValueJsonKey)) {
metaData->setRawDefaultValue(json[_defaultValueJsonKey].toDouble()); metaData->setRawDefaultValue(json[_defaultValueJsonKey]);
} }
if (json.contains(_minJsonKey)) { if (json.contains(_minJsonKey)) {
metaData->setRawMin(json[_minJsonKey].toDouble()); metaData->setRawMin(json[_minJsonKey].toDouble());
......
...@@ -37,9 +37,12 @@ public: ...@@ -37,9 +37,12 @@ public:
valueTypeUint32, valueTypeUint32,
valueTypeInt32, valueTypeInt32,
valueTypeFloat, valueTypeFloat,
valueTypeDouble valueTypeDouble,
valueTypeString
} ValueType_t; } ValueType_t;
Q_ENUM(ValueType_t)
typedef QVariant (*Translator)(const QVariant& from); typedef QVariant (*Translator)(const QVariant& from);
FactMetaData(QObject* parent = NULL); FactMetaData(QObject* parent = NULL);
......
...@@ -30,6 +30,7 @@ void FactSystem::setToolbox(QGCToolbox *toolbox) ...@@ -30,6 +30,7 @@ void FactSystem::setToolbox(QGCToolbox *toolbox)
QGCTool::setToolbox(toolbox); QGCTool::setToolbox(toolbox);
qmlRegisterType<Fact> (_factSystemQmlUri, 1, 0, "Fact"); qmlRegisterType<Fact> (_factSystemQmlUri, 1, 0, "Fact");
qmlRegisterType<FactMetaData> (_factSystemQmlUri, 1, 0, "FactMetaData");
qmlRegisterType<FactPanelController>(_factSystemQmlUri, 1, 0, "FactPanelController"); qmlRegisterType<FactPanelController>(_factSystemQmlUri, 1, 0, "FactPanelController");
qmlRegisterUncreatableType<FactGroup>(_factSystemQmlUri, 1, 0, "FactGroup", "ReferenceOnly"); qmlRegisterUncreatableType<FactGroup>(_factSystemQmlUri, 1, 0, "FactGroup", "ReferenceOnly");
......
...@@ -55,6 +55,10 @@ QVariant APMParameterMetaData::_stringToTypedVariant(const QString& string, ...@@ -55,6 +55,10 @@ QVariant APMParameterMetaData::_stringToTypedVariant(const QString& string,
case FactMetaData::valueTypeDouble: case FactMetaData::valueTypeDouble:
convertTo = QVariant::Double; convertTo = QVariant::Double;
break; break;
case FactMetaData::valueTypeString:
qWarning() << "Internal Error: No support for string parameters";
convertTo = QVariant::String;
break;
} }
*convertOk = var.convert(convertTo); *convertOk = var.convert(convertTo);
......
...@@ -55,6 +55,10 @@ QVariant PX4ParameterMetaData::_stringToTypedVariant(const QString& string, Fact ...@@ -55,6 +55,10 @@ QVariant PX4ParameterMetaData::_stringToTypedVariant(const QString& string, Fact
case FactMetaData::valueTypeDouble: case FactMetaData::valueTypeDouble:
convertTo = QVariant::Double; convertTo = QVariant::Double;
break; break;
case FactMetaData::valueTypeString:
qWarning() << "Internal Error: No support for string parameters";
convertTo = QVariant::String;
break;
} }
*convertOk = var.convert(convertTo); *convertOk = var.convert(convertTo);
......
...@@ -21,7 +21,6 @@ static const char* kQmlGlobalKeyName = "QGCQml"; ...@@ -21,7 +21,6 @@ static const char* kQmlGlobalKeyName = "QGCQml";
const char* QGroundControlQmlGlobal::_virtualTabletJoystickKey = "VirtualTabletJoystick"; const char* QGroundControlQmlGlobal::_virtualTabletJoystickKey = "VirtualTabletJoystick";
const char* QGroundControlQmlGlobal::_baseFontPointSizeKey = "BaseDeviceFontPointSize"; const char* QGroundControlQmlGlobal::_baseFontPointSizeKey = "BaseDeviceFontPointSize";
const char* QGroundControlQmlGlobal::_missionAutoLoadDirKey = "MissionAutoLoadDir";
QGroundControlQmlGlobal::QGroundControlQmlGlobal(QGCApplication* app) QGroundControlQmlGlobal::QGroundControlQmlGlobal(QGCApplication* app)
: QGCTool(app) : QGCTool(app)
...@@ -227,15 +226,3 @@ bool QGroundControlQmlGlobal::linesIntersect(QPointF line1A, QPointF line1B, QPo ...@@ -227,15 +226,3 @@ bool QGroundControlQmlGlobal::linesIntersect(QPointF line1A, QPointF line1B, QPo
return QLineF(line1A, line1B).intersect(QLineF(line2A, line2B), &intersectPoint) == QLineF::BoundedIntersection && return QLineF(line1A, line1B).intersect(QLineF(line2A, line2B), &intersectPoint) == QLineF::BoundedIntersection &&
intersectPoint != line1A && intersectPoint != line1B; intersectPoint != line1A && intersectPoint != line1B;
} }
QString QGroundControlQmlGlobal::missionAutoLoadDir(void)
{
QSettings settings;
return settings.value(_missionAutoLoadDirKey).toString();
}
void QGroundControlQmlGlobal::setMissionAutoLoadDir(const QString& missionAutoLoadDir)
{
QSettings settings;
settings.setValue(_missionAutoLoadDirKey, missionAutoLoadDir);
}
...@@ -61,7 +61,6 @@ public: ...@@ -61,7 +61,6 @@ public:
Q_PROPERTY(bool isSaveLogPromptNotArmed READ isSaveLogPromptNotArmed WRITE setIsSaveLogPromptNotArmed NOTIFY isSaveLogPromptNotArmedChanged) Q_PROPERTY(bool isSaveLogPromptNotArmed READ isSaveLogPromptNotArmed WRITE setIsSaveLogPromptNotArmed NOTIFY isSaveLogPromptNotArmedChanged)
Q_PROPERTY(bool virtualTabletJoystick READ virtualTabletJoystick WRITE setVirtualTabletJoystick NOTIFY virtualTabletJoystickChanged) Q_PROPERTY(bool virtualTabletJoystick READ virtualTabletJoystick WRITE setVirtualTabletJoystick NOTIFY virtualTabletJoystickChanged)
Q_PROPERTY(qreal baseFontPointSize READ baseFontPointSize WRITE setBaseFontPointSize NOTIFY baseFontPointSizeChanged) Q_PROPERTY(qreal baseFontPointSize READ baseFontPointSize WRITE setBaseFontPointSize NOTIFY baseFontPointSizeChanged)
Q_PROPERTY(QString missionAutoLoadDir READ missionAutoLoadDir WRITE setMissionAutoLoadDir NOTIFY missionAutoLoadDirChanged STORED false)
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// MavLink Protocol // MavLink Protocol
...@@ -127,6 +126,8 @@ public: ...@@ -127,6 +126,8 @@ 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
FlightMapSettings* flightMapSettings () { return _flightMapSettings; } FlightMapSettings* flightMapSettings () { return _flightMapSettings; }
...@@ -174,9 +175,6 @@ public: ...@@ -174,9 +175,6 @@ public:
QString qgcVersion(void) const { return qgcApp()->applicationVersion(); } QString qgcVersion(void) const { return qgcApp()->applicationVersion(); }
static QString missionAutoLoadDir(void);
static void setMissionAutoLoadDir(const QString& missionAutoLoadDir);
// Overrides from QGCTool // Overrides from QGCTool
virtual void setToolbox(QGCToolbox* toolbox); virtual void setToolbox(QGCToolbox* toolbox);
...@@ -192,7 +190,6 @@ signals: ...@@ -192,7 +190,6 @@ signals:
void mavlinkSystemIDChanged (int id); void mavlinkSystemIDChanged (int id);
void flightMapPositionChanged (QGeoCoordinate flightMapPosition); void flightMapPositionChanged (QGeoCoordinate flightMapPosition);
void flightMapZoomChanged (double flightMapZoom); void flightMapZoomChanged (double flightMapZoom);
void missionAutoLoadDirChanged (QString missionAutoLoadDir);
private: private:
FlightMapSettings* _flightMapSettings; FlightMapSettings* _flightMapSettings;
...@@ -214,7 +211,6 @@ private: ...@@ -214,7 +211,6 @@ private:
static const char* _virtualTabletJoystickKey; static const char* _virtualTabletJoystickKey;
static const char* _baseFontPointSizeKey; static const char* _baseFontPointSizeKey;
static const char* _missionAutoLoadDirKey;
}; };
#endif #endif
...@@ -21,6 +21,7 @@ const char* SettingsManager::areaUnitsSettingsName = "Are ...@@ -21,6 +21,7 @@ const char* SettingsManager::areaUnitsSettingsName = "Are
const char* SettingsManager::speedUnitsSettingsName = "SpeedUnits"; const char* SettingsManager::speedUnitsSettingsName = "SpeedUnits";
const char* SettingsManager::batteryPercentRemainingAnnounceSettingsName = "batteryPercentRemainingAnnounce"; const char* SettingsManager::batteryPercentRemainingAnnounceSettingsName = "batteryPercentRemainingAnnounce";
const char* SettingsManager::defaultMissionItemAltitudeSettingsName = "DefaultMissionItemAltitude"; const char* SettingsManager::defaultMissionItemAltitudeSettingsName = "DefaultMissionItemAltitude";
const char* SettingsManager::missionAutoLoadDirSettingsName = "MissionAutoLoadDir";
SettingsManager::SettingsManager(QGCApplication* app) SettingsManager::SettingsManager(QGCApplication* app)
: QGCTool(app) : QGCTool(app)
...@@ -33,6 +34,7 @@ SettingsManager::SettingsManager(QGCApplication* app) ...@@ -33,6 +34,7 @@ SettingsManager::SettingsManager(QGCApplication* app)
, _speedUnitsFact(NULL) , _speedUnitsFact(NULL)
, _batteryPercentRemainingAnnounceFact(NULL) , _batteryPercentRemainingAnnounceFact(NULL)
, _defaultMissionItemAltitudeFact(NULL) , _defaultMissionItemAltitudeFact(NULL)
, _missionAutoLoadDirFact(NULL)
{ {
} }
...@@ -103,6 +105,15 @@ Fact* SettingsManager::defaultMissionItemAltitude(void) ...@@ -103,6 +105,15 @@ Fact* SettingsManager::defaultMissionItemAltitude(void)
return _defaultMissionItemAltitudeFact; return _defaultMissionItemAltitudeFact;
} }
Fact* SettingsManager::missionAutoLoadDir(void)
{
if (!_missionAutoLoadDirFact) {
_missionAutoLoadDirFact = _createSettingsFact(missionAutoLoadDirSettingsName);
}
return _missionAutoLoadDirFact;
}
Fact* SettingsManager::distanceUnits(void) Fact* SettingsManager::distanceUnits(void)
{ {
if (!_distanceUnitsFact) { if (!_distanceUnitsFact) {
......
...@@ -63,6 +63,7 @@ public: ...@@ -63,6 +63,7 @@ public:
Q_PROPERTY(Fact* speedUnits READ speedUnits CONSTANT) Q_PROPERTY(Fact* speedUnits READ speedUnits 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)
Fact* offlineEditingFirmwareType (void); Fact* offlineEditingFirmwareType (void);
Fact* offlineEditingVehicleType (void); Fact* offlineEditingVehicleType (void);
...@@ -71,8 +72,9 @@ public: ...@@ -71,8 +72,9 @@ public:
Fact* distanceUnits (void); Fact* distanceUnits (void);
Fact* areaUnits (void); Fact* areaUnits (void);
Fact* speedUnits (void); Fact* speedUnits (void);
Fact* batteryPercentRemainingAnnounce(void); Fact* batteryPercentRemainingAnnounce (void);
Fact* defaultMissionItemAltitude (void); Fact* defaultMissionItemAltitude (void);
Fact* missionAutoLoadDir (void);
// Override from QGCTool // Override from QGCTool
virtual void setToolbox(QGCToolbox *toolbox); virtual void setToolbox(QGCToolbox *toolbox);
...@@ -86,12 +88,7 @@ public: ...@@ -86,12 +88,7 @@ public:
static const char* speedUnitsSettingsName; static const char* speedUnitsSettingsName;
static const char* batteryPercentRemainingAnnounceSettingsName; static const char* batteryPercentRemainingAnnounceSettingsName;
static const char* defaultMissionItemAltitudeSettingsName; static const char* defaultMissionItemAltitudeSettingsName;
static const char* missionAutoLoadDirSettingsName;
public slots:
signals:
private slots:
private: private:
SettingsFact* _createSettingsFact(const QString& name); SettingsFact* _createSettingsFact(const QString& name);
...@@ -107,6 +104,7 @@ private: ...@@ -107,6 +104,7 @@ private:
SettingsFact* _speedUnitsFact; SettingsFact* _speedUnitsFact;
SettingsFact* _batteryPercentRemainingAnnounceFact; SettingsFact* _batteryPercentRemainingAnnounceFact;
SettingsFact* _defaultMissionItemAltitudeFact; SettingsFact* _defaultMissionItemAltitudeFact;
SettingsFact* _missionAutoLoadDirFact;
}; };
#endif #endif
...@@ -54,5 +54,12 @@ ...@@ -54,5 +54,12 @@
"min": 0.0, "min": 0.0,
"units": "meters", "units": "meters",
"decimalPlaces": 2 "decimalPlaces": 2
},
{
"name": "MissionAutoLoadDir",
"shortDescription": "Mission auto load directory",
"longDescription": "The directory from which missions will be automaticallu loaded onto a vehicle when it connects.",
"type": "string",
"defaultValue": ""
} }
] ]
...@@ -1579,7 +1579,7 @@ void Vehicle::_parametersReady(bool parametersReady) ...@@ -1579,7 +1579,7 @@ void Vehicle::_parametersReady(bool parametersReady)
{ {
if (parametersReady && !_missionManagerInitialRequestSent) { if (parametersReady && !_missionManagerInitialRequestSent) {
_missionManagerInitialRequestSent = true; _missionManagerInitialRequestSent = true;
QString missionAutoLoadDirPath = QGroundControlQmlGlobal::missionAutoLoadDir(); QString missionAutoLoadDirPath = _settingsManager->missionAutoLoadDir()->rawValue().toString();
if (missionAutoLoadDirPath.isEmpty()) { if (missionAutoLoadDirPath.isEmpty()) {
_missionManager->requestMissionItems(); _missionManager->requestMissionItems();
} else { } else {
......
...@@ -33,6 +33,7 @@ QGCView { ...@@ -33,6 +33,7 @@ QGCView {
anchors.margins: ScreenTools.defaultFontPixelWidth anchors.margins: ScreenTools.defaultFontPixelWidth
property Fact _percentRemainingAnnounce: QGroundControl.settingsManager.batteryPercentRemainingAnnounce property Fact _percentRemainingAnnounce: QGroundControl.settingsManager.batteryPercentRemainingAnnounce
property Fact _autoLoadDir: QGroundControl.settingsManager.missionAutoLoadDir
property real _labelWidth: ScreenTools.defaultFontPixelWidth * 15 property real _labelWidth: ScreenTools.defaultFontPixelWidth * 15
property real _editFieldWidth: ScreenTools.defaultFontPixelWidth * 30 property real _editFieldWidth: ScreenTools.defaultFontPixelWidth * 30
...@@ -331,30 +332,41 @@ QGCView { ...@@ -331,30 +332,41 @@ QGCView {
} }
} }
//----------------------------------------------------------------- //-----------------------------------------------------------------
//-- AutoLoad //-- Mission AutoLoad
Row { Row {
spacing: ScreenTools.defaultFontPixelWidth spacing: ScreenTools.defaultFontPixelWidth
QGCCheckBox { QGCCheckBox {
id: autoLoadCheckbox id: autoLoadCheckbox
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
text: qsTr("AutoLoad mission directory:") text: qsTr("AutoLoad mission directory:")
checked: QGroundControl.missionAutoLoadDir != "" checked: _autoLoadDir.valueString
onClicked: { onClicked: {
autoLoadDir.enabled = checked if (checked) {
if (!checked) { _autoLoadDir.rawValue = QGroundControl.urlToLocalFile(autoloadDirPicker.shortcuts.home)
QGroundControl.missionAutoLoadDir = "" } else {
autoLoadDir.text = "" _autoLoadDir.rawValue = ""
} }
} }
} }
QGCTextField { FactTextField {
id: autoLoadDir id: autoLoadDirField
width: _editFieldWidth width: _editFieldWidth
enabled: autoLoadCheckbox.checked enabled: autoLoadCheckbox.checked
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
text: QGroundControl.missionAutoLoadDir fact: _autoLoadDir
onEditingFinished: QGroundControl.missionAutoLoadDir = text }
QGCButton {
text: qsTr("Browse")
onClicked: autoloadDirPicker.visible = true
FileDialog {
id: autoloadDirPicker
title: qsTr("Choose the location of mission file.")
folder: shortcuts.home
selectFolder: true
onAccepted: _autoLoadDir.rawValue = QGroundControl.urlToLocalFile(autoloadDirPicker.fileUrl)
}
} }
} }
//----------------------------------------------------------------- //-----------------------------------------------------------------
...@@ -561,7 +573,7 @@ QGCView { ...@@ -561,7 +573,7 @@ QGCView {
readOnly: true readOnly: true
text: QGroundControl.videoManager.videoSavePath text: QGroundControl.videoManager.videoSavePath
} }
Button { QGCButton {
text: "Browse" text: "Browse"
onClicked: fileDialog.visible = true onClicked: fileDialog.visible = 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