QGroundControlQmlGlobal.cc 6.57 KB
Newer Older
1 2 3 4 5 6 7 8
/****************************************************************************
 *
 *   (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 *
 * 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 28 29 30
QGroundControlQmlGlobal::QGroundControlQmlGlobal(QGCApplication* app)
    : QGCTool(app)
    , _linkManager(NULL)
    , _multiVehicleManager(NULL)
dogmaphobic's avatar
dogmaphobic committed
31
    , _mapEngineManager(NULL)
32 33
    , _qgcPositionManager(NULL)
    , _missionCommandTree(NULL)
34
    , _videoManager(NULL)
Gus Grubba's avatar
Gus Grubba committed
35
    , _mavlinkLogManager(NULL)
36
    , _corePlugin(NULL)
Gus Grubba's avatar
Gus Grubba committed
37
    , _firmwarePluginManager(NULL)
38
    , _settingsManager(NULL)
39
    , _skipSetupPage(false)
40
{
41 42
    // 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.
    setParent(NULL);
43 44 45 46 47
}

QGroundControlQmlGlobal::~QGroundControlQmlGlobal()
{

48
}
49

50 51 52
void QGroundControlQmlGlobal::setToolbox(QGCToolbox* toolbox)
{
    QGCTool::setToolbox(toolbox);
53

dogmaphobic's avatar
dogmaphobic committed
54 55
    _linkManager            = toolbox->linkManager();
    _multiVehicleManager    = toolbox->multiVehicleManager();
Jimmy Johnson's avatar
Jimmy Johnson committed
56
    _mapEngineManager       = toolbox->mapEngineManager();
57 58
    _qgcPositionManager     = toolbox->qgcPositionManager();
    _missionCommandTree     = toolbox->missionCommandTree();
59
    _videoManager           = toolbox->videoManager();
Gus Grubba's avatar
Gus Grubba committed
60
    _mavlinkLogManager      = toolbox->mavlinkLogManager();
61
    _corePlugin             = toolbox->corePlugin();
Gus Grubba's avatar
Gus Grubba committed
62
    _firmwarePluginManager  = toolbox->firmwarePluginManager();
63
    _settingsManager        = toolbox->settingsManager();
64 65
}

66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
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();
}
93 94 95 96

void QGroundControlQmlGlobal::startPX4MockLink(bool sendStatusText)
{
#ifdef QT_DEBUG
97
    MockLink::startPX4MockLink(sendStatusText);
Don Gagne's avatar
Don Gagne committed
98 99
#else
    Q_UNUSED(sendStatusText);
100 101 102 103 104 105
#endif
}

void QGroundControlQmlGlobal::startGenericMockLink(bool sendStatusText)
{
#ifdef QT_DEBUG
106
    MockLink::startGenericMockLink(sendStatusText);
Don Gagne's avatar
Don Gagne committed
107 108
#else
    Q_UNUSED(sendStatusText);
109 110 111 112 113 114
#endif
}

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

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

130 131 132 133 134 135 136 137 138
void QGroundControlQmlGlobal::startAPMArduSubMockLink(bool sendStatusText)
{
#ifdef QT_DEBUG
    MockLink::startAPMArduSubMockLink(sendStatusText);
#else
    Q_UNUSED(sendStatusText);
#endif
}

139 140 141 142 143
void QGroundControlQmlGlobal::stopAllMockLinks(void)
{
#ifdef QT_DEBUG
    LinkManager* linkManager = qgcApp()->toolbox()->linkManager();

144 145
    for (int i=0; i<linkManager->links().count(); i++) {
        LinkInterface* link = linkManager->links()[i];
146
        MockLink* mockLink = qobject_cast<MockLink*>(link);
Don Gagne's avatar
Don Gagne committed
147

148
        if (mockLink) {
Don Gagne's avatar
Don Gagne committed
149
            linkManager->disconnectLink(mockLink);
150 151 152 153
        }
    }
#endif
}
154

Don Gagne's avatar
Don Gagne committed
155 156 157 158 159 160
void QGroundControlQmlGlobal::setIsVersionCheckEnabled(bool enable)
{
    qgcApp()->toolbox()->mavlinkProtocol()->enableVersionCheck(enable);
    emit isVersionCheckEnabledChanged(enable);
}

161 162 163 164 165 166
void QGroundControlQmlGlobal::setMavlinkSystemID(int id)
{
    qgcApp()->toolbox()->mavlinkProtocol()->setSystemId(id);
    emit mavlinkSystemIDChanged(id);
}

Gus Grubba's avatar
Gus Grubba committed
167 168
int QGroundControlQmlGlobal::supportedFirmwareCount()
{
169
    return _firmwarePluginManager->supportedFirmwareTypes().count();
Gus Grubba's avatar
Gus Grubba committed
170 171 172
}


173 174 175 176 177 178 179
bool QGroundControlQmlGlobal::linesIntersect(QPointF line1A, QPointF line1B, QPointF line2A, QPointF line2B)
{
    QPointF intersectPoint;

    return QLineF(line1A, line1B).intersect(QLineF(line2A, line2B), &intersectPoint) == QLineF::BoundedIntersection &&
            intersectPoint != line1A && intersectPoint != line1B;
}
180 181 182 183 184 185 186 187

void QGroundControlQmlGlobal::setSkipSetupPage(bool skip)
{
    if(_skipSetupPage != skip) {
        _skipSetupPage = skip;
        emit skipSetupPageChanged();
    }
}
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228

QGeoCoordinate QGroundControlQmlGlobal::flightMapPosition(void)
{
    QSettings       settings;
    QGeoCoordinate  coord;

    settings.beginGroup(_flightMapPositionSettingsGroup);
    coord.setLatitude(settings.value(_flightMapPositionLatitudeSettingsKey, 37.803784).toDouble());
    coord.setLongitude(settings.value(_flightMapPositionLongitudeSettingsKey, -122.462276).toDouble());

    return coord;
}

double QGroundControlQmlGlobal::flightMapZoom(void)
{
    QSettings settings;

    return settings.value(_flightMapZoomSettingsKey, 18).toDouble();
}

void QGroundControlQmlGlobal::setFlightMapPosition(QGeoCoordinate& coordinate)
{
    if (coordinate != flightMapPosition()) {
        QSettings settings;

        settings.beginGroup(_flightMapPositionSettingsGroup);
        settings.setValue(_flightMapPositionLatitudeSettingsKey, coordinate.latitude());
        settings.setValue(_flightMapPositionLongitudeSettingsKey, coordinate.longitude());
        emit flightMapPositionChanged(coordinate);
    }
}

void QGroundControlQmlGlobal::setFlightMapZoom(double zoom)
{
    if (zoom != flightMapZoom()) {
        QSettings settings;

        settings.setValue(_flightMapZoomSettingsKey, zoom);
        emit flightMapZoomChanged(zoom);
    }
}