Commit 8587ff69 authored by Don Gagne's avatar Don Gagne

Make FirmwarePlugin::supportedCommands actually work

parent d07bd665
......@@ -662,19 +662,21 @@ INCLUDEPATH += \
HEADERS += \
src/FactSystem/Fact.h \
src/FactSystem/FactControls/FactPanelController.h \
src/FactSystem/FactMetaData.h \
src/FactSystem/FactSystem.h \
src/FactSystem/FactValidator.h \
src/FactSystem/ParameterLoader.h \
src/FactSystem/FactControls/FactPanelController.h \
src/FactSystem/SettingsFact.h \
SOURCES += \
src/FactSystem/Fact.cc \
src/FactSystem/FactControls/FactPanelController.cc \
src/FactSystem/FactMetaData.cc \
src/FactSystem/FactSystem.cc \
src/FactSystem/FactValidator.cc \
src/FactSystem/ParameterLoader.cc \
src/FactSystem/FactControls/FactPanelController.cc \
src/FactSystem/SettingsFact.cc \
#-------------------------------------------------------------------------------------
# Video Streaming
......
......@@ -216,12 +216,7 @@ QList<MAV_CMD> PX4FirmwarePlugin::supportedMissionCommands(void)
<< MAV_CMD_NAV_LOITER_UNLIM << MAV_CMD_NAV_LOITER_TURNS << MAV_CMD_NAV_LOITER_TIME
<< MAV_CMD_NAV_RETURN_TO_LAUNCH << MAV_CMD_NAV_LAND << MAV_CMD_NAV_TAKEOFF
<< MAV_CMD_NAV_ROI
<< MAV_CMD_NAV_GUIDED_ENABLE
<< MAV_CMD_DO_SET_ROI << MAV_CMD_DO_GUIDED_LIMITS << MAV_CMD_DO_JUMP << MAV_CMD_DO_CHANGE_SPEED << MAV_CMD_DO_SET_CAM_TRIGG_DIST
<< MAV_CMD_DO_SET_RELAY << MAV_CMD_DO_REPEAT_RELAY
<< MAV_CMD_DO_SET_SERVO << MAV_CMD_DO_REPEAT_SERVO
<< MAV_CMD_DO_DIGICAM_CONFIGURE << MAV_CMD_DO_DIGICAM_CONTROL
<< MAV_CMD_DO_MOUNT_CONTROL
<< MAV_CMD_CONDITION_DELAY << MAV_CMD_CONDITION_CHANGE_ALT << MAV_CMD_CONDITION_DISTANCE << MAV_CMD_CONDITION_YAW;
<< MAV_CMD_DO_JUMP
<< MAV_CMD_CONDITION_DELAY;
return list;
}
......@@ -22,6 +22,10 @@ This file is part of the QGROUNDCONTROL project
#include "MissionCommands.h"
#include "FactMetaData.h"
#include "Vehicle.h"
#include "FirmwarePluginManager.h"
#include "QGCApplication.h"
#include "QGroundControlQmlGlobal.h"
#include <QStringList>
#include <QJsonDocument>
......@@ -60,7 +64,14 @@ const QString MissionCommands::_degreesUnits (QStringLiteral("deg
MissionCommands::MissionCommands(QGCApplication* app)
: QGCTool(app)
{
}
void MissionCommands::setToolbox(QGCToolbox* toolbox)
{
QGCTool::setToolbox(toolbox);
_loadMavCmdInfoJson();
_createFirmwareSpecificLists();
}
bool MissionCommands::_validateKeyTypes(QJsonObject& jsonObject, const QStringList& keys, const QList<QJsonValue::Type>& types)
......@@ -165,7 +176,6 @@ void MissionCommands::_loadMavCmdInfoJson(void)
}
_mavCmdInfoMap[mavCmdInfo->_command] = mavCmdInfo;
_commandList.append(mavCmdInfo);
// Read params
......@@ -234,16 +244,13 @@ void MissionCommands::_loadMavCmdInfoJson(void)
if (mavCmdInfo->_command != MAV_CMD_NAV_LAST) {
// Don't add fake home postion command to categories
if (!_categories.contains(mavCmdInfo->category()) && mavCmdInfo->friendlyEdit()) {
// Only friendly edit commands go in category list
qCDebug(MissionCommandsLog) << "Adding new category";
_categories.append(mavCmdInfo->category());
_categoryToMavCmdInfoListMap[mavCmdInfo->category()] = new QmlObjectListModel(this);
}
if (mavCmdInfo->friendlyEdit()) {
// Only friendly edit commands go in category list
_categoryToMavCmdInfoListMap[mavCmdInfo->category()]->append(mavCmdInfo);
// Only friendly edit commands go in category list. We use MAV_AUTOPILOT_GENERIC key to store full list.
if (!_categoryToMavCmdInfoListMap.contains(MAV_AUTOPILOT_GENERIC) || !_categoryToMavCmdInfoListMap[MAV_AUTOPILOT_GENERIC].contains(mavCmdInfo->category())) {
qCDebug(MissionCommandsLog) << "Adding new category";
_categoryToMavCmdInfoListMap[MAV_AUTOPILOT_GENERIC][mavCmdInfo->category()] = new QmlObjectListModel(this);
}
_categoryToMavCmdInfoListMap[MAV_AUTOPILOT_GENERIC][mavCmdInfo->category()]->append(mavCmdInfo);
}
}
......@@ -259,3 +266,64 @@ void MissionCommands::_loadMavCmdInfoJson(void)
}
}
}
MAV_AUTOPILOT MissionCommands::_firmwareTypeFromVehicle(Vehicle* vehicle) const
{
if (vehicle) {
return vehicle->firmwareType();
} else {
QSettings settings;
// FIXME: Hack duplicated code from QGroundControlQmlGlobal. Had to do this for now since
// QGroundControlQmlGlobal is not available from C++ side.
return (MAV_AUTOPILOT)settings.value("OfflineEditingFirmwareType", MAV_AUTOPILOT_ARDUPILOTMEGA).toInt();
}
}
QString MissionCommands::categoryFromCommand(MavlinkQmlSingleton::Qml_MAV_CMD command) const
{
return _mavCmdInfoMap[(MAV_CMD)command]->category();
}
QVariant MissionCommands::getCommandsForCategory(Vehicle* vehicle, const QString& category) const
{
return QVariant::fromValue(_categoryToMavCmdInfoListMap[_firmwareTypeFromVehicle(vehicle)][category]);
}
const QStringList MissionCommands::categories(Vehicle* vehicle) const
{
QStringList list;
foreach (QString category, _categoryToMavCmdInfoListMap[_firmwareTypeFromVehicle(vehicle)].keys()) {
list << category;
}
return list;
}
void MissionCommands::_createFirmwareSpecificLists(void)
{
QList<MAV_AUTOPILOT> firmwareList;
firmwareList << MAV_AUTOPILOT_PX4 << MAV_AUTOPILOT_ARDUPILOTMEGA;
foreach (MAV_AUTOPILOT firmwareType, firmwareList) {
FirmwarePlugin* plugin = _toolbox->firmwarePluginManager()->firmwarePluginForAutopilot(firmwareType, MAV_TYPE_QUADROTOR);
QList<MAV_CMD> cmdList = plugin->supportedMissionCommands();
foreach (MAV_CMD command, cmdList) {
MavCmdInfo* mavCmdInfo = _mavCmdInfoMap[command];
if (mavCmdInfo->friendlyEdit()) {
if (!_categoryToMavCmdInfoListMap.contains(firmwareType) || !_categoryToMavCmdInfoListMap[firmwareType].contains(mavCmdInfo->category())) {
qCDebug(MissionCommandsLog) << "Adding new category" << firmwareType;
_categoryToMavCmdInfoListMap[firmwareType][mavCmdInfo->category()] = new QmlObjectListModel(this);
}
_categoryToMavCmdInfoListMap[firmwareType][mavCmdInfo->category()]->append(mavCmdInfo);
} else {
qWarning() << "Attempt to add non friendly edit supported command";
}
}
}
}
......@@ -38,6 +38,7 @@
Q_DECLARE_LOGGING_CATEGORY(MissionCommandsLog)
class MissionCommands;
class Vehicle;
class MavCmdParamInfo : public QObject {
......@@ -129,17 +130,15 @@ class MissionCommands : public QGCTool
public:
MissionCommands(QGCApplication* app);
Q_PROPERTY(QStringList categories READ categories CONSTANT)
Q_PROPERTY(const QmlObjectListModel* commands READ commands CONSTANT)
Q_INVOKABLE QString categoryFromCommand(MavlinkQmlSingleton::Qml_MAV_CMD command) { return _mavCmdInfoMap[(MAV_CMD)command]->category(); }
Q_INVOKABLE const QVariant getCommandsForCategory(const QString& category) const { return QVariant::fromValue(_categoryToMavCmdInfoListMap[category]); }
const QStringList categories (void) const { return _categories; }
const QmlObjectListModel* commands (void) const { return &_commandList; }
Q_INVOKABLE const QStringList categories (Vehicle* vehicle) const;
Q_INVOKABLE QString categoryFromCommand (MavlinkQmlSingleton::Qml_MAV_CMD command) const;
Q_INVOKABLE QVariant getCommandsForCategory (Vehicle* vehicle, const QString& category) const;
const QMap<MAV_CMD, MavCmdInfo*>& commandInfoMap(void) const { return _mavCmdInfoMap; };
// Overrides from QGCTool
virtual void setToolbox(QGCToolbox* toolbox);
static const QString _degreesUnits;
static const QString _degreesConvertUnits;
......@@ -147,14 +146,14 @@ signals:
private:
void _loadMavCmdInfoJson(void);
void _createFirmwareSpecificLists(void);
void _setupMetaData(void);
bool _validateKeyTypes(QJsonObject& jsonObject, const QStringList& keys, const QList<QJsonValue::Type>& types);
MAV_AUTOPILOT _firmwareTypeFromVehicle(Vehicle* vehicle) const;
private:
QStringList _categories;
QMap<QString, QmlObjectListModel*> _categoryToMavCmdInfoListMap;
QmlObjectListModel _commandList;
QMap<MAV_CMD, MavCmdInfo*> _mavCmdInfoMap;
QMap<MAV_AUTOPILOT, QMap<QString, QmlObjectListModel*> > _categoryToMavCmdInfoListMap;
QMap<MAV_CMD, MavCmdInfo*> _mavCmdInfoMap;
static const QString _categoryJsonKey;
static const QString _decimalPlacesJsonKey;
......
......@@ -37,7 +37,6 @@ FactMetaData* MissionItem::_defaultParamMetaData = NULL;
FactMetaData* MissionItem::_frameMetaData = NULL;
FactMetaData* MissionItem::_latitudeMetaData = NULL;
FactMetaData* MissionItem::_longitudeMetaData = NULL;
FactMetaData* MissionItem::_supportedCommandMetaData = NULL;
struct EnumInfo_s {
const char * label;
......@@ -108,7 +107,6 @@ MissionItem::MissionItem(QObject* parent)
, _param7MetaData(FactMetaData::valueTypeDouble)
, _syncingAltitudeRelativeToHomeAndFrame (false)
, _syncingHeadingDegreesAndParam4 (false)
, _syncingSupportedCommandAndCommand (false)
, _mavCmdInfoMap(qgcApp()->toolbox()->missionCommands()->commandInfoMap())
{
// Need a good command and frame before we start passing signals around
......@@ -167,7 +165,6 @@ MissionItem::MissionItem(int sequenceNumber,
, _param7MetaData(FactMetaData::valueTypeDouble)
, _syncingAltitudeRelativeToHomeAndFrame (false)
, _syncingHeadingDegreesAndParam4 (false)
, _syncingSupportedCommandAndCommand (false)
, _mavCmdInfoMap(qgcApp()->toolbox()->missionCommands()->commandInfoMap())
{
// Need a good command and frame before we start passing signals around
......@@ -183,7 +180,6 @@ MissionItem::MissionItem(int sequenceNumber,
setAutoContinue(autoContinue);
_syncFrameToAltitudeRelativeToHome();
_syncCommandToSupportedCommand(QVariant(this->command()));
_param1Fact.setRawValue(param1);
_param2Fact.setRawValue(param2);
......@@ -223,7 +219,6 @@ MissionItem::MissionItem(const MissionItem& other, QObject* parent)
, _param4MetaData(FactMetaData::valueTypeDouble)
, _syncingAltitudeRelativeToHomeAndFrame (false)
, _syncingHeadingDegreesAndParam4 (false)
, _syncingSupportedCommandAndCommand (false)
, _mavCmdInfoMap(qgcApp()->toolbox()->missionCommands()->commandInfoMap())
{
// Need a good command and frame before we start passing signals around
......@@ -254,7 +249,6 @@ const MissionItem& MissionItem::operator=(const MissionItem& other)
setHomePositionValid(other._homePositionValid);
_syncFrameToAltitudeRelativeToHome();
_syncCommandToSupportedCommand(QVariant(this->command()));
_param1Fact.setRawValue(other._param1Fact.rawValue());
_param2Fact.setRawValue(other._param2Fact.rawValue());
......@@ -282,8 +276,6 @@ void MissionItem::_connectSignals(void)
connect(this, &MissionItem::sequenceNumberChanged, this, &MissionItem::_setDirtyFromSignal);
// Values from these facts must propogate back and forth between the real object storage
connect(&_supportedCommandFact, &Fact::valueChanged, this, &MissionItem::_syncSupportedCommandToCommand);
connect(&_commandFact, &Fact::valueChanged, this, &MissionItem::_syncCommandToSupportedCommand);
connect(&_altitudeRelativeToHomeFact, &Fact::valueChanged, this, &MissionItem::_syncAltitudeRelativeToHomeToFrame);
connect(this, &MissionItem::frameChanged, this, &MissionItem::_syncFrameToAltitudeRelativeToHome);
......@@ -351,28 +343,10 @@ void MissionItem::_setupMetaData(void)
_longitudeMetaData->setUnits("deg");
_longitudeMetaData->setDecimalPlaces(7);
enumStrings.clear();
enumValues.clear();
// FIXME: Hack hardcode to PX4
QList<MAV_CMD> supportedCommands = qgcApp()->toolbox()->firmwarePluginManager()->firmwarePluginForAutopilot(MAV_AUTOPILOT_PX4, MAV_TYPE_QUADROTOR)->supportedMissionCommands();
if (supportedCommands.count()) {
foreach (MAV_CMD command, supportedCommands) {
enumStrings.append(_mavCmdInfoMap[command]->friendlyName());
enumValues.append(QVariant(command));
}
} else {
foreach (const MavCmdInfo* mavCmdInfo, _mavCmdInfoMap) {
enumStrings.append(mavCmdInfo->friendlyName());
enumValues.append(QVariant(mavCmdInfo->command()));
}
}
_supportedCommandMetaData = new FactMetaData(FactMetaData::valueTypeUint32);
_supportedCommandMetaData->setEnumInfo(enumStrings, enumValues);
}
_commandFact.setMetaData(_commandMetaData);
_frameFact.setMetaData(_frameMetaData);
_supportedCommandFact.setMetaData(_supportedCommandMetaData);
}
MissionItem::~MissionItem()
......@@ -787,24 +761,6 @@ void MissionItem::_syncFrameToAltitudeRelativeToHome(void)
}
}
void MissionItem::_syncSupportedCommandToCommand(const QVariant& value)
{
if (!_syncingSupportedCommandAndCommand) {
_syncingSupportedCommandAndCommand = true;
_commandFact.setRawValue(value.toInt());
_syncingSupportedCommandAndCommand = false;
}
}
void MissionItem::_syncCommandToSupportedCommand(const QVariant& value)
{
if (!_syncingSupportedCommandAndCommand) {
_syncingSupportedCommandAndCommand = true;
_supportedCommandFact.setRawValue(value.toInt());
_syncingSupportedCommandAndCommand = false;
}
}
void MissionItem::setDefaultsForCommand(void)
{
// We set these global defaults first, then if there are param defaults they will get reset
......
......@@ -87,7 +87,6 @@ public:
Q_PROPERTY(int sequenceNumber READ sequenceNumber WRITE setSequenceNumber NOTIFY sequenceNumberChanged)
Q_PROPERTY(bool standaloneCoordinate READ standaloneCoordinate NOTIFY commandChanged)
Q_PROPERTY(bool specifiesCoordinate READ specifiesCoordinate NOTIFY commandChanged)
Q_PROPERTY(Fact* supportedCommand READ supportedCommand NOTIFY commandChanged)
// These properties are used to display the editing ui
Q_PROPERTY(QmlObjectListModel* checkboxFacts READ checkboxFacts NOTIFY uiModelChanged)
......@@ -118,7 +117,6 @@ public:
int sequenceNumber (void) const { return _sequenceNumber; }
bool standaloneCoordinate(void) const;
bool specifiesCoordinate (void) const;
Fact* supportedCommand (void) { return &_supportedCommandFact; }
QmlObjectListModel* textFieldFacts (void);
......@@ -206,9 +204,7 @@ private slots:
void _sendFriendlyEditAllowedChanged(void);
void _sendUiModelChanged(void);
void _syncAltitudeRelativeToHomeToFrame(const QVariant& value);
void _syncCommandToSupportedCommand(const QVariant& value);
void _syncFrameToAltitudeRelativeToHome(void);
void _syncSupportedCommandToCommand(const QVariant& value);
private:
void _clearParamMetaData(void);
......@@ -249,7 +245,6 @@ private:
static FactMetaData* _frameMetaData;
static FactMetaData* _latitudeMetaData;
static FactMetaData* _longitudeMetaData;
static FactMetaData* _supportedCommandMetaData;
FactMetaData _param1MetaData;
FactMetaData _param2MetaData;
......@@ -264,7 +259,6 @@ private:
bool _syncingAltitudeRelativeToHomeAndFrame; ///< true: already in a sync signal, prevents signal loop
bool _syncingHeadingDegreesAndParam4; ///< true: already in a sync signal, prevents signal loop
bool _syncingSupportedCommandAndCommand; ///< true: already in a sync signal, prevents signal loop
const QMap<MAV_CMD, MavCmdInfo*>& _mavCmdInfoMap;
};
......
......@@ -145,7 +145,11 @@ static QObject* mavlinkQmlSingletonFactory(QQmlEngine*, QJSEngine*)
static QObject* qgroundcontrolQmlGlobalSingletonFactory(QQmlEngine*, QJSEngine*)
{
return new QGroundControlQmlGlobal(qgcApp()->toolbox());
// We create this object as a QGCTool even though it isn't int he toolbox
QGroundControlQmlGlobal* qmlGlobal = new QGroundControlQmlGlobal(qgcApp());
qmlGlobal->setToolbox(qgcApp()->toolbox());
return qmlGlobal;
}
/**
......
......@@ -32,6 +32,8 @@ import QGroundControl.Palette 1.0
QGCViewDialog {
property var missionItem
property var _vehicle: QGroundControl.multiVehicleManager.activeVehicle
QGCPalette { id: qgcPal }
QGCLabel {
......@@ -45,10 +47,10 @@ QGCViewDialog {
anchors.margins: ScreenTools.defaultFontPixelWidth
anchors.left: categoryLabel.right
anchors.right: parent.right
model: QGroundControl.missionCommands.categories
model: QGroundControl.missionCommands.categories(_vehicle)
function categorySelected(category) {
commandList.model = QGroundControl.missionCommands.getCommandsForCategory(category)
commandList.model = QGroundControl.missionCommands.getCommandsForCategory(_vehicle, category)
}
Component.onCompleted: {
......@@ -109,5 +111,4 @@ QGCViewDialog {
}
}
} // ListView
} // QGCViewDialog
......@@ -25,7 +25,6 @@
/// @author Don Gagne <don@thegagnes.com>
#include "QGroundControlQmlGlobal.h"
#include "QGCApplication.h"
#include <QSettings>
......@@ -33,19 +32,49 @@ static const char* kQmlGlobalKeyName = "QGCQml";
const char* QGroundControlQmlGlobal::_virtualTabletJoystickKey = "VirtualTabletJoystick";
QGroundControlQmlGlobal::QGroundControlQmlGlobal(QGCToolbox* toolbox, QObject* parent)
: QObject(parent)
, _flightMapSettings(toolbox->flightMapSettings())
, _homePositionManager(toolbox->homePositionManager())
, _linkManager(toolbox->linkManager())
, _missionCommands(toolbox->missionCommands())
, _multiVehicleManager(toolbox->multiVehicleManager())
QGroundControlQmlGlobal::QGroundControlQmlGlobal(QGCApplication* app)
: QGCTool(app)
, _flightMapSettings(NULL)
, _homePositionManager(NULL)
, _linkManager(NULL)
, _missionCommands(NULL)
, _multiVehicleManager(NULL)
, _virtualTabletJoystick(false)
, _offlineEditingFirmwareTypeFact(QString(), "OfflineEditingFirmwareType", FactMetaData::valueTypeUint32, (uint32_t)MAV_AUTOPILOT_ARDUPILOTMEGA)
, _offlineEditingFirmwareTypeMetaData(FactMetaData::valueTypeUint32)
{
QSettings settings;
_virtualTabletJoystick = settings.value(_virtualTabletJoystickKey, false). toBool();
QStringList firmwareEnumStrings;
QVariantList firmwareEnumValues;
firmwareEnumStrings << "APM Flight Stack" << "PX4 Flight Stack" << "Mavlink Generic Flight Stack";
firmwareEnumValues << QVariant::fromValue((uint32_t)MAV_AUTOPILOT_ARDUPILOTMEGA) << QVariant::fromValue((uint32_t)MAV_AUTOPILOT_PX4) << QVariant::fromValue((uint32_t)MAV_AUTOPILOT_GENERIC);
_offlineEditingFirmwareTypeMetaData.setEnumInfo(firmwareEnumStrings, firmwareEnumValues);
_offlineEditingFirmwareTypeFact.setMetaData(&_offlineEditingFirmwareTypeMetaData);
}
QGroundControlQmlGlobal::~QGroundControlQmlGlobal()
{
}
void QGroundControlQmlGlobal::setToolbox(QGCToolbox* toolbox)
{
QGCTool::setToolbox(toolbox);
_flightMapSettings = toolbox->flightMapSettings();
_homePositionManager = toolbox->homePositionManager();
_linkManager = toolbox->linkManager();
_missionCommands = toolbox->missionCommands();
_multiVehicleManager = toolbox->multiVehicleManager();
}
void QGroundControlQmlGlobal::saveGlobalSetting (const QString& key, const QString& value)
{
QSettings settings;
......
......@@ -27,13 +27,13 @@
#ifndef QGroundControlQmlGlobal_H
#define QGroundControlQmlGlobal_H
#include <QObject>
#include "QGCToolBox.h"
#include "QGCApplication.h"
#include "LinkManager.h"
#include "HomePositionManager.h"
#include "FlightMapSettings.h"
#include "MissionCommands.h"
#include "SettingsFact.h"
#ifdef QT_DEBUG
#include "MockLink.h"
......@@ -41,12 +41,14 @@
class QGCToolbox;
class QGroundControlQmlGlobal : public QObject
class QGroundControlQmlGlobal : public QGCTool
{
Q_OBJECT
public:
QGroundControlQmlGlobal(QGCToolbox* toolbox, QObject* parent = NULL);
QGroundControlQmlGlobal(QGCApplication* app);
~QGroundControlQmlGlobal();
Q_PROPERTY(FlightMapSettings* flightMapSettings READ flightMapSettings CONSTANT)
Q_PROPERTY(HomePositionManager* homePositionManager READ homePositionManager CONSTANT)
......@@ -72,13 +74,15 @@ public:
Q_PROPERTY(bool isVersionCheckEnabled READ isVersionCheckEnabled WRITE setIsVersionCheckEnabled NOTIFY isVersionCheckEnabledChanged)
Q_PROPERTY(int mavlinkSystemID READ mavlinkSystemID WRITE setMavlinkSystemID NOTIFY mavlinkSystemIDChanged)
Q_PROPERTY(Fact* offlineEditingFirmwareType READ offlineEditingFirmwareType CONSTANT)
Q_INVOKABLE void saveGlobalSetting (const QString& key, const QString& value);
Q_INVOKABLE QString loadGlobalSetting (const QString& key, const QString& defaultValue);
Q_INVOKABLE void saveBoolGlobalSetting (const QString& key, bool value);
Q_INVOKABLE bool loadBoolGlobalSetting (const QString& key, bool defaultValue);
Q_INVOKABLE void deleteAllSettingsNextBoot () { qgcApp()->deleteAllSettingsNextBoot(); }
Q_INVOKABLE void clearDeleteAllSettingsNextBoot () { qgcApp()->clearDeleteAllSettingsNextBoot(); }
Q_INVOKABLE void deleteAllSettingsNextBoot () { _app->deleteAllSettingsNextBoot(); }
Q_INVOKABLE void clearDeleteAllSettingsNextBoot () { _app->clearDeleteAllSettingsNextBoot(); }
Q_INVOKABLE void startPX4MockLink (bool sendStatusText);
Q_INVOKABLE void startGenericMockLink (bool sendStatusText);
......@@ -98,16 +102,18 @@ public:
qreal zOrderWidgets () { return 100; }
qreal zOrderMapItems () { return 50; }
bool isDarkStyle () { return qgcApp()->styleIsDark(); }
bool isAudioMuted () { return qgcApp()->toolbox()->audioOutput()->isMuted(); }
bool isSaveLogPrompt () { return qgcApp()->promptFlightDataSave(); }
bool isSaveLogPromptNotArmed () { return qgcApp()->promptFlightDataSaveNotArmed(); }
bool isDarkStyle () { return _app->styleIsDark(); }
bool isAudioMuted () { return _toolbox->audioOutput()->isMuted(); }
bool isSaveLogPrompt () { return _app->promptFlightDataSave(); }
bool isSaveLogPromptNotArmed () { return _app->promptFlightDataSaveNotArmed(); }
bool virtualTabletJoystick () { return _virtualTabletJoystick; }
bool isHeartBeatEnabled () { return qgcApp()->toolbox()->mavlinkProtocol()->heartbeatsEnabled(); }
bool isMultiplexingEnabled () { return qgcApp()->toolbox()->mavlinkProtocol()->multiplexingEnabled(); }
bool isVersionCheckEnabled () { return qgcApp()->toolbox()->mavlinkProtocol()->versionCheckEnabled(); }
int mavlinkSystemID () { return qgcApp()->toolbox()->mavlinkProtocol()->getSystemId(); }
bool isHeartBeatEnabled () { return _toolbox->mavlinkProtocol()->heartbeatsEnabled(); }
bool isMultiplexingEnabled () { return _toolbox->mavlinkProtocol()->multiplexingEnabled(); }
bool isVersionCheckEnabled () { return _toolbox->mavlinkProtocol()->versionCheckEnabled(); }
int mavlinkSystemID () { return _toolbox->mavlinkProtocol()->getSystemId(); }
Fact* offlineEditingFirmwareType () { return &_offlineEditingFirmwareTypeFact; }
//-- TODO: Make this into an actual preference.
bool isAdvancedMode () { return false; }
......@@ -123,6 +129,9 @@ public:
void setIsVersionCheckEnabled (bool enable);
void setMavlinkSystemID (int id);
// Overrides from QGCTool
virtual void setToolbox(QGCToolbox* toolbox);
signals:
void isDarkStyleChanged (bool dark);
void isAudioMutedChanged (bool muted);
......@@ -144,6 +153,9 @@ private:
bool _virtualTabletJoystick;
SettingsFact _offlineEditingFirmwareTypeFact;
FactMetaData _offlineEditingFirmwareTypeMetaData;
static const char* _virtualTabletJoystickKey;
};
......
......@@ -28,6 +28,7 @@ import QtQuick.Dialogs 1.1
import QGroundControl 1.0
import QGroundControl.FactSystem 1.0
import QGroundControl.FactControls 1.0
import QGroundControl.Controls 1.0
import QGroundControl.ScreenTools 1.0
import QGroundControl.MultiVehicleManager 1.0
......@@ -194,31 +195,35 @@ Rectangle {
//-- Autoconnect settings
QGCLabel { text: "Autoconnect to the following devices:" }
QGCCheckBox {
text: "Pixhawk"
visible: !ScreenTools.isiOS
checked: QGroundControl.linkManager.autoconnectPixhawk
onClicked: QGroundControl.linkManager.autoconnectPixhawk = checked
}
Row {
spacing: ScreenTools.defaultFontPixelWidth * 2
QGCCheckBox {
text: "3DR Radio"
visible: !ScreenTools.isiOS
checked: QGroundControl.linkManager.autoconnect3DRRadio
onClicked: QGroundControl.linkManager.autoconnect3DRRadio = checked
}
QGCCheckBox {
text: "Pixhawk"
visible: !ScreenTools.isiOS
checked: QGroundControl.linkManager.autoconnectPixhawk
onClicked: QGroundControl.linkManager.autoconnectPixhawk = checked
}
QGCCheckBox {
text: "PX4 Flow"
visible: !ScreenTools.isiOS
checked: QGroundControl.linkManager.autoconnectPX4Flow
onClicked: QGroundControl.linkManager.autoconnectPX4Flow = checked
}
QGCCheckBox {
text: "3DR Radio"
visible: !ScreenTools.isiOS
checked: QGroundControl.linkManager.autoconnect3DRRadio
onClicked: QGroundControl.linkManager.autoconnect3DRRadio = checked
}
QGCCheckBox {
text: "UDP"
checked: QGroundControl.linkManager.autoconnectUDP
onClicked: QGroundControl.linkManager.autoconnectUDP = checked
QGCCheckBox {
text: "PX4 Flow"
visible: !ScreenTools.isiOS
checked: QGroundControl.linkManager.autoconnectPX4Flow
onClicked: QGroundControl.linkManager.autoconnectPX4Flow = checked
}
QGCCheckBox {
text: "UDP"
checked: QGroundControl.linkManager.autoconnectUDP
onClicked: QGroundControl.linkManager.autoconnectUDP = checked
}
}
Item {
......@@ -233,6 +238,27 @@ Rectangle {
checked: QGroundControl.virtualTabletJoystick
onClicked: QGroundControl.virtualTabletJoystick = checked
}
Item {
height: ScreenTools.defaultFontPixelHeight / 2
width: parent.width
}
Row {
spacing: ScreenTools.defaultFontPixelWidth
QGCLabel {
text: "Offline mission editing vehicle type:"
anchors.baseline: offlineTypeCombo.baseline
}
FactComboBox {
id: offlineTypeCombo
width: ScreenTools.defaultFontPixelWidth * 25
fact: QGroundControl.offlineEditingFirmwareType
indexModel: false
}
}
}
}
}
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