diff --git a/QGCApplication.pro b/QGCApplication.pro index 58f700c779b912d2b5c1641d0a278965f7d5ab03..394d6bacabf978f0473b178f8efad0cc9a0e41a7 100644 --- a/QGCApplication.pro +++ b/QGCApplication.pro @@ -335,7 +335,6 @@ HEADERS += \ src/ui/WaypointViewOnlyView.h \ src/ViewWidgets/CustomCommandWidget.h \ src/ViewWidgets/CustomCommandWidgetController.h \ - src/ViewWidgets/ParameterEditorWidget.h \ src/ViewWidgets/ViewWidgetController.h \ src/MissionItem.h \ src/AutoPilotPlugins/PX4/PX4AirframeLoader.h @@ -464,7 +463,6 @@ SOURCES += \ src/ui/WaypointViewOnlyView.cc \ src/ViewWidgets/CustomCommandWidget.cc \ src/ViewWidgets/CustomCommandWidgetController.cc \ - src/ViewWidgets/ParameterEditorWidget.cc \ src/ViewWidgets/ViewWidgetController.cc \ src/MissionItem.cc \ src/AutoPilotPlugins/PX4/PX4AirframeLoader.cc diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc index 117e51de5cdad1286e0aba24a76177f33635261c..34396fe3381a42bc3984c2e630b007e6af047dfe 100644 --- a/qgroundcontrol.qrc +++ b/qgroundcontrol.qrc @@ -110,7 +110,6 @@ src/VehicleSetup/SetupParameterEditor.qml src/QmlControls/ScreenToolsFontQuery.qml - src/ViewWidgets/ParameterEditorWidget.qml src/ViewWidgets/CustomCommandWidget.qml src/AutoPilotPlugins/PX4/SafetyComponent.qml src/AutoPilotPlugins/PX4/RadioComponent.qml diff --git a/src/AutoPilotPlugins/AutoPilotPlugin.cc b/src/AutoPilotPlugins/AutoPilotPlugin.cc index 22e5fadb7480269ede5820e93c3a040427a6ae4b..c8dfa0cce771ac4a65ce325616eb4ab31f2b7297 100644 --- a/src/AutoPilotPlugins/AutoPilotPlugin.cc +++ b/src/AutoPilotPlugins/AutoPilotPlugin.cc @@ -157,9 +157,9 @@ Fact* AutoPilotPlugin::getFact(FactSystem::Provider_t provider, int componentId, return NULL; } -QStringList AutoPilotPlugin::parameterNames(void) +QStringList AutoPilotPlugin::parameterNames(int componentId) { - return _getParameterLoader()->parameterNames(); + return _getParameterLoader()->parameterNames(componentId); } const QMap >& AutoPilotPlugin::getGroupMap(void) diff --git a/src/AutoPilotPlugins/AutoPilotPlugin.h b/src/AutoPilotPlugins/AutoPilotPlugin.h index 6a8b66172ef0a9971b7a5470f6098d6f0eacd9d1..47ac288a2f7a1c1aa7723b6b7bf092d424ae2d51 100644 --- a/src/AutoPilotPlugins/AutoPilotPlugin.h +++ b/src/AutoPilotPlugins/AutoPilotPlugin.h @@ -81,8 +81,7 @@ public: Q_INVOKABLE bool parameterExists(int componentId, const QString& name); /// Returns all parameter names - /// FIXME: component id missing, generic to fact - QStringList parameterNames(void); + QStringList parameterNames(int componentId); /// Returns the specified parameter Fact from the default component /// WARNING: Returns a default Fact if parameter does not exists. If that possibility exists, check for existince first with diff --git a/src/FactSystem/ParameterLoader.cc b/src/FactSystem/ParameterLoader.cc index fdc526d767b8f1fa8e1677a1705fd8f06b8db854..dbfce638cb0eeac2c49a0015664db1cebb73a275 100644 --- a/src/FactSystem/ParameterLoader.cc +++ b/src/FactSystem/ParameterLoader.cc @@ -388,11 +388,11 @@ Fact* ParameterLoader::getFact(int componentId, const QString& name) return _mapParameterName2Variant[componentId][name].value(); } -QStringList ParameterLoader::parameterNames(void) +QStringList ParameterLoader::parameterNames(int componentId) { QStringList names; - foreach(QString paramName, _mapParameterName2Variant[_defaultComponentId].keys()) { + foreach(QString paramName, _mapParameterName2Variant[_actualComponentId(componentId)].keys()) { names << paramName; } diff --git a/src/FactSystem/ParameterLoader.h b/src/FactSystem/ParameterLoader.h index 9a4cb99f620bf27c91cfdde0a457eb4ec998cf92..3580406d1f4a259a81321420b4cd53a0d9f6ce3b 100644 --- a/src/FactSystem/ParameterLoader.h +++ b/src/FactSystem/ParameterLoader.h @@ -69,8 +69,7 @@ public: const QString& name); ///< fact name /// Returns all parameter names - /// FIXME: component id missing - QStringList parameterNames(void); + QStringList parameterNames(int componentId); /// Returns the specified Fact. /// WARNING: Will assert if parameter does not exists. If that possibily exists, check for existince first with diff --git a/src/QmlControls/ParameterEditor.qml b/src/QmlControls/ParameterEditor.qml index a518c3755764f9df2a08fa0bfa61b7cb7be0a0b5..64378485fd1739f4cc66249396a2ffd5eba16a20 100644 --- a/src/QmlControls/ParameterEditor.qml +++ b/src/QmlControls/ParameterEditor.qml @@ -39,9 +39,6 @@ import QGroundControl.FactControls 1.0 QGCView { viewPanel: panel - /// true: show full information, false: for use in smaller widgets - property bool fullMode: true - QGCPalette { id: __qgcPal; colorGroupEnabled: true } property Fact __editorDialogFact: Fact { } @@ -49,6 +46,9 @@ QGCView { readonly property real __rightMargin: 20 readonly property int __maxParamChars: 16 + property bool _searchFilter: false ///< true: showing results of search + property var _searchResults ///< List of parameter names from search results + ParameterEditorController { id: controller; factPanel: panel @@ -64,6 +64,68 @@ QGCView { ParameterEditorDialog { fact: __editorDialogFact } } // Component - Editor Dialog + Component { + id: searchDialogComponent + + QGCViewDialog { + + function accept() { + _searchResults = controller.searchParametersForComponent(-1, searchFor.text, true /*searchInName.checked*/, true /*searchInDescriptions.checked*/) + _searchFilter = true + hideDialog() + } + + function reject() { + _searchFilter = false + hideDialog() + } + + QGCLabel { + id: searchForLabel + text: "Search for:" + } + + QGCTextField { + id: searchFor + anchors.topMargin: defaultTextHeight / 3 + anchors.top: searchForLabel.bottom + width: defaultTextWidth * 20 + } + +/* + // Leaving in for possible future use. We'll see if needed from user comments. + QGCLabel { + id: searchInLabel + anchors.topMargin: defaultTextHeight + anchors.top: searchFor.bottom + text: "Search in:" + } + + QGCCheckBox { + id: searchInName + anchors.topMargin: defaultTextHeight / 3 + anchors.top: searchInLabel.bottom + text: "Name" + } + + QGCCheckBox { + id: searchInDescriptions + anchors.topMargin: defaultTextHeight / 3 + anchors.top: searchInName.bottom + text: "Descriptions" + } +*/ + + QGCLabel { + anchors.topMargin: defaultTextHeight + anchors.top: searchFor.bottom + width: parent.width + wrapMode: Text.WordWrap + text: "Hint: Leave 'Search For' blank and click Apply to list all parameters sorted by name." + } + } + } + Component { id: factRowsComponent @@ -84,7 +146,7 @@ QGCView { } Repeater { - model: controller.getFactsForGroup(componentId, group) + model: parameterNames Column { property Fact modelFact: controller.getParameterFact(componentId, modelData) @@ -116,7 +178,6 @@ QGCView { height: parent.height anchors.left: valueLabel.right verticalAlignment: Text.AlignVCenter - visible: fullMode text: modelFact.shortDescription } @@ -126,7 +187,7 @@ QGCView { onClicked: { __editorDialogFact = modelFact - showDialog(editorDialogComponent, "Parameter Editor", fullMode ? 50 : -1, StandardButton.Cancel | StandardButton.Save) + showDialog(editorDialogComponent, "Parameter Editor", 50, StandardButton.Cancel | StandardButton.Save) } } } @@ -142,6 +203,106 @@ QGCView { } // Column - Facts } // Component - factRowsComponent + Component { + id: groupedViewComponent + + Item { + ScrollView { + id : groupScroll + width: defaultTextWidth * 25 + height: parent.height + + Column { + Repeater { + model: controller.componentIds + + Column { + id: componentColumn + + readonly property int componentId: parseInt(modelData) + + QGCLabel { + height: contentHeight + (ScreenTools.defaultFontPixelHeight * 0.5) + text: "Component #: " + componentId.toString() + verticalAlignment: Text.AlignVCenter + font.pixelSize: ScreenTools.mediumFontPixelSize + } + + Repeater { + model: controller.getGroupsForComponent(componentColumn.componentId) + + Column { + QGCButton { + x: __leftMargin + width: groupScroll.width - __leftMargin - __rightMargin + text: modelData + + onClicked: { + factRowsLoader.sourceComponent = null + factRowsLoader.componentId = componentId + factRowsLoader.group = modelData + factRowsLoader.sourceComponent = factRowsComponent + } + } + + Item { + width: 1 + height: ScreenTools.defaultFontPixelSize * 0.25 + } + } // Column - Group + } // Repeater - Groups + + Item { + height: 10 + width: 10 + } + } // Column - Component + } // Repeater - Components + } // Column - Component + } // ScrollView - Groups + + ScrollView { + id: factScrollView + anchors.left: groupScroll.right + anchors.right: parent.right + height: parent.height + + Loader { + id: factRowsLoader + width: factScrollView.width + sourceComponent: factRowsComponent + + property int componentId: controller.componentIds[0] + property string group: controller.getGroupsForComponent(controller.componentIds[0])[0] + property var parameterNames: controller.getParametersForGroup(componentId, group) + } + } // ScrollView - Facts + } // Item + } // Component - groupedViewComponent + + Component { + id: searchResultsViewComponent + + Item { + ScrollView { + id: factScrollView + anchors.left: parent.left + anchors.right: parent.right + height: parent.height + + Loader { + id: factRowsLoader + width: factScrollView.width + sourceComponent: factRowsComponent + + property int componentId: -1 + property string group: "Search results" + property var parameterNames: _searchResults + } + } // ScrollView - Facts + } // Item + } // Component - sortedViewComponent + QGCViewPanel { id: panel anchors.fill: parent @@ -155,8 +316,8 @@ QGCView { height: toolsButton.height QGCLabel { + id: titleText font.pixelSize: ScreenTools.largeFontPixelSize - visible: fullMode text: "PARAMETER EDITOR" } @@ -174,15 +335,17 @@ QGCView { text: "Reset all to defaults" onTriggered: controller.resetAllToDefaults() } + MenuItem { + text: "Search..." + onTriggered: showDialog(searchDialogComponent, "Parameter Search", 50, StandardButton.Reset | StandardButton.Apply) + } MenuSeparator { } MenuItem { - text: "Load from file" - visible: fullMode + text: "Load from file..." onTriggered: controller.loadFromFile() } MenuItem { - text: "Save to file" - visible: fullMode + text: "Save to file..." onTriggered: controller.saveToFile() } MenuSeparator { } @@ -200,80 +363,11 @@ QGCView { width: 5 } - Item { - width: parent.width - height: parent.height - (lastSpacer.y + lastSpacer.height) - - ScrollView { - id : groupScroll - width: defaultTextWidth * 25 - height: parent.height - - Column { - Repeater { - model: controller.componentIds - - Column { - id: componentColumn - - readonly property int componentId: parseInt(modelData) - - QGCLabel { - height: contentHeight + (ScreenTools.defaultFontPixelHeight * 0.5) - text: "Component #: " + componentId.toString() - verticalAlignment: Text.AlignVCenter - font.pixelSize: ScreenTools.mediumFontPixelSize - } - - Repeater { - model: controller.getGroupsForComponent(componentColumn.componentId) - - Column { - QGCButton { - x: __leftMargin - width: groupScroll.width - __leftMargin - __rightMargin - text: modelData - - onClicked: { - factRowsLoader.sourceComponent = null - factRowsLoader.componentId = componentId - factRowsLoader.group = modelData - factRowsLoader.sourceComponent = factRowsComponent - } - } - - Item { - width: 1 - height: ScreenTools.defaultFontPixelSize * 0.25 - } - } // Column - Group - } // Repeater - Groups - - Item { - height: 10 - width: 10 - } - } // Column - Component - } // Repeater - Components - } // Column - Component - } // ScrollView - Groups - - ScrollView { - id: factScrollView - anchors.left: groupScroll.right - anchors.right: parent.right - height: parent.height - - Loader { - id: factRowsLoader - width: factScrollView.width - - property int componentId: controller.componentIds[0] - property string group: controller.getGroupsForComponent(controller.componentIds[0])[0] - sourceComponent: factRowsComponent - } - } // ScrollView - Facts - } // Item - Group ScrollView + Facts + Loader { + width: parent.width + height: parent.height - (lastSpacer.y + lastSpacer.height) + sourceComponent: _searchFilter ? searchResultsViewComponent: groupedViewComponent + } } // Column - Outer } // QGCViewPanel } // QGCView diff --git a/src/QmlControls/ParameterEditorController.cc b/src/QmlControls/ParameterEditorController.cc index 9762a21715c0415a8a3a09765b6fb2f453176e23..bf6eb4871b40d3a893f92d18e186d8794d23044a 100644 --- a/src/QmlControls/ParameterEditorController.cc +++ b/src/QmlControls/ParameterEditorController.cc @@ -53,13 +53,35 @@ QStringList ParameterEditorController::getGroupsForComponent(int componentId) return groupMap[componentId].keys(); } -QStringList ParameterEditorController::getFactsForGroup(int componentId, QString group) +QStringList ParameterEditorController::getParametersForGroup(int componentId, QString group) { const QMap >& groupMap = _autopilot->getGroupMap(); return groupMap[componentId][group]; } +QStringList ParameterEditorController::searchParametersForComponent(int componentId, const QString& searchText, bool searchInName, bool searchInDescriptions) +{ + QStringList list; + + foreach(QString paramName, _autopilot->parameterNames(componentId)) { + if (searchText.isEmpty()) { + list += paramName; + } else { + Fact* fact = _autopilot->getParameterFact(componentId, paramName); + + if (searchInName && fact->name().contains(searchText, Qt::CaseInsensitive)) { + list += paramName; + } else if (searchInDescriptions && (fact->shortDescription().contains(searchText, Qt::CaseInsensitive) || fact->longDescription().contains(searchText, Qt::CaseInsensitive))) { + list += paramName; + } + } + } + list.sort(); + + return list; +} + void ParameterEditorController::clearRCToParam(void) { Q_ASSERT(_uas); diff --git a/src/QmlControls/ParameterEditorController.h b/src/QmlControls/ParameterEditorController.h index b0ecde67076f34facfc5ec82772233d76b3db68f..a1db2225ee6c0657ac2b0cb86810a730cad88cb5 100644 --- a/src/QmlControls/ParameterEditorController.h +++ b/src/QmlControls/ParameterEditorController.h @@ -45,7 +45,8 @@ public: Q_PROPERTY(QStringList componentIds MEMBER _componentIds CONSTANT) Q_INVOKABLE QStringList getGroupsForComponent(int componentId); - Q_INVOKABLE QStringList getFactsForGroup(int componentId, QString group); + Q_INVOKABLE QStringList getParametersForGroup(int componentId, QString group); + Q_INVOKABLE QStringList searchParametersForComponent(int componentId, const QString& searchText, bool searchInName, bool searchInDescriptions); Q_INVOKABLE void clearRCToParam(void); Q_INVOKABLE void saveToFile(void); diff --git a/src/QmlControls/QGCView.qml b/src/QmlControls/QGCView.qml index c0ded49a5643623e72689ab131b7a4af23ad5f67..d2e71ac79b70ad62305dedfe13cac070898de72d 100644 --- a/src/QmlControls/QGCView.qml +++ b/src/QmlControls/QGCView.qml @@ -106,6 +106,9 @@ FactPanel { } else if (buttons & StandardButton.Abort) { __rejectButton.text = "Abort" __rejectButton.visible = true + } else if (buttons & StandardButton.Reset) { + __rejectButton.text = "Reset" + __rejectButton.visible = true } } diff --git a/src/VehicleSetup/SetupParameterEditor.qml b/src/VehicleSetup/SetupParameterEditor.qml index 5856f086b8046d16831e7ab8b48fcbb921e9d57c..61265880c45d22a6b136633ec04c2a43eca3c09b 100644 --- a/src/VehicleSetup/SetupParameterEditor.qml +++ b/src/VehicleSetup/SetupParameterEditor.qml @@ -29,5 +29,5 @@ import QGroundControl.ScreenTools 1.0 import QGroundControl.Palette 1.0 ParameterEditor { - fullMode: true + } diff --git a/src/ViewWidgets/ParameterEditorWidget.cc b/src/ViewWidgets/ParameterEditorWidget.cc deleted file mode 100644 index a1151c038cc68c652dde1aaa40aa98c5203736e1..0000000000000000000000000000000000000000 --- a/src/ViewWidgets/ParameterEditorWidget.cc +++ /dev/null @@ -1,37 +0,0 @@ -/*===================================================================== - -QGroundControl Open Source Ground Control Station - -(c) 2009, 2010 QGROUNDCONTROL PROJECT - -This file is part of the QGROUNDCONTROL project - - QGROUNDCONTROL is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - QGROUNDCONTROL is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with QGROUNDCONTROL. If not, see . - -======================================================================*/ - -/** - * @file - * @brief Definition of class ParameterEditorWidget - * @author Lorenz Meier - * - */ - -#include "ParameterEditorWidget.h" - -ParameterEditorWidget::ParameterEditorWidget(QWidget *parent) : - QGCQmlWidgetHolder(parent) -{ - setSource(QUrl::fromUserInput("qrc:/qml/ParameterEditorWidget.qml")); -} diff --git a/src/ViewWidgets/ParameterEditorWidget.h b/src/ViewWidgets/ParameterEditorWidget.h deleted file mode 100644 index 809d647e6d68b48b8f574d1a13f5886034f59028..0000000000000000000000000000000000000000 --- a/src/ViewWidgets/ParameterEditorWidget.h +++ /dev/null @@ -1,40 +0,0 @@ -/*===================================================================== - -QGroundControl Open Source Ground Control Station - -(c) 2009, 2015 QGROUNDCONTROL PROJECT - -This file is part of the QGROUNDCONTROL project - - QGROUNDCONTROL is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - QGROUNDCONTROL is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with QGROUNDCONTROL. If not, see . - -======================================================================*/ - -/// @file -/// @author Don Gagne - -#ifndef PARAMETEREDITORWIDGET_H -#define PARAMETEREDITORWIDGET_H - -#include "QGCQmlWidgetHolder.h" - -class ParameterEditorWidget : public QGCQmlWidgetHolder -{ - Q_OBJECT - -public: - ParameterEditorWidget(QWidget *parent = 0); -}; - -#endif diff --git a/src/ViewWidgets/ParameterEditorWidget.qml b/src/ViewWidgets/ParameterEditorWidget.qml deleted file mode 100644 index 234dee17ab79a6de8dd9d061a01c64e1527df879..0000000000000000000000000000000000000000 --- a/src/ViewWidgets/ParameterEditorWidget.qml +++ /dev/null @@ -1,42 +0,0 @@ -/*===================================================================== - -QGroundControl Open Source Ground Control Station - -(c) 2009, 2015 QGROUNDCONTROL PROJECT - -This file is part of the QGROUNDCONTROL project - -QGROUNDCONTROL is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -QGROUNDCONTROL is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with QGROUNDCONTROL. If not, see . - -======================================================================*/ - -/// @file -/// @author Don Gagne - -import QtQuick 2.2 - -import QGroundControl.Palette 1.0 -import QGroundControl.Controls 1.0 - -ViewWidget { - connectedComponent: editorComponent - - Component { - id: editorComponent - - ParameterEditor { - fullMode: false - } - } -} diff --git a/src/ui/MainWindow.cc b/src/ui/MainWindow.cc index a69a0bb2d22c2079a4d729724d29bb770e5f2ff6..dc01ef034d74a77a4c0f71066036eae6ea7316f9 100644 --- a/src/ui/MainWindow.cc +++ b/src/ui/MainWindow.cc @@ -90,7 +90,6 @@ const char* MainWindow::_uasControlDockWidgetName = "UNMANNED_SYSTEM_CONTROL_DOC const char* MainWindow::_uasListDockWidgetName = "UNMANNED_SYSTEM_LIST_DOCKWIDGET"; const char* MainWindow::_waypointsDockWidgetName = "WAYPOINT_LIST_DOCKWIDGET"; const char* MainWindow::_mavlinkDockWidgetName = "MAVLINK_INSPECTOR_DOCKWIDGET"; -const char* MainWindow::_parametersDockWidgetName = "PARAMETER_INTERFACE_DOCKWIDGET"; const char* MainWindow::_customCommandWidgetName = "CUSTOM_COMMAND_DOCKWIDGET"; const char* MainWindow::_filesDockWidgetName = "FILE_VIEW_DOCKWIDGET"; const char* MainWindow::_uasStatusDetailsDockWidgetName = "UAS_STATUS_DETAILS_DOCKWIDGET"; @@ -393,7 +392,6 @@ void MainWindow::_buildCommonWidgets(void) { _uasListDockWidgetName, "Unmanned Systems", Qt::RightDockWidgetArea }, { _waypointsDockWidgetName, "Mission Plan", Qt::BottomDockWidgetArea }, { _mavlinkDockWidgetName, "MAVLink Inspector", Qt::RightDockWidgetArea }, - { _parametersDockWidgetName, "Parameter Editor", Qt::RightDockWidgetArea }, { _customCommandWidgetName, "Custom Command", Qt::RightDockWidgetArea }, { _filesDockWidgetName, "Onboard Files", Qt::RightDockWidgetArea }, { _uasStatusDetailsDockWidgetName, "Status Details", Qt::RightDockWidgetArea }, @@ -497,8 +495,6 @@ void MainWindow::_createInnerDockWidget(const QString& widgetName) widget = new QGCWaypointListMulti(this); } else if (widgetName == _mavlinkDockWidgetName) { widget = new QGCMAVLinkInspector(MAVLinkProtocol::instance(),this); - } else if (widgetName == _parametersDockWidgetName) { - widget = new ParameterEditorWidget(this); } else if (widgetName == _customCommandWidgetName) { widget = new CustomCommandWidget(this); } else if (widgetName == _filesDockWidgetName) { diff --git a/src/ui/MainWindow.h b/src/ui/MainWindow.h index 5d64f5457abce65f9990d5575fafa1d2227586e2..ed76bbc4a887807e621182fafa674aee3b493f9e 100644 --- a/src/ui/MainWindow.h +++ b/src/ui/MainWindow.h @@ -49,7 +49,6 @@ This file is part of the QGROUNDCONTROL project #if (defined QGC_MOUSE_ENABLED_WIN) | (defined QGC_MOUSE_ENABLED_LINUX) #include "Mouse6dofInput.h" #endif // QGC_MOUSE_ENABLED_WIN -#include "ParameterEditorWidget.h" #include "opmapcontrol.h" #include "MainToolBar.h" #include "LogCompressor.h" @@ -291,7 +290,6 @@ private: static const char* _uasListDockWidgetName; static const char* _waypointsDockWidgetName; static const char* _mavlinkDockWidgetName; - static const char* _parametersDockWidgetName; static const char* _customCommandWidgetName; static const char* _filesDockWidgetName; static const char* _uasStatusDetailsDockWidgetName;