Commit e390054d authored by Gus Grubba's avatar Gus Grubba

Allow replacing instrument widget with custom widget

parent dd4de906
...@@ -15,12 +15,12 @@ import QtQuick.Dialogs 1.2 ...@@ -15,12 +15,12 @@ import QtQuick.Dialogs 1.2
import QtLocation 5.3 import QtLocation 5.3
import QtPositioning 5.2 import QtPositioning 5.2
import QGroundControl 1.0 import QGroundControl 1.0
import QGroundControl.ScreenTools 1.0 import QGroundControl.ScreenTools 1.0
import QGroundControl.Controls 1.0 import QGroundControl.Controls 1.0
import QGroundControl.Palette 1.0 import QGroundControl.Palette 1.0
import QGroundControl.Vehicle 1.0 import QGroundControl.Vehicle 1.0
import QGroundControl.FlightMap 1.0 import QGroundControl.FlightMap 1.0
Item { Item {
id: _root id: _root
...@@ -48,13 +48,29 @@ Item { ...@@ -48,13 +48,29 @@ Item {
} }
function _setInstrumentWidget() { function _setInstrumentWidget() {
var useAlternateInstruments = QGroundControl.virtualTabletJoystick || ScreenTools.isTinyScreen if(QGroundControl.corePlugin.options.instrumentWidget.source.toString().length) {
if(useAlternateInstruments) { instrumentsLoader.source = QGroundControl.corePlugin.options.instrumentWidget.source
instrumentsLoader.source = "qrc:/qml/QGCInstrumentWidgetAlternate.qml" switch(QGroundControl.corePlugin.options.instrumentWidget.widgetPosition) {
instrumentsLoader.state = "topMode" case CustomInstrumentWidget.POS_TOP_RIGHT:
instrumentsLoader.state = "topMode"
break;
case CustomInstrumentWidget.POS_BOTTOM_RIGHT:
instrumentsLoader.state = "bottomMode"
break;
case CustomInstrumentWidget.POS_CENTER_RIGHT:
default:
instrumentsLoader.state = "centerMode"
break;
}
} else { } else {
instrumentsLoader.source = "qrc:/qml/QGCInstrumentWidget.qml" var useAlternateInstruments = QGroundControl.virtualTabletJoystick || ScreenTools.isTinyScreen
instrumentsLoader.state = "centerMode" if(useAlternateInstruments) {
instrumentsLoader.source = "qrc:/qml/QGCInstrumentWidgetAlternate.qml"
instrumentsLoader.state = "topMode"
} else {
instrumentsLoader.source = "qrc:/qml/QGCInstrumentWidget.qml"
instrumentsLoader.state = "centerMode"
}
} }
} }
...@@ -108,6 +124,7 @@ Item { ...@@ -108,6 +124,7 @@ Item {
AnchorChanges { AnchorChanges {
target: instrumentsLoader target: instrumentsLoader
anchors.verticalCenter: undefined anchors.verticalCenter: undefined
anchors.bottom: undefined
anchors.top: _root ? _root.top : undefined anchors.top: _root ? _root.top : undefined
} }
}, },
...@@ -116,8 +133,18 @@ Item { ...@@ -116,8 +133,18 @@ Item {
AnchorChanges { AnchorChanges {
target: instrumentsLoader target: instrumentsLoader
anchors.top: undefined anchors.top: undefined
anchors.bottom: undefined
anchors.verticalCenter: _root ? _root.verticalCenter : undefined anchors.verticalCenter: _root ? _root.verticalCenter : undefined
} }
},
State {
name: "bottomMode"
AnchorChanges {
target: instrumentsLoader
anchors.top: undefined
anchors.verticalCenter: undefined
anchors.bottom: _root ? _root.bottom : undefined
}
} }
] ]
} }
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
****************************************************************************/ ****************************************************************************/
#include "QGCOptions.h" #include "QGCOptions.h"
#include <QtQml>
/// @file /// @file
/// @brief Core Plugin Interface for QGroundControl - Application Options /// @brief Core Plugin Interface for QGroundControl - Application Options
...@@ -15,5 +16,23 @@ ...@@ -15,5 +16,23 @@
QGCOptions::QGCOptions(QObject* parent) QGCOptions::QGCOptions(QObject* parent)
: QObject(parent) : QObject(parent)
, _defaultInstrumentWidget(NULL)
{ {
qmlRegisterUncreatableType<CustomInstrumentWidget>("QGroundControl", 1, 0, "CustomInstrumentWidget", "Reference only");
} }
CustomInstrumentWidget*
QGCOptions::instrumentWidget()
{
if(!_defaultInstrumentWidget) {
_defaultInstrumentWidget = new CustomInstrumentWidget(this);
}
return _defaultInstrumentWidget;
}
CustomInstrumentWidget::CustomInstrumentWidget(QObject* parent)
: QObject(parent)
{
}
...@@ -11,11 +11,13 @@ ...@@ -11,11 +11,13 @@
#include <QObject> #include <QObject>
#include <QString> #include <QString>
#include <QUrl>
/// @file /// @file
/// @brief Core Plugin Interface for QGroundControl - Application Options /// @brief Core Plugin Interface for QGroundControl - Application Options
/// @author Gus Grubba <mavlink@grubba.com> /// @author Gus Grubba <mavlink@grubba.com>
class CustomInstrumentWidget;
class QGCOptions : public QObject class QGCOptions : public QObject
{ {
Q_OBJECT Q_OBJECT
...@@ -32,6 +34,8 @@ public: ...@@ -32,6 +34,8 @@ public:
Q_PROPERTY(double toolbarHeightMultiplier READ toolbarHeightMultiplier CONSTANT) Q_PROPERTY(double toolbarHeightMultiplier READ toolbarHeightMultiplier CONSTANT)
Q_PROPERTY(double defaultFontPointSize READ defaultFontPointSize CONSTANT) Q_PROPERTY(double defaultFontPointSize READ defaultFontPointSize CONSTANT)
Q_PROPERTY(bool enablePlanViewSelector READ enablePlanViewSelector CONSTANT) Q_PROPERTY(bool enablePlanViewSelector READ enablePlanViewSelector CONSTANT)
Q_PROPERTY(CustomInstrumentWidget* instrumentWidget READ instrumentWidget CONSTANT)
//! Should QGC hide its settings menu and colapse it into one single menu (Settings and Vehicle Setup)? //! Should QGC hide its settings menu and colapse it into one single menu (Settings and Vehicle Setup)?
/*! /*!
...@@ -83,4 +87,32 @@ public: ...@@ -83,4 +87,32 @@ public:
@return True or false @return True or false
*/ */
virtual bool enablePlanViewSelector () { return true; } virtual bool enablePlanViewSelector () { return true; }
//! Provides an alternate instrument widget for the Fly View
/*!
@return An alternate widget (see QGCInstrumentWidget.qml, the default widget)
*/
virtual CustomInstrumentWidget* instrumentWidget();
private:
CustomInstrumentWidget* _defaultInstrumentWidget;
};
//-----------------------------------------------------------------------------
class CustomInstrumentWidget : public QObject
{
Q_OBJECT
public:
//-- Widget Position
enum Pos {
POS_TOP_RIGHT = 0,
POS_CENTER_RIGHT = 1,
POS_BOTTOM_RIGHT = 2,
};
Q_ENUMS(Pos)
CustomInstrumentWidget(QObject* parent = NULL);
Q_PROPERTY(QUrl source READ source CONSTANT)
Q_PROPERTY(Pos widgetPosition READ widgetPosition NOTIFY widgetPositionChanged)
virtual QUrl source () { return QUrl(); }
virtual Pos widgetPosition () { return POS_CENTER_RIGHT; }
signals:
void widgetPositionChanged ();
}; };
...@@ -35,8 +35,8 @@ Rectangle { ...@@ -35,8 +35,8 @@ Rectangle {
QGCPalette { id: qgcPal } QGCPalette { id: qgcPal }
Component.onCompleted: { Component.onCompleted: {
//-- Default to General Settings //-- Default Settings
__rightPanel.source = "GeneralSettings.qml" __rightPanel.source = QGroundControl.corePlugin.settings[QGroundControl.corePlugin.defaltSettings].url
} }
QGCFlickable { QGCFlickable {
......
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