diff --git a/src/ViewWidgets/CustomCommandWidget.qml b/src/ViewWidgets/CustomCommandWidget.qml index c73ed1635d7dd5941018be2d1d9bbdb4dab0e1af..e937aef5ee105664e42899e091a72c9a8ce64c83 100644 --- a/src/ViewWidgets/CustomCommandWidget.qml +++ b/src/ViewWidgets/CustomCommandWidget.qml @@ -7,25 +7,25 @@ * ****************************************************************************/ - -/// @file -/// @author Don Gagne - 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 QGCView { + id: qgcView viewPanel: panel - property real _margins: ScreenTools.defaultFontPixelHeight - property string _emptyText: "

" + + 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: "

" + "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. " + @@ -34,29 +34,42 @@ QGCView { "So make sure to test your changes thoroughly before using them in flight.

" + "

Click 'Load Custom Qml file' to provide your custom qml file.

" + "

Click 'Reset' to reset to none.

" + - "

Example usage: http://www.qgroundcontrol.org/custom_command_qml_widgets

" + "

Example usage: http://https://dev.qgroundcontrol.com/en/tools/custom_command_widget.html

" + + QGCPalette { id: qgcPal; colorGroupEnabled: enabled } + + CustomCommandWidgetController { + id: controller + factPanel: panel + + onCustomQmlFileChanged: _updateLoader() + } - QGCPalette { id: qgcPal; colorGroupEnabled: enabled } - CustomCommandWidgetController { id: controller; factPanel: panel } + 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 + } + } + } QGCViewPanel { id: panel anchors.fill: parent + Rectangle { anchors.fill: parent color: qgcPal.window - QGCLabel { - id: textOutput - anchors.margins: _margins - anchors.left: parent.left - anchors.right: parent.right - anchors.top: parent.top - anchors.bottom: buttonRow.top - wrapMode: Text.WordWrap - textFormat: Text.RichText - text: _emptyText - visible: !loader.visible - } + Loader { id: loader anchors.margins: _margins @@ -64,37 +77,42 @@ QGCView { anchors.right: parent.right anchors.top: parent.top anchors.bottom: buttonRow.top - source: controller.customQmlFile visible: false + onStatusChanged: { - loader.visible = true if (loader.status == Loader.Error) { - if (sourceComponent.status == Component.Error) { - textOutput.text = sourceComponent.errorString() - loader.visible = false - } + textOutput.text = sourceComponent.errorString() + } else if (loader.status == Loader.Ready) { + loader.visible = true } } } + + QGCLabel { + id: textOutput + anchors.fill: loader + wrapMode: Text.WordWrap + textFormat: Text.RichText + visible: !loader.visible + } + 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() - loader.visible = false - textOutput.text = _emptyText - } + onClicked: controller.clearQmlFile() } } } diff --git a/src/ViewWidgets/CustomCommandWidgetController.cc b/src/ViewWidgets/CustomCommandWidgetController.cc index 071a477b052635845e8e181394ba56d37bdbbdd6..70d329938d173f7d538c4687f752abb79ba87800 100644 --- a/src/ViewWidgets/CustomCommandWidgetController.cc +++ b/src/ViewWidgets/CustomCommandWidgetController.cc @@ -28,7 +28,6 @@ CustomCommandWidgetController::CustomCommandWidgetController(void) : } QSettings settings; _customQmlFile = settings.value(_settingsKey).toString(); - connect(qgcApp()->toolbox()->multiVehicleManager(), &MultiVehicleManager::activeVehicleChanged, this, &CustomCommandWidgetController::_activeVehicleChanged); } void CustomCommandWidgetController::sendCommand(int commandId, QVariant componentId, QVariant confirm, QVariant param1, QVariant param2, QVariant param3, QVariant param4, QVariant param5, QVariant param6, QVariant param7) @@ -43,13 +42,6 @@ void CustomCommandWidgetController::sendCommand(int commandId, QVariant componen } } -void CustomCommandWidgetController::_activeVehicleChanged(Vehicle* activeVehicle) -{ - if (activeVehicle) { - _vehicle = activeVehicle; - } -} - void CustomCommandWidgetController::selectQmlFile(void) { QSettings settings; diff --git a/src/ViewWidgets/CustomCommandWidgetController.h b/src/ViewWidgets/CustomCommandWidgetController.h index 514e7a69225c2290d06b250c82d11839a9c7813b..c507c70c155137878d2444b69e98f9c2dd2d3c0b 100644 --- a/src/ViewWidgets/CustomCommandWidgetController.h +++ b/src/ViewWidgets/CustomCommandWidgetController.h @@ -32,9 +32,6 @@ public: signals: void customQmlFileChanged (const QString& customQmlFile); -private slots: - void _activeVehicleChanged (Vehicle* activeVehicle); - private: Vehicle* _vehicle; QString _customQmlFile;