QGroundControlQmlGlobal.cc 8.29 KB
Newer Older
1 2
/****************************************************************************
 *
Gus Grubba's avatar
Gus Grubba committed
3
 * (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
4 5 6 7 8
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/
9

10 11 12 13 14

/// @file
///     @author Don Gagne <don@thegagnes.com>

#include "QGroundControlQmlGlobal.h"
15 16

#include <QSettings>
Don Gagne's avatar
Don Gagne committed
17 18
#include <QLineF>
#include <QPointF>
19

Don Gagne's avatar
Don Gagne committed
20
static const char* kQmlGlobalKeyName = "QGCQml";
21

22 23 24 25 26
const char* QGroundControlQmlGlobal::_flightMapPositionSettingsGroup =          "FlightMapPosition";
const char* QGroundControlQmlGlobal::_flightMapPositionLatitudeSettingsKey =    "Latitude";
const char* QGroundControlQmlGlobal::_flightMapPositionLongitudeSettingsKey =   "Longitude";
const char* QGroundControlQmlGlobal::_flightMapZoomSettingsKey =                "FlightMapZoom";

27
QGeoCoordinate   QGroundControlQmlGlobal::_coord = QGeoCoordinate(0.0,0.0);
28
double           QGroundControlQmlGlobal::_zoom = 2;
29

30
QGroundControlQmlGlobal::QGroundControlQmlGlobal(QGCApplication* app, QGCToolbox* toolbox)
31
    : QGCTool               (app, toolbox)
32
{
33
    // We clear the parent on this object since we run into shutdown problems caused by hybrid qml app. Instead we let it leak on shutdown.
34
    setParent(nullptr);
35 36 37
    // Load last coordinates and zoom from config file
    QSettings settings;
    settings.beginGroup(_flightMapPositionSettingsGroup);
38 39 40
    _coord.setLatitude(settings.value(_flightMapPositionLatitudeSettingsKey,    _coord.latitude()).toDouble());
    _coord.setLongitude(settings.value(_flightMapPositionLongitudeSettingsKey,  _coord.longitude()).toDouble());
    _zoom = settings.value(_flightMapZoomSettingsKey, _zoom).toDouble();
41 42 43 44
}

QGroundControlQmlGlobal::~QGroundControlQmlGlobal()
{
45 46 47 48 49 50
    // Save last coordinates and zoom to config file
    QSettings settings;
    settings.beginGroup(_flightMapPositionSettingsGroup);
    settings.setValue(_flightMapPositionLatitudeSettingsKey, _coord.latitude());
    settings.setValue(_flightMapPositionLongitudeSettingsKey, _coord.longitude());
    settings.setValue(_flightMapZoomSettingsKey, _zoom);
51
}
52

53 54 55
void QGroundControlQmlGlobal::setToolbox(QGCToolbox* toolbox)
{
    QGCTool::setToolbox(toolbox);
56

dogmaphobic's avatar
dogmaphobic committed
57 58
    _linkManager            = toolbox->linkManager();
    _multiVehicleManager    = toolbox->multiVehicleManager();
Jimmy Johnson's avatar
Jimmy Johnson committed
59
    _mapEngineManager       = toolbox->mapEngineManager();
60 61
    _qgcPositionManager     = toolbox->qgcPositionManager();
    _missionCommandTree     = toolbox->missionCommandTree();
62
    _videoManager           = toolbox->videoManager();
Gus Grubba's avatar
Gus Grubba committed
63
    _mavlinkLogManager      = toolbox->mavlinkLogManager();
64
    _corePlugin             = toolbox->corePlugin();
Gus Grubba's avatar
Gus Grubba committed
65
    _firmwarePluginManager  = toolbox->firmwarePluginManager();
66
    _settingsManager        = toolbox->settingsManager();
67
    _gpsRtkFactGroup        = qgcApp()->gpsRtkFactGroup();
68
    _airspaceManager        = toolbox->airspaceManager();
69
    _adsbVehicleManager     = toolbox->adsbVehicleManager();
70
    _globalPalette          = new QGCPalette(this);
Gus Grubba's avatar
Gus Grubba committed
71 72 73
#if defined(QGC_ENABLE_PAIRING)
    _pairingManager         = toolbox->pairingManager();
#endif
74
#if defined(QGC_GST_TAISYNC_ENABLED)
75 76
    _taisyncManager         = toolbox->taisyncManager();
#endif
77 78 79
#if defined(QGC_GST_MICROHARD_ENABLED)
    _microhardManager       = toolbox->microhardManager();
#endif
80 81
}

82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
void QGroundControlQmlGlobal::saveGlobalSetting (const QString& key, const QString& value)
{
    QSettings settings;
    settings.beginGroup(kQmlGlobalKeyName);
    settings.setValue(key, value);
}

QString QGroundControlQmlGlobal::loadGlobalSetting (const QString& key, const QString& defaultValue)
{
    QSettings settings;
    settings.beginGroup(kQmlGlobalKeyName);
    return settings.value(key, defaultValue).toString();
}

void QGroundControlQmlGlobal::saveBoolGlobalSetting (const QString& key, bool value)
{
    QSettings settings;
    settings.beginGroup(kQmlGlobalKeyName);
    settings.setValue(key, value);
}

bool QGroundControlQmlGlobal::loadBoolGlobalSetting (const QString& key, bool defaultValue)
{
    QSettings settings;
    settings.beginGroup(kQmlGlobalKeyName);
    return settings.value(key, defaultValue).toBool();
}
109 110 111 112

void QGroundControlQmlGlobal::startPX4MockLink(bool sendStatusText)
{
#ifdef QT_DEBUG
113
    MockLink::startPX4MockLink(sendStatusText);
Don Gagne's avatar
Don Gagne committed
114 115
#else
    Q_UNUSED(sendStatusText);
116 117 118 119 120 121
#endif
}

void QGroundControlQmlGlobal::startGenericMockLink(bool sendStatusText)
{
#ifdef QT_DEBUG
122
    MockLink::startGenericMockLink(sendStatusText);
Don Gagne's avatar
Don Gagne committed
123 124
#else
    Q_UNUSED(sendStatusText);
125 126 127 128 129 130
#endif
}

void QGroundControlQmlGlobal::startAPMArduCopterMockLink(bool sendStatusText)
{
#ifdef QT_DEBUG
131
    MockLink::startAPMArduCopterMockLink(sendStatusText);
Don Gagne's avatar
Don Gagne committed
132 133
#else
    Q_UNUSED(sendStatusText);
134 135 136 137 138 139
#endif
}

void QGroundControlQmlGlobal::startAPMArduPlaneMockLink(bool sendStatusText)
{
#ifdef QT_DEBUG
140
    MockLink::startAPMArduPlaneMockLink(sendStatusText);
Don Gagne's avatar
Don Gagne committed
141 142
#else
    Q_UNUSED(sendStatusText);
143 144 145
#endif
}

146 147 148 149 150 151 152 153 154
void QGroundControlQmlGlobal::startAPMArduSubMockLink(bool sendStatusText)
{
#ifdef QT_DEBUG
    MockLink::startAPMArduSubMockLink(sendStatusText);
#else
    Q_UNUSED(sendStatusText);
#endif
}

155 156 157 158 159 160 161 162 163
void QGroundControlQmlGlobal::startAPMArduRoverMockLink(bool sendStatusText)
{
#ifdef QT_DEBUG
    MockLink::startAPMArduRoverMockLink(sendStatusText);
#else
    Q_UNUSED(sendStatusText);
#endif
}

Don Gagne's avatar
Don Gagne committed
164
void QGroundControlQmlGlobal::stopOneMockLink(void)
165 166 167 168
{
#ifdef QT_DEBUG
    LinkManager* linkManager = qgcApp()->toolbox()->linkManager();

169 170
    for (int i=0; i<linkManager->links().count(); i++) {
        LinkInterface* link = linkManager->links()[i];
171
        MockLink* mockLink = qobject_cast<MockLink*>(link);
Don Gagne's avatar
Don Gagne committed
172

173
        if (mockLink) {
Don Gagne's avatar
Don Gagne committed
174
            linkManager->disconnectLink(mockLink);
Don Gagne's avatar
Don Gagne committed
175
            return;
176 177 178 179
        }
    }
#endif
}
180

Don Gagne's avatar
Don Gagne committed
181 182 183 184 185 186
void QGroundControlQmlGlobal::setIsVersionCheckEnabled(bool enable)
{
    qgcApp()->toolbox()->mavlinkProtocol()->enableVersionCheck(enable);
    emit isVersionCheckEnabledChanged(enable);
}

187 188 189 190 191 192
void QGroundControlQmlGlobal::setMavlinkSystemID(int id)
{
    qgcApp()->toolbox()->mavlinkProtocol()->setSystemId(id);
    emit mavlinkSystemIDChanged(id);
}

Gus Grubba's avatar
Gus Grubba committed
193 194
int QGroundControlQmlGlobal::supportedFirmwareCount()
{
195
    return _firmwarePluginManager->supportedFirmwareTypes().count();
Gus Grubba's avatar
Gus Grubba committed
196 197
}

198 199 200 201 202 203 204 205 206 207 208 209
int QGroundControlQmlGlobal::supportedVehicleCount()
{
    int count = 0;
    QList<MAV_AUTOPILOT> list = _firmwarePluginManager->supportedFirmwareTypes();
    foreach(auto firmware, list) {
        if(firmware != MAV_AUTOPILOT_GENERIC) {
            count += _firmwarePluginManager->supportedVehicleTypes(firmware).count();
        }
    }
    return count;
}

210 211 212 213 214 215 216 217 218
bool QGroundControlQmlGlobal::px4ProFirmwareSupported()
{
    return _firmwarePluginManager->supportedFirmwareTypes().contains(MAV_AUTOPILOT_PX4);
}

bool QGroundControlQmlGlobal::apmFirmwareSupported()
{
    return _firmwarePluginManager->supportedFirmwareTypes().contains(MAV_AUTOPILOT_ARDUPILOTMEGA);
}
Gus Grubba's avatar
Gus Grubba committed
219

220 221 222 223
bool QGroundControlQmlGlobal::linesIntersect(QPointF line1A, QPointF line1B, QPointF line2A, QPointF line2B)
{
    QPointF intersectPoint;

224 225 226 227 228 229 230
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
    auto intersect = QLineF(line1A, line1B).intersect(QLineF(line2A, line2B), &intersectPoint);
#else
    auto intersect = QLineF(line1A, line1B).intersects(QLineF(line2A, line2B), &intersectPoint);
#endif

    return  intersect == QLineF::BoundedIntersection &&
231 232
            intersectPoint != line1A && intersectPoint != line1B;
}
233 234 235 236 237 238 239 240

void QGroundControlQmlGlobal::setSkipSetupPage(bool skip)
{
    if(_skipSetupPage != skip) {
        _skipSetupPage = skip;
        emit skipSetupPageChanged();
    }
}
241 242 243 244

void QGroundControlQmlGlobal::setFlightMapPosition(QGeoCoordinate& coordinate)
{
    if (coordinate != flightMapPosition()) {
245 246
        _coord.setLatitude(coordinate.latitude());
        _coord.setLongitude(coordinate.longitude());
247 248 249 250 251 252 253 254

        emit flightMapPositionChanged(coordinate);
    }
}

void QGroundControlQmlGlobal::setFlightMapZoom(double zoom)
{
    if (zoom != flightMapZoom()) {
255
        _zoom = zoom;
256 257 258
        emit flightMapZoomChanged(zoom);
    }
}
259 260 261 262 263 264 265 266 267 268 269

QString QGroundControlQmlGlobal::qgcVersion(void) const
{
    QString versionStr = qgcApp()->applicationVersion();
#ifdef __androidArm32__
    versionStr += QStringLiteral(" %1").arg(tr("32 bit"));
#elif __androidArm64__
    versionStr += QStringLiteral(" %1").arg(tr("64 bit"));
#endif
    return versionStr;
}