Commit 9e5b2616 authored by DonLakeFlyer's avatar DonLakeFlyer

parent 0c6b6556
......@@ -404,7 +404,6 @@ INCLUDEPATH += \
src/Settings \
src/Terrain \
src/Vehicle \
src/ViewWidgets \
src/Audio \
src/comm \
src/input \
......
......@@ -38,7 +38,6 @@
<file alias="BluetoothSettings.qml">src/ui/preferences/BluetoothSettings.qml</file>
<file alias="CameraPageWidget.qml">src/FlightMap/Widgets/CameraPageWidget.qml</file>
<file alias="CorridorScanEditor.qml">src/PlanView/CorridorScanEditor.qml</file>
<file alias="CustomCommandWidget.qml">src/ViewWidgets/CustomCommandWidget.qml</file>
<file alias="DebugWindow.qml">src/ui/preferences/DebugWindow.qml</file>
<file alias="ESP8266Component.qml">src/AutoPilotPlugins/Common/ESP8266Component.qml</file>
<file alias="ESP8266ComponentSummary.qml">src/AutoPilotPlugins/Common/ESP8266ComponentSummary.qml</file>
......@@ -187,7 +186,6 @@
<file alias="QGroundControl/Controls/VehicleRotationCal.qml">src/QmlControls/VehicleRotationCal.qml</file>
<file alias="QGroundControl/Controls/VehicleSummaryRow.qml">src/QmlControls/VehicleSummaryRow.qml</file>
<file alias="QGroundControl/Controls/VerticalFactValueGrid.qml">src/QmlControls/VerticalFactValueGrid.qml</file>
<file alias="QGroundControl/Controls/ViewWidget.qml">src/ViewWidgets/ViewWidget.qml</file>
<file alias="QGroundControl/Controls/VTOLLandingPatternMapVisual.qml">src/PlanView/VTOLLandingPatternMapVisual.qml</file>
<file alias="QGroundControl/FactControls/AltitudeFactTextField.qml">src/FactSystem/FactControls/AltitudeFactTextField.qml</file>
<file alias="QGroundControl/FactControls/FactBitmask.qml">src/FactSystem/FactControls/FactBitmask.qml</file>
......
......@@ -50,9 +50,7 @@
#include "QGCPalette.h"
#include "QGCMapPalette.h"
#include "QGCLoggingCategory.h"
#include "ViewWidgetController.h"
#include "ParameterEditorController.h"
#include "CustomCommandWidgetController.h"
#include "ESP8266ComponentController.h"
#include "ScreenToolsController.h"
#include "QGCFileDialogController.h"
......
......@@ -109,6 +109,5 @@ ToolStrip 1.0 ToolStrip.qml
VehicleRotationCal 1.0 VehicleRotationCal.qml
VehicleSummaryRow 1.0 VehicleSummaryRow.qml
VerticalFactValueGrid 1.0 VerticalFactValueGrid.qml
ViewWidget 1.0 ViewWidget.qml
QGCHoverButton 1.0 QGCHoverButton.qml
MAVLinkChart 1.0 MAVLinkChart.qml
add_library(ViewWidgets
ViewWidgetController.cc
)
target_link_libraries(ViewWidgets
PUBLIC
qgc
)
add_custom_target(ViewWidgetsQml
SOURCE
ViewWidget.qml
)
target_include_directories(ViewWidgets INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
/****************************************************************************
*
* (c) 2009-2020 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.
*
****************************************************************************/
import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.4
import QtQuick.Dialogs 1.2
import QGroundControl 1.0
import QGroundControl.Palette 1.0
import QGroundControl.Controls 1.0
import QGroundControl.Controllers 1.0
import QGroundControl.ScreenTools 1.0
Item {
property var _activeVehicle: QGroundControl.multiVehicleManager.parameterReadyVehicleAvailable ? QGroundControl.multiVehicleManager.activeVehicle : null
property real _margins: ScreenTools.defaultFontPixelHeight
property string _noVehicleText: qsTr("No vehicle connected")
property string _assignQmlFile: "<p>" +
"You can create your own commands and parameter editing user interface in this widget. " +
"You do this by providing your own Qml file. " +
"This support is a work in progress and the details may change somewhat in the future. " +
"By using this feature you are connecting directly to the internals of QGroundControl. " +
"Doing so incorrectly may cause instability both in QGroundControl and/or your vehicle. " +
"So make sure to test your changes thoroughly before using them in flight.</p>" +
"<p>Click 'Load Custom Qml file' to provide your custom qml file.</p>" +
"<p>Click 'Reset' to reset to none.</p>" +
"<p>Example usage: <a href='https://docs.qgroundcontrol.com/en/app_menu/custom_command_widget.html'>https://docs.qgroundcontrol.com/en/app_menu/custom_command_widget.html</a></p>"
QGCPalette { id: qgcPal; colorGroupEnabled: enabled }
CustomCommandWidgetController {
id: controller
onCustomQmlFileChanged: _updateLoader()
}
Component.onCompleted: _updateLoader()
on_ActiveVehicleChanged: _updateLoader()
function _updateLoader() {
loader.sourceComponent = undefined
loader.visible = false
textOutput.text = _noVehicleText
if (_activeVehicle) {
if (controller.customQmlFile === "") {
textOutput.text = _assignQmlFile
} else {
loader.source = controller.customQmlFile
}
}
}
Item {
anchors.fill: parent
Rectangle {
anchors.fill: parent
color: qgcPal.window
Loader {
id: loader
anchors.margins: _margins
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
anchors.bottom: buttonRow.top
visible: false
onStatusChanged: {
if (loader.status == Loader.Error) {
textOutput.text = sourceComponent.errorString()
} else if (loader.status == Loader.Ready) {
loader.visible = true
}
}
}
QGCFlickable {
id: container
anchors.fill: loader
contentHeight: textOutput.height
flickableDirection: QGCFlickable.VerticalFlick
visible: !loader.visible
QGCLabel {
id: textOutput
width: container.width
wrapMode: Text.WordWrap
textFormat: Text.RichText
onLinkActivated: Qt.openUrlExternally(link)
}
}
Row {
id: buttonRow
spacing: ScreenTools.defaultFontPixelWidth
anchors.margins: _margins
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
QGCButton {
text: qsTr("Load Custom Qml file...")
width: ScreenTools.defaultFontPixelWidth * 22
onClicked: controller.selectQmlFile()
}
QGCButton {
text: qsTr("Reset")
width: ScreenTools.defaultFontPixelWidth * 22
onClicked: controller.clearQmlFile()
}
}
}
}
}
/****************************************************************************
*
* (c) 2009-2018 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.
*
****************************************************************************/
#pragma once
#include <QObject>
#include "AutoPilotPlugin.h"
#include "FactPanelController.h"
class CustomCommandWidgetController : public FactPanelController
{
Q_OBJECT
public:
CustomCommandWidgetController(void);
Q_PROPERTY(QString customQmlFile MEMBER _customQmlFile NOTIFY customQmlFileChanged)
Q_INVOKABLE void sendCommand (int commandId, QVariant componentId, QVariant confirm, QVariant param1, QVariant param2, QVariant param3, QVariant param4, QVariant param5, QVariant param6, QVariant param7);
Q_INVOKABLE void selectQmlFile (void);
Q_INVOKABLE void clearQmlFile (void);
signals:
void customQmlFileChanged (const QString& customQmlFile);
private:
Vehicle* _vehicle;
QString _customQmlFile;
static const char* _settingsKey;
};
import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.4
import QGroundControl 1.0
import QGroundControl.Controls 1.0
import QGroundControl.Controllers 1.0
import QGroundControl.Palette 1.0
Rectangle {
property Component connectedComponent: __componentConnected
property Component disconnectedComponent: __componentDisconnected
QGCPalette { id: __qgcPal; colorGroupEnabled: enabled }
ViewWidgetController { id: __controller }
color: __qgcPal.window
Component.onCompleted: __controller.checkForVehicle()
Connections {
target: __controller
onPluginConnected: {
pageLoader.autopilot = autopilot
pageLoader.sourceComponent = connectedComponent
}
onPluginDisconnected: {
pageLoader.sourceComponent = null
pageLoader.sourceComponent = disconnectedComponent
pageLoader.autopilot = null
}
}
Loader {
id: pageLoader
anchors.fill: parent
property var autopilot
sourceComponent: __componentDisconnected
}
Component {
id: __componentConnected
Rectangle {
QGCPalette { id: __qgcPal; colorGroupEnabled: enabled }
anchors.fill: parent
color: __qgcPal.window
QGCLabel {
anchors.fill: parent
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
text: qsTr("missing connected implementation")
}
}
}
Component {
id: __componentDisconnected
Rectangle {
QGCPalette { id: __qgcPal; colorGroupEnabled: enabled }
anchors.fill: parent
color: __qgcPal.window
QGCLabel {
anchors.fill: parent
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
text: qsTr("no vehicle connected")
}
}
}
}
/****************************************************************************
*
* (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 "ViewWidgetController.h"
#include "MultiVehicleManager.h"
#include "UAS.h"
#include "QGCApplication.h"
ViewWidgetController::ViewWidgetController(void) :
_autopilot(NULL),
_uas(NULL)
{
connect(qgcApp()->toolbox()->multiVehicleManager(), &MultiVehicleManager::parameterReadyVehicleAvailableChanged, this, &ViewWidgetController::_vehicleAvailable);
}
void ViewWidgetController::_vehicleAvailable(bool available)
{
if (_uas) {
_uas = NULL;
_autopilot = NULL;
emit pluginDisconnected();
}
if (available) {
Vehicle* vehicle = qgcApp()->toolbox()->multiVehicleManager()->activeVehicle();
_uas = vehicle->uas();
_autopilot = vehicle->autopilotPlugin();
emit pluginConnected(QVariant::fromValue(_autopilot));
}
}
void ViewWidgetController::checkForVehicle(void)
{
_vehicleAvailable(qgcApp()->toolbox()->multiVehicleManager()->activeVehicle());
}
/****************************************************************************
*
* (c) 2009-2018 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.
*
****************************************************************************/
#pragma once
#include <QObject>
#include "UASInterface.h"
#include "AutoPilotPlugin.h"
#include "Vehicle.h"
class ViewWidgetController : public QObject
{
Q_OBJECT
public:
ViewWidgetController(void);
Q_INVOKABLE void checkForVehicle(void);
signals:
void pluginConnected(QVariant autopilot);
void pluginDisconnected(void);
private slots:
void _vehicleAvailable(bool available);
private:
AutoPilotPlugin* _autopilot;
UASInterface* _uas;
};
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