QGCCorePlugin.cc 7.49 KB
Newer Older
1 2 3 4 5 6 7 8 9
/****************************************************************************
 *
 *   (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.
 *
 ****************************************************************************/

10
#include "QGCApplication.h"
11 12 13
#include "QGCCorePlugin.h"
#include "QGCOptions.h"
#include "QGCSettings.h"
14
#include "FactMetaData.h"
Don Gagne's avatar
Don Gagne committed
15
#include "SettingsManager.h"
16
#include "AppMessages.h"
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

#include <QtQml>
#include <QQmlEngine>

/// @file
///     @brief Core Plugin Interface for QGroundControl - Default Implementation
///     @author Gus Grubba <mavlink@grubba.com>

class QGCCorePlugin_p
{
public:
    QGCCorePlugin_p()
        : pGeneral(NULL)
        , pCommLinks(NULL)
        , pOfflineMaps(NULL)
        , pMAVLink(NULL)
        , pConsole(NULL)
DonLakeFlyer's avatar
DonLakeFlyer committed
34
    #if defined(QT_DEBUG)
35 36
        , pMockLink(NULL)
        , pDebug(NULL)
DonLakeFlyer's avatar
DonLakeFlyer committed
37
    #endif
38 39 40
        , defaultOptions(NULL)
    {
    }
41

42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
    ~QGCCorePlugin_p()
    {
        if(pGeneral)
            delete pGeneral;
        if(pCommLinks)
            delete pCommLinks;
        if(pOfflineMaps)
            delete pOfflineMaps;
        if(pMAVLink)
            delete pMAVLink;
        if(pConsole)
            delete pConsole;
#if defined(QT_DEBUG)
        if(pMockLink)
            delete pMockLink;
        if(pDebug)
            delete pDebug;
#endif
        if(defaultOptions)
            delete defaultOptions;
    }
63

64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
    QGCSettings* pGeneral;
    QGCSettings* pCommLinks;
    QGCSettings* pOfflineMaps;
    QGCSettings* pMAVLink;
    QGCSettings* pConsole;
#if defined(QT_DEBUG)
    QGCSettings* pMockLink;
    QGCSettings* pDebug;
#endif
    QVariantList settingsList;
    QGCOptions*  defaultOptions;
};

QGCCorePlugin::~QGCCorePlugin()
{
    if(_p) {
        delete _p;
    }
}

84 85
QGCCorePlugin::QGCCorePlugin(QGCApplication *app, QGCToolbox* toolbox)
    : QGCTool(app, toolbox)
86
    , _showTouchAreas(false)
87
    , _showAdvancedUI(true)
88 89 90 91 92 93
{
    _p = new QGCCorePlugin_p;
}

void QGCCorePlugin::setToolbox(QGCToolbox *toolbox)
{
DonLakeFlyer's avatar
DonLakeFlyer committed
94 95 96 97
    QGCTool::setToolbox(toolbox);
    QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
    qmlRegisterUncreatableType<QGCCorePlugin>("QGroundControl.QGCCorePlugin", 1, 0, "QGCCorePlugin", "Reference only");
    qmlRegisterUncreatableType<QGCOptions>("QGroundControl.QGCOptions",       1, 0, "QGCOptions",    "Reference only");
98 99
}

100
QVariantList &QGCCorePlugin::settingsPages()
101 102 103 104
{
    //-- If this hasn't been overridden, create default set of settings
    if(!_p->pGeneral) {
        //-- Default Settings
Gus Grubba's avatar
Gus Grubba committed
105
        _p->pGeneral = new QGCSettings(tr("General"),
DonLakeFlyer's avatar
DonLakeFlyer committed
106 107
                                       QUrl::fromUserInput("qrc:/qml/GeneralSettings.qml"),
                                       QUrl::fromUserInput("qrc:/res/gear-white.svg"));
Gus Grubba's avatar
Gus Grubba committed
108 109
        _p->settingsList.append(QVariant::fromValue((QGCSettings*)_p->pGeneral));
        _p->pCommLinks = new QGCSettings(tr("Comm Links"),
DonLakeFlyer's avatar
DonLakeFlyer committed
110 111
                                         QUrl::fromUserInput("qrc:/qml/LinkSettings.qml"),
                                         QUrl::fromUserInput("qrc:/res/waves.svg"));
Gus Grubba's avatar
Gus Grubba committed
112 113
        _p->settingsList.append(QVariant::fromValue((QGCSettings*)_p->pCommLinks));
        _p->pOfflineMaps = new QGCSettings(tr("Offline Maps"),
DonLakeFlyer's avatar
DonLakeFlyer committed
114 115
                                           QUrl::fromUserInput("qrc:/qml/OfflineMap.qml"),
                                           QUrl::fromUserInput("qrc:/res/waves.svg"));
Gus Grubba's avatar
Gus Grubba committed
116 117
        _p->settingsList.append(QVariant::fromValue((QGCSettings*)_p->pOfflineMaps));
        _p->pMAVLink = new QGCSettings(tr("MAVLink"),
DonLakeFlyer's avatar
DonLakeFlyer committed
118 119
                                       QUrl::fromUserInput("qrc:/qml/MavlinkSettings.qml"),
                                       QUrl::fromUserInput("qrc:/res/waves.svg"));
Gus Grubba's avatar
Gus Grubba committed
120 121
        _p->settingsList.append(QVariant::fromValue((QGCSettings*)_p->pMAVLink));
        _p->pConsole = new QGCSettings(tr("Console"),
DonLakeFlyer's avatar
DonLakeFlyer committed
122
                                       QUrl::fromUserInput("qrc:/qml/QGroundControl/Controls/AppMessages.qml"));
Gus Grubba's avatar
Gus Grubba committed
123
        _p->settingsList.append(QVariant::fromValue((QGCSettings*)_p->pConsole));
DonLakeFlyer's avatar
DonLakeFlyer committed
124
#if defined(QT_DEBUG)
125
        //-- These are always present on Debug builds
Gus Grubba's avatar
Gus Grubba committed
126
        _p->pMockLink = new QGCSettings(tr("Mock Link"),
DonLakeFlyer's avatar
DonLakeFlyer committed
127
                                        QUrl::fromUserInput("qrc:/qml/MockLink.qml"));
Gus Grubba's avatar
Gus Grubba committed
128 129
        _p->settingsList.append(QVariant::fromValue((QGCSettings*)_p->pMockLink));
        _p->pDebug = new QGCSettings(tr("Debug"),
DonLakeFlyer's avatar
DonLakeFlyer committed
130
                                     QUrl::fromUserInput("qrc:/qml/DebugWindow.qml"));
Gus Grubba's avatar
Gus Grubba committed
131
        _p->settingsList.append(QVariant::fromValue((QGCSettings*)_p->pDebug));
DonLakeFlyer's avatar
DonLakeFlyer committed
132
#endif
133 134 135 136
    }
    return _p->settingsList;
}

137
int QGCCorePlugin::defaultSettings()
138 139 140 141
{
    return 0;
}

142 143 144 145 146 147 148 149
QGCOptions* QGCCorePlugin::options()
{
    if(!_p->defaultOptions) {
        _p->defaultOptions = new QGCOptions();
    }
    return _p->defaultOptions;
}

150 151 152
bool QGCCorePlugin::overrideSettingsGroupVisibility(QString name)
{
    Q_UNUSED(name);
153

154 155 156
    // Always show all
    return true;
}
157 158 159

bool QGCCorePlugin::adjustSettingMetaData(FactMetaData& metaData)
{
160
    //-- Default Palette
Don Gagne's avatar
Don Gagne committed
161 162 163 164 165 166 167 168
    if (metaData.name() == AppSettings::indoorPaletteName) {
        QVariant outdoorPalette;
#if defined (__mobile__)
        outdoorPalette = 0;
#else
        outdoorPalette = 1;
#endif
        metaData.setRawDefaultValue(outdoorPalette);
169 170 171 172 173
        return true;
    //-- Auto Save Telemetry Logs
    } else if (metaData.name() == AppSettings::telemetrySaveName) {
#if defined (__mobile__)
        metaData.setRawDefaultValue(false);
174
        return true;
175 176 177
#else
        metaData.setRawDefaultValue(true);
        return true;
178 179 180 181 182 183 184
#endif
#if defined(__ios__)
    } else if (metaData.name() == AppSettings::savePathName) {
        QString appName = qgcApp()->applicationName();
        QDir rootDir = QDir(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation));
        metaData.setRawDefaultValue(rootDir.filePath(appName));
        return false;
185
#endif
Don Gagne's avatar
Don Gagne committed
186
    }
187
    return true; // Show setting in ui
188
}
DonLakeFlyer's avatar
DonLakeFlyer committed
189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204

void QGCCorePlugin::setShowTouchAreas(bool show)
{
    if (show != _showTouchAreas) {
        _showTouchAreas = show;
        emit showTouchAreasChanged(show);
    }
}

void QGCCorePlugin::setShowAdvancedUI(bool show)
{
    if (show != _showAdvancedUI) {
        _showAdvancedUI = show;
        emit showAdvancedUIChanged(show);
    }
}
205 206 207 208 209 210

void QGCCorePlugin::paletteOverride(QString colorName, QGCPalette::PaletteColorInfo_t& colorInfo)
{
    Q_UNUSED(colorName);
    Q_UNUSED(colorInfo);
}
211 212 213 214 215 216 217 218

QString QGCCorePlugin::showAdvancedUIMessage(void) const
{
    return tr("WARNING: You are about to enter Advanced Mode. "
              "If used incorrectly, this may cause your vehicle to malfunction thus voiding your warranty. "
              "You should do so only if instructed by customer support. "
              "Are you sure you want to enable Advanced Mode?");
}
219 220 221 222 223 224

void QGCCorePlugin::valuesWidgetDefaultSettings(QStringList& largeValues, QStringList& smallValues)
{
    Q_UNUSED(smallValues);
    largeValues << "Vehicle.altitudeRelative" << "Vehicle.groundSpeed" << "Vehicle.flightTime";
}
225 226 227 228 229 230 231 232 233 234

QQmlApplicationEngine* QGCCorePlugin::createRootWindow(QObject *parent)
{
    QQmlApplicationEngine* pEngine = new QQmlApplicationEngine(parent);
    pEngine->addImportPath("qrc:/qml");
    pEngine->rootContext()->setContextProperty("joystickManager", qgcApp()->toolbox()->joystickManager());
    pEngine->rootContext()->setContextProperty("debugMessageModel", AppMessages::getModel());
    pEngine->load(QUrl(QStringLiteral("qrc:/qml/MainWindowNative.qml")));
    return pEngine;
}