Skip to content
Snippets Groups Projects
QGCCorePlugin.cc 5.63 KiB
Newer Older
  • Learn to ignore specific revisions
  • /****************************************************************************
     *
     *   (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.
     *
     ****************************************************************************/
    
    #include "QGCCorePlugin.h"
    #include "QGCOptions.h"
    #include "QGCSettings.h"
    
    #include "FactMetaData.h"
    
    Don Gagne's avatar
    Don Gagne committed
    #include "SettingsManager.h"
    
    
    #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
        #if defined(QT_DEBUG)
    
    DonLakeFlyer's avatar
    DonLakeFlyer committed
        #endif
    
        ~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;
        }
    
        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;
        }
    }
    
    QGCCorePlugin::QGCCorePlugin(QGCApplication *app)
        : QGCTool(app)
    
        , _showTouchAreas(false)
    
        , _showAdvancedUI(true)
    
    {
        _p = new QGCCorePlugin_p;
    }
    
    void QGCCorePlugin::setToolbox(QGCToolbox *toolbox)
    {
    
    DonLakeFlyer's avatar
    DonLakeFlyer committed
        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");
    
    QVariantList &QGCCorePlugin::settingsPages()
    
    {
        //-- If this hasn't been overridden, create default set of settings
        if(!_p->pGeneral) {
            //-- Default Settings
    
    Gus Grubba's avatar
    Gus Grubba committed
            _p->pGeneral = new QGCSettings(tr("General"),
    
    DonLakeFlyer's avatar
    DonLakeFlyer committed
                                           QUrl::fromUserInput("qrc:/qml/GeneralSettings.qml"),
                                           QUrl::fromUserInput("qrc:/res/gear-white.svg"));
    
    Gus Grubba's avatar
    Gus Grubba committed
            _p->settingsList.append(QVariant::fromValue((QGCSettings*)_p->pGeneral));
            _p->pCommLinks = new QGCSettings(tr("Comm Links"),
    
    DonLakeFlyer's avatar
    DonLakeFlyer committed
                                             QUrl::fromUserInput("qrc:/qml/LinkSettings.qml"),
                                             QUrl::fromUserInput("qrc:/res/waves.svg"));
    
    Gus Grubba's avatar
    Gus Grubba committed
            _p->settingsList.append(QVariant::fromValue((QGCSettings*)_p->pCommLinks));
            _p->pOfflineMaps = new QGCSettings(tr("Offline Maps"),
    
    DonLakeFlyer's avatar
    DonLakeFlyer committed
                                               QUrl::fromUserInput("qrc:/qml/OfflineMap.qml"),
                                               QUrl::fromUserInput("qrc:/res/waves.svg"));
    
    Gus Grubba's avatar
    Gus Grubba committed
            _p->settingsList.append(QVariant::fromValue((QGCSettings*)_p->pOfflineMaps));
            _p->pMAVLink = new QGCSettings(tr("MAVLink"),
    
    DonLakeFlyer's avatar
    DonLakeFlyer committed
                                           QUrl::fromUserInput("qrc:/qml/MavlinkSettings.qml"),
                                           QUrl::fromUserInput("qrc:/res/waves.svg"));
    
    Gus Grubba's avatar
    Gus Grubba committed
            _p->settingsList.append(QVariant::fromValue((QGCSettings*)_p->pMAVLink));
            _p->pConsole = new QGCSettings(tr("Console"),
    
    DonLakeFlyer's avatar
    DonLakeFlyer committed
                                           QUrl::fromUserInput("qrc:/qml/QGroundControl/Controls/AppMessages.qml"));
    
    Gus Grubba's avatar
    Gus Grubba committed
            _p->settingsList.append(QVariant::fromValue((QGCSettings*)_p->pConsole));
    
    DonLakeFlyer's avatar
    DonLakeFlyer committed
    #if defined(QT_DEBUG)
    
            //-- These are always present on Debug builds
    
    Gus Grubba's avatar
    Gus Grubba committed
            _p->pMockLink = new QGCSettings(tr("Mock Link"),
    
    DonLakeFlyer's avatar
    DonLakeFlyer committed
                                            QUrl::fromUserInput("qrc:/qml/MockLink.qml"));
    
    Gus Grubba's avatar
    Gus Grubba committed
            _p->settingsList.append(QVariant::fromValue((QGCSettings*)_p->pMockLink));
            _p->pDebug = new QGCSettings(tr("Debug"),
    
    DonLakeFlyer's avatar
    DonLakeFlyer committed
                                         QUrl::fromUserInput("qrc:/qml/DebugWindow.qml"));
    
    Gus Grubba's avatar
    Gus Grubba committed
            _p->settingsList.append(QVariant::fromValue((QGCSettings*)_p->pDebug));
    
    DonLakeFlyer's avatar
    DonLakeFlyer committed
    #endif
    
    int QGCCorePlugin::defaultSettings()
    
    QGCOptions* QGCCorePlugin::options()
    {
        if(!_p->defaultOptions) {
            _p->defaultOptions = new QGCOptions();
        }
        return _p->defaultOptions;
    }
    
    
    bool QGCCorePlugin::overrideSettingsGroupVisibility(QString name)
    {
        Q_UNUSED(name);
    
        // Always show all
        return true;
    }
    
    
    bool QGCCorePlugin::adjustSettingMetaData(FactMetaData& metaData)
    {
    
    Don Gagne's avatar
    Don Gagne committed
        if (metaData.name() == AppSettings::indoorPaletteName) {
            // Set up correct default for palette setting
            QVariant outdoorPalette;
    #if defined (__mobile__)
            outdoorPalette = 0;
    #else
            outdoorPalette = 1;
    #endif
            metaData.setRawDefaultValue(outdoorPalette);
        }
    
    
        return true;        // Show setting in ui
    }
    
    DonLakeFlyer's avatar
    DonLakeFlyer committed
    
    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);
        }
    }