Browse Source

Allow replacing instrument widget with custom widget

QGC4.4
Gus Grubba 8 years ago
parent
commit
e390054d92
  1. 27
      src/FlightDisplay/FlightDisplayViewWidgets.qml
  2. 19
      src/api/QGCOptions.cc
  3. 32
      src/api/QGCOptions.h
  4. 4
      src/ui/AppSettings.qml

27
src/FlightDisplay/FlightDisplayViewWidgets.qml

@ -48,6 +48,21 @@ Item { @@ -48,6 +48,21 @@ Item {
}
function _setInstrumentWidget() {
if(QGroundControl.corePlugin.options.instrumentWidget.source.toString().length) {
instrumentsLoader.source = QGroundControl.corePlugin.options.instrumentWidget.source
switch(QGroundControl.corePlugin.options.instrumentWidget.widgetPosition) {
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 {
var useAlternateInstruments = QGroundControl.virtualTabletJoystick || ScreenTools.isTinyScreen
if(useAlternateInstruments) {
instrumentsLoader.source = "qrc:/qml/QGCInstrumentWidgetAlternate.qml"
@ -57,6 +72,7 @@ Item { @@ -57,6 +72,7 @@ Item {
instrumentsLoader.state = "centerMode"
}
}
}
Connections {
target: QGroundControl
@ -108,6 +124,7 @@ Item { @@ -108,6 +124,7 @@ Item {
AnchorChanges {
target: instrumentsLoader
anchors.verticalCenter: undefined
anchors.bottom: undefined
anchors.top: _root ? _root.top : undefined
}
},
@ -116,8 +133,18 @@ Item { @@ -116,8 +133,18 @@ Item {
AnchorChanges {
target: instrumentsLoader
anchors.top: undefined
anchors.bottom: 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
}
}
]
}

19
src/api/QGCOptions.cc

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
****************************************************************************/
#include "QGCOptions.h"
#include <QtQml>
/// @file
/// @brief Core Plugin Interface for QGroundControl - Application Options
@ -15,5 +16,23 @@ @@ -15,5 +16,23 @@
QGCOptions::QGCOptions(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)
{
}

32
src/api/QGCOptions.h

@ -11,11 +11,13 @@ @@ -11,11 +11,13 @@
#include <QObject>
#include <QString>
#include <QUrl>
/// @file
/// @brief Core Plugin Interface for QGroundControl - Application Options
/// @author Gus Grubba <mavlink@grubba.com>
class CustomInstrumentWidget;
class QGCOptions : public QObject
{
Q_OBJECT
@ -32,6 +34,8 @@ public: @@ -32,6 +34,8 @@ public:
Q_PROPERTY(double toolbarHeightMultiplier READ toolbarHeightMultiplier CONSTANT)
Q_PROPERTY(double defaultFontPointSize READ defaultFontPointSize 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)?
/*!
@ -83,4 +87,32 @@ public: @@ -83,4 +87,32 @@ public:
@return True or false
*/
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 ();
};

4
src/ui/AppSettings.qml

@ -35,8 +35,8 @@ Rectangle { @@ -35,8 +35,8 @@ Rectangle {
QGCPalette { id: qgcPal }
Component.onCompleted: {
//-- Default to General Settings
__rightPanel.source = "GeneralSettings.qml"
//-- Default Settings
__rightPanel.source = QGroundControl.corePlugin.settings[QGroundControl.corePlugin.defaltSettings].url
}
QGCFlickable {

Loading…
Cancel
Save