10 changed files with 0 additions and 349 deletions
@ -1,16 +0,0 @@ |
|||||||
|
|
||||||
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}) |
|
@ -1,121 +0,0 @@ |
|||||||
/**************************************************************************** |
|
||||||
* |
|
||||||
* (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() |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,39 +0,0 @@ |
|||||||
/****************************************************************************
|
|
||||||
* |
|
||||||
* (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; |
|
||||||
}; |
|
||||||
|
|
@ -1,85 +0,0 @@ |
|||||||
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") |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,43 +0,0 @@ |
|||||||
/****************************************************************************
|
|
||||||
* |
|
||||||
* (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()); |
|
||||||
} |
|
@ -1,39 +0,0 @@ |
|||||||
/****************************************************************************
|
|
||||||
* |
|
||||||
* (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; |
|
||||||
}; |
|
||||||
|
|
Loading…
Reference in new issue