diff --git a/src/AnalyzeView/AnalyzePage.qml b/src/AnalyzeView/AnalyzePage.qml index 2a0b2ba5096e3147a42551c8dece5b29c358831f..d2706c51306cd322d8fa1bed2bcaf7adeec169b8 100644 --- a/src/AnalyzeView/AnalyzePage.qml +++ b/src/AnalyzeView/AnalyzePage.qml @@ -26,7 +26,7 @@ Item { property alias headerComponent: headerLoader.sourceComponent property real availableWidth: width - pageLoader.x property real availableHeight: height - mainContent.y - property bool poped: false + property bool popped: false property real _margins: ScreenTools.defaultFontPixelHeight * 0.5 signal popout() @@ -47,13 +47,13 @@ Item { anchors.top: parent.top anchors.left: parent.left anchors.rightMargin: _margins - anchors.right: floatIcon.left + anchors.right: floatIcon.visible ? floatIcon.left : parent.right spacing: _margins visible: !ScreenTools.isShortScreen && headerLoader.sourceComponent === null QGCLabel { id: pageNameLabel font.pointSize: ScreenTools.largeFontPointSize - visible: !poped + visible: !popped } QGCLabel { id: pageDescriptionLabel @@ -86,13 +86,10 @@ Item { source: "/qmlimages/FloatingWindow.svg" fillMode: Image.PreserveAspectFit color: qgcPal.text - visible: !poped && !ScreenTools.isMobile + visible: !popped && !ScreenTools.isMobile MouseArea { - anchors.fill: parent - onClicked: { - popout() - } + anchors.fill: parent + onClicked: popout() } } - } diff --git a/src/AnalyzeView/AnalyzeView.qml b/src/AnalyzeView/AnalyzeView.qml index c81de6cf946fd20c8d4f063741daa590c1aac99b..f63eac853689f98c44e352699548183af9f6190b 100644 --- a/src/AnalyzeView/AnalyzeView.qml +++ b/src/AnalyzeView/AnalyzeView.qml @@ -7,11 +7,6 @@ * ****************************************************************************/ - -/// @file -/// @brief Setup View -/// @author Don Gagne - import QtQuick 2.3 import QtQuick.Window 2.2 import QtQuick.Controls 1.2 @@ -23,10 +18,12 @@ import QGroundControl.Controllers 1.0 import QGroundControl.ScreenTools 1.0 Rectangle { - id: setupView + id: _root color: qgcPal.window z: QGroundControl.zOrderTopMost + signal popout() + ExclusiveGroup { id: setupButtonGroup } readonly property real _defaultTextHeight: ScreenTools.defaultFontPixelHeight @@ -147,7 +144,8 @@ Rectangle { panelLoader.source = "" buttonRepeater.itemAt(_curIndex).loader.source = source buttonRepeater.itemAt(_curIndex).visible = false - buttonRepeater.itemAt(_curIndex).loader.item.poped = true + buttonRepeater.itemAt(_curIndex).loader.item.popped = true + _root.popout() } } diff --git a/src/AnalyzeView/MAVLinkInspectorController.cc b/src/AnalyzeView/MAVLinkInspectorController.cc index f0bd85f940fa15c36b003da03b062c0650b44d84..8c6706c43bfd3efdce46ea402664c91d5e6ee7bc 100644 --- a/src/AnalyzeView/MAVLinkInspectorController.cc +++ b/src/AnalyzeView/MAVLinkInspectorController.cc @@ -179,6 +179,7 @@ QGCMAVLinkMessage::QGCMAVLinkMessage(QObject *parent, mavlink_message_t* message QGCMAVLinkMessageField* f = new QGCMAVLinkMessageField(this, msgInfo->fields[i].name, type); _fields.append(f); } + update(message); } //----------------------------------------------------------------------------- @@ -222,10 +223,7 @@ void QGCMAVLinkMessage::update(mavlink_message_t* message) { _count++; - //-- If we are not consuming this message, no need to parse it - if(!_selected && !_fieldSelected) { - return; - } + _message = *message; const mavlink_message_info_t* msgInfo = mavlink_get_message_info(message); if (!msgInfo) { @@ -454,7 +452,7 @@ QGCMAVLinkMessage::update(mavlink_message_t* message) } //----------------------------------------------------------------------------- -QGCMAVLinkVehicle::QGCMAVLinkVehicle(QObject* parent, quint8 id) +QGCMAVLinkSystem::QGCMAVLinkSystem(QObject* parent, quint8 id) : QObject(parent) , _id(id) { @@ -462,14 +460,14 @@ QGCMAVLinkVehicle::QGCMAVLinkVehicle(QObject* parent, quint8 id) } //----------------------------------------------------------------------------- -QGCMAVLinkVehicle::~QGCMAVLinkVehicle() +QGCMAVLinkSystem::~QGCMAVLinkSystem() { _messages.clearAndDeleteContents(); } //----------------------------------------------------------------------------- QGCMAVLinkMessage* -QGCMAVLinkVehicle::findMessage(uint32_t id, uint8_t cid) +QGCMAVLinkSystem::findMessage(uint32_t id, uint8_t cid) { for(int i = 0; i < _messages.count(); i++) { QGCMAVLinkMessage* m = qobject_cast(_messages.get(i)); @@ -484,7 +482,7 @@ QGCMAVLinkVehicle::findMessage(uint32_t id, uint8_t cid) //----------------------------------------------------------------------------- int -QGCMAVLinkVehicle::findMessage(QGCMAVLinkMessage* message) +QGCMAVLinkSystem::findMessage(QGCMAVLinkMessage* message) { for(int i = 0; i < _messages.count(); i++) { QGCMAVLinkMessage* m = qobject_cast(_messages.get(i)); @@ -497,7 +495,7 @@ QGCMAVLinkVehicle::findMessage(QGCMAVLinkMessage* message) //----------------------------------------------------------------------------- void -QGCMAVLinkVehicle::_resetSelection() +QGCMAVLinkSystem::_resetSelection() { for(int i = 0; i < _messages.count(); i++) { QGCMAVLinkMessage* m = qobject_cast(_messages.get(i)); @@ -510,7 +508,7 @@ QGCMAVLinkVehicle::_resetSelection() //----------------------------------------------------------------------------- void -QGCMAVLinkVehicle::setSelected(int sel) +QGCMAVLinkSystem::setSelected(int sel) { if(sel < _messages.count()) { _selected = sel; @@ -537,7 +535,7 @@ messages_sort(QObject* a, QObject* b) //----------------------------------------------------------------------------- void -QGCMAVLinkVehicle::append(QGCMAVLinkMessage* message) +QGCMAVLinkSystem::append(QGCMAVLinkMessage* message) { //-- Save selected message QGCMAVLinkMessage* selectedMsg = nullptr; @@ -572,15 +570,15 @@ QGCMAVLinkVehicle::append(QGCMAVLinkMessage* message) //----------------------------------------------------------------------------- void -QGCMAVLinkVehicle::_checkCompID(QGCMAVLinkMessage* message) +QGCMAVLinkSystem::_checkCompID(QGCMAVLinkMessage* message) { if(_compIDsStr.isEmpty()) { - _compIDsStr << tr("All"); + _compIDsStr << tr("Comp All"); } if(!_compIDs.contains(static_cast(message->cid()))) { int cid = static_cast(message->cid()); _compIDs.append(cid); - _compIDsStr << QString::number(cid); + _compIDsStr << tr("Comp %1").arg(cid); emit compIDsChanged(); } } @@ -748,7 +746,7 @@ MAVLinkInspectorController::MAVLinkInspectorController() MAVLinkInspectorController::~MAVLinkInspectorController() { _charts.clearAndDeleteContents(); - _vehicles.clearAndDeleteContents(); + _systems.clearAndDeleteContents(); } //---------------------------------------------------------------------------------------- @@ -780,24 +778,24 @@ void MAVLinkInspectorController::_setActiveVehicle(Vehicle* vehicle) { if(vehicle) { - QGCMAVLinkVehicle* v = _findVehicle(static_cast(vehicle->id())); + QGCMAVLinkSystem* v = _findVehicle(static_cast(vehicle->id())); if(v) { - _activeVehicle = v; + _activeSystem = v; } else { - _activeVehicle = nullptr; + _activeSystem = nullptr; } } else { - _activeVehicle = nullptr; + _activeSystem = nullptr; } - emit activeVehiclesChanged(); + emit activeSystemChanged(); } //----------------------------------------------------------------------------- -QGCMAVLinkVehicle* +QGCMAVLinkSystem* MAVLinkInspectorController::_findVehicle(uint8_t id) { - for(int i = 0; i < _vehicles.count(); i++) { - QGCMAVLinkVehicle* v = qobject_cast(_vehicles.get(i)); + for(int i = 0; i < _systems.count(); i++) { + QGCMAVLinkSystem* v = qobject_cast(_systems.get(i)); if(v) { if(v->id() == id) { return v; @@ -811,8 +809,8 @@ MAVLinkInspectorController::_findVehicle(uint8_t id) void MAVLinkInspectorController::_refreshFrequency() { - for(int i = 0; i < _vehicles.count(); i++) { - QGCMAVLinkVehicle* v = qobject_cast(_vehicles.get(i)); + for(int i = 0; i < _systems.count(); i++) { + QGCMAVLinkSystem* v = qobject_cast(_systems.get(i)); if(v) { for(int i = 0; i < v->messages()->count(); i++) { QGCMAVLinkMessage* m = qobject_cast(v->messages()->get(i)); @@ -828,29 +826,29 @@ MAVLinkInspectorController::_refreshFrequency() void MAVLinkInspectorController::_vehicleAdded(Vehicle* vehicle) { - QGCMAVLinkVehicle* v = _findVehicle(static_cast(vehicle->id())); + QGCMAVLinkSystem* v = _findVehicle(static_cast(vehicle->id())); if(v) { v->messages()->clearAndDeleteContents(); emit v->messagesChanged(); } else { - v = new QGCMAVLinkVehicle(this, static_cast(vehicle->id())); - _vehicles.append(v); - _vehicleNames.append(tr("Vehicle %1").arg(vehicle->id())); + v = new QGCMAVLinkSystem(this, static_cast(vehicle->id())); + _systems.append(v); + _systemNames.append(tr("System %1").arg(vehicle->id())); } - emit vehiclesChanged(); + emit systemsChanged(); } //----------------------------------------------------------------------------- void MAVLinkInspectorController::_vehicleRemoved(Vehicle* vehicle) { - QGCMAVLinkVehicle* v = _findVehicle(static_cast(vehicle->id())); + QGCMAVLinkSystem* v = _findVehicle(static_cast(vehicle->id())); if(v) { v->deleteLater(); - _vehicles.removeOne(v); - QString vs = tr("Vehicle %1").arg(vehicle->id()); - _vehicleNames.removeOne(vs); - emit vehiclesChanged(); + _systems.removeOne(v); + QString vs = tr("System %1").arg(vehicle->id()); + _systemNames.removeOne(vs); + emit systemsChanged(); } } @@ -859,15 +857,15 @@ void MAVLinkInspectorController::_receiveMessage(LinkInterface*, mavlink_message_t message) { QGCMAVLinkMessage* m = nullptr; - QGCMAVLinkVehicle* v = _findVehicle(message.sysid); + QGCMAVLinkSystem* v = _findVehicle(message.sysid); if(!v) { - v = new QGCMAVLinkVehicle(this, message.sysid); - _vehicles.append(v); - _vehicleNames.append(tr("Vehicle %1").arg(message.sysid)); - emit vehiclesChanged(); - if(!_activeVehicle) { - _activeVehicle = v; - emit activeVehiclesChanged(); + v = new QGCMAVLinkSystem(this, message.sysid); + _systems.append(v); + _systemNames.append(tr("System %1").arg(message.sysid)); + emit systemsChanged(); + if(!_activeSystem) { + _activeSystem = v; + emit activeSystemChanged(); } } else { m = v->findMessage(message.msgid, message.compid); @@ -924,3 +922,12 @@ MAVLinkInspectorController::Range_st::Range_st(QObject* parent, const QString& l { } +void MAVLinkInspectorController::setActiveSystem(int systemId) +{ + QGCMAVLinkSystem* v = _findVehicle(systemId); + if (v != _activeSystem) { + _activeSystem = v; + emit activeSystemChanged(); + } +} + diff --git a/src/AnalyzeView/MAVLinkInspectorController.h b/src/AnalyzeView/MAVLinkInspectorController.h index 2f13aaadfc642ca6a785d449a600c291473fc2a1..db5ad853b0bb991e13fa738315d04b050df84380 100644 --- a/src/AnalyzeView/MAVLinkInspectorController.h +++ b/src/AnalyzeView/MAVLinkInspectorController.h @@ -27,7 +27,7 @@ Q_DECLARE_LOGGING_CATEGORY(MAVLinkInspectorLog) QT_CHARTS_USE_NAMESPACE class QGCMAVLinkMessage; -class QGCMAVLinkVehicle; +class QGCMAVLinkSystem; class MAVLinkChartController; class MAVLinkInspectorController; @@ -137,7 +137,7 @@ private: //----------------------------------------------------------------------------- /// Vehicle MAVLink message belongs to -class QGCMAVLinkVehicle : public QObject { +class QGCMAVLinkSystem : public QObject { Q_OBJECT public: Q_PROPERTY(quint8 id READ id CONSTANT) @@ -147,8 +147,8 @@ public: Q_PROPERTY(int selected READ selected WRITE setSelected NOTIFY selectedChanged) - QGCMAVLinkVehicle (QObject* parent, quint8 id); - ~QGCMAVLinkVehicle (); + QGCMAVLinkSystem (QObject* parent, quint8 id); + ~QGCMAVLinkSystem (); quint8 id () { return _id; } QmlObjectListModel* messages () { return &_messages; } @@ -248,22 +248,23 @@ public: MAVLinkInspectorController(); ~MAVLinkInspectorController(); - Q_PROPERTY(QStringList vehicleNames READ vehicleNames NOTIFY vehiclesChanged) - Q_PROPERTY(QmlObjectListModel* vehicles READ vehicles NOTIFY vehiclesChanged) - Q_PROPERTY(QmlObjectListModel* charts READ charts NOTIFY chartsChanged) - Q_PROPERTY(QGCMAVLinkVehicle* activeVehicle READ activeVehicle NOTIFY activeVehiclesChanged) - Q_PROPERTY(QStringList timeScales READ timeScales NOTIFY timeScalesChanged) - Q_PROPERTY(QStringList rangeList READ rangeList NOTIFY rangeListChanged) + Q_PROPERTY(QStringList systemNames READ systemNames NOTIFY systemsChanged) + Q_PROPERTY(QmlObjectListModel* systems READ systems NOTIFY systemsChanged) + Q_PROPERTY(QmlObjectListModel* charts READ charts NOTIFY chartsChanged) + Q_PROPERTY(QGCMAVLinkSystem* activeSystem READ activeSystem NOTIFY activeSystemChanged) + Q_PROPERTY(QStringList timeScales READ timeScales NOTIFY timeScalesChanged) + Q_PROPERTY(QStringList rangeList READ rangeList NOTIFY rangeListChanged) Q_INVOKABLE MAVLinkChartController* createChart (); Q_INVOKABLE void deleteChart (MAVLinkChartController* chart); + Q_INVOKABLE void setActiveSystem (int systemId); - QmlObjectListModel* vehicles () { return &_vehicles; } - QmlObjectListModel* charts () { return &_charts; } - QGCMAVLinkVehicle* activeVehicle () { return _activeVehicle; } - QStringList vehicleNames () { return _vehicleNames; } - QStringList timeScales (); - QStringList rangeList (); + QmlObjectListModel* systems () { return &_systems; } + QmlObjectListModel* charts () { return &_charts; } + QGCMAVLinkSystem* activeSystem() { return _activeSystem; } + QStringList systemNames () { return _systemNames; } + QStringList timeScales (); + QStringList rangeList (); class TimeScale_st : public QObject { public: @@ -283,33 +284,33 @@ public: const QList& rangeSt () { return _rangeSt; } signals: - void vehiclesChanged (); - void chartsChanged (); - void activeVehiclesChanged (); - void timeScalesChanged (); - void rangeListChanged (); + void systemsChanged (); + void chartsChanged (); + void activeSystemChanged(); + void timeScalesChanged (); + void rangeListChanged (); private slots: - void _receiveMessage (LinkInterface* link, mavlink_message_t message); - void _vehicleAdded (Vehicle* vehicle); - void _vehicleRemoved (Vehicle* vehicle); - void _setActiveVehicle (Vehicle* vehicle); - void _refreshFrequency (); + void _receiveMessage (LinkInterface* link, mavlink_message_t message); + void _vehicleAdded (Vehicle* vehicle); + void _vehicleRemoved (Vehicle* vehicle); + void _setActiveVehicle (Vehicle* vehicle); + void _refreshFrequency (); private: - QGCMAVLinkVehicle* _findVehicle (uint8_t id); + QGCMAVLinkSystem* _findVehicle (uint8_t id); private: - int _selectedSystemID = 0; ///< Currently selected system - int _selectedComponentID = 0; ///< Currently selected component + int _selectedSystemID = 0; ///< Currently selected system + int _selectedComponentID = 0; ///< Currently selected component QStringList _timeScales; QStringList _rangeList; - QGCMAVLinkVehicle* _activeVehicle = nullptr; + QGCMAVLinkSystem* _activeSystem = nullptr; QTimer _updateFrequencyTimer; - QStringList _vehicleNames; - QmlObjectListModel _vehicles; ///< List of QGCMAVLinkVehicle - QmlObjectListModel _charts; ///< List of MAVLinkCharts + QStringList _systemNames; + QmlObjectListModel _systems; ///< List of QGCMAVLinkSystem + QmlObjectListModel _charts; ///< List of MAVLinkCharts QList_timeScaleSt; QList _rangeSt; diff --git a/src/AnalyzeView/MAVLinkInspectorPage.qml b/src/AnalyzeView/MAVLinkInspectorPage.qml index 5ebe815f7992eb89281803b067fd0155b25cf5f9..e93661db837b580c138288a908fcd77a47ff50d4 100644 --- a/src/AnalyzeView/MAVLinkInspectorPage.qml +++ b/src/AnalyzeView/MAVLinkInspectorPage.qml @@ -24,8 +24,8 @@ AnalyzePage { headerComponent: headerComponent pageComponent: pageComponent - property var curVehicle: controller ? controller.activeVehicle : null - property var curMessage: curVehicle && curVehicle.messages.count ? curVehicle.messages.get(curVehicle.selected) : null + property var curSystem: controller ? controller.activeSystem : null + property var curMessage: curSystem && curSystem.messages.count ? curSystem.messages.get(curSystem.selected) : null property int curCompID: 0 property real maxButtonWidth: 0 @@ -45,21 +45,39 @@ AnalyzePage { } RowLayout { Layout.alignment: Qt.AlignRight - visible: curVehicle ? curVehicle.compIDsStr.length > 2 : false - QGCLabel { - text: qsTr("Component ID:") + visible: curSystem ? controller.systemNames.length > 1 || curSystem.compIDsStr.length > 2 : false + QGCComboBox { + id: systemCombo + model: controller.systemNames + sizeToContents: true + visible: controller.systemNames.length > 1 + onActivated: controller.setActiveSystem(controller.systems.get(index).id); + + Connections { + target: controller + onActiveSystemChanged: { + for (var systemIndex=0; systemIndex 2 : false onActivated: { - if(curVehicle && curVehicle.compIDsStr.length > 1) { + if(curSystem && curSystem.compIDsStr.length > 1) { if(index < 1) curCompID = 0 else - curCompID = curVehicle.compIDs[index - 1] + curCompID = curSystem.compIDs[index - 1] } } } @@ -87,15 +105,15 @@ AnalyzePage { anchors.right: parent.right spacing: ScreenTools.defaultFontPixelHeight * 0.25 Repeater { - model: curVehicle ? curVehicle.messages : [] + model: curSystem ? curSystem.messages : [] delegate: MAVLinkMessageButton { text: object.name + (object.fieldSelected ? " *" : "") compID: object.cid - checked: curVehicle ? (curVehicle.selected === index) : false + checked: curSystem ? (curSystem.selected === index) : false messageHz: object.messageHz visible: curCompID === 0 || curCompID === compID onClicked: { - curVehicle.selected = index + curSystem.selected = index } Layout.fillWidth: true } diff --git a/src/ui/MainRootWindow.qml b/src/ui/MainRootWindow.qml index e8dfa4552eef1bea65ec7becc59e15737a164efa..d8d9d05a3d4be61b6d9105137905aba793df051e 100644 --- a/src/ui/MainRootWindow.qml +++ b/src/ui/MainRootWindow.qml @@ -522,6 +522,12 @@ ApplicationWindow { anchors.right: parent.right anchors.top: toolDrawerToolbar.bottom anchors.bottom: parent.bottom + + Connections { + target: toolDrawerLoader.item + ignoreUnknownSignals: true + onPopout: toolDrawer.visible = false + } } }