From 5eebb4235baaab1db8c5073d306b752f228837db Mon Sep 17 00:00:00 2001 From: Valentin Platzgummer Date: Fri, 17 Jul 2020 18:49:32 +0200 Subject: [PATCH] 456 --- qgroundcontrol.pro | 4 +- qgroundcontrol.qrc | 1 + src/FlightDisplay/FlightDisplayWimaMenu.qml | 102 +++++++++--------- src/FlightDisplay/SmallValue.qml | 41 +++++++ src/Wima/WimaController.cc | 4 +- src/comm/ros_bridge/include/JsonFactory.h | 1 + src/comm/ros_bridge/include/JsonMethodes.h | 5 +- src/comm/ros_bridge/include/ROSBridge.h | 8 +- .../{Transmitter.cpp => TopicPublisher.cpp} | 17 +-- .../{Transmitter.h => TopicPublisher.h} | 18 ++-- src/comm/ros_bridge/include/TypeFactory.h | 1 + src/comm/ros_bridge/src/ROSBridge.cpp | 6 +- 12 files changed, 128 insertions(+), 80 deletions(-) create mode 100644 src/FlightDisplay/SmallValue.qml rename src/comm/ros_bridge/include/{Transmitter.cpp => TopicPublisher.cpp} (85%) rename src/comm/ros_bridge/include/{Transmitter.h => TopicPublisher.h} (78%) diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index 381d5fcea..7edc9e5c1 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -482,7 +482,7 @@ HEADERS += \ src/comm/ros_bridge/include/Receiver.h \ src/comm/ros_bridge/include/RosBridgeClient.h \ src/comm/ros_bridge/include/ThreadSafeQueue.h \ - src/comm/ros_bridge/include/Transmitter.h \ + src/comm/ros_bridge/include/TopicPublisher.h \ src/comm/ros_bridge/include/TypeFactory.h \ src/comm/ros_bridge/src/PackageBuffer.h \ src/comm/utilities.h @@ -495,7 +495,7 @@ SOURCES += \ src/comm/ros_bridge/include/ComPrivateInclude.cpp \ src/comm/ros_bridge/include/MessageTag.cpp \ src/comm/ros_bridge/include/Receiver.cpp \ - src/comm/ros_bridge/include/Transmitter.cpp \ + src/comm/ros_bridge/include/TopicPublisher.cpp \ src/comm/ros_bridge/src/CasePacker.cpp \ src/Wima/WimaControllerDetail.cc \ src/Wima/snaketile.cpp \ diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc index 80fa382b7..3a379887c 100644 --- a/qgroundcontrol.qrc +++ b/qgroundcontrol.qrc @@ -230,6 +230,7 @@ src/PlanView/WimaMissionItemMapVisual.qml src/FlightDisplay/FlightDisplayWimaMenu.qml src/WimaView/CircularSurveyMapVisual.qml + src/FlightDisplay/SmallValue.qml src/Settings/APMMavlinkStreamRate.SettingsGroup.json diff --git a/src/FlightDisplay/FlightDisplayWimaMenu.qml b/src/FlightDisplay/FlightDisplayWimaMenu.qml index 61b86eb6a..7fd514b70 100644 --- a/src/FlightDisplay/FlightDisplayWimaMenu.qml +++ b/src/FlightDisplay/FlightDisplayWimaMenu.qml @@ -12,11 +12,15 @@ import QGroundControl.Controls 1.0 import QGroundControl.Palette 1.0 import QGroundControl.Vehicle 1.0 import QGroundControl.FlightMap 1.0 +import QGroundControl.FlightDisplay 1.0 import QGroundControl.Airspace 1.0 import QGroundControl.Airmap 1.0 import QGroundControl.FactSystem 1.0 import QGroundControl.FactControls 1.0 + +import Qt.labs.settings 1.0 + Item { id: _root height: mainFrame.height @@ -35,10 +39,20 @@ Item { property real _margins: ScreenTools.defaultFontPixelWidth / 2 + // Disabels map scrolling when cursor on this menu. DeadMouseArea { anchors.fill: parent } + // Use Settings to store menu appearance through different sessions. + Settings { + property alias snakeHeaderChecker: snakeHeader.checked + property alias missionHeaderChecker: missionHeader.checked + property alias navigateHeaderChecker: navigateHeader.checked + property alias vehicleHeaderChecker: vehicleHeader.checked + property alias statsHeaderChecker: statsHeader.checked + } + // Progress bar visibility on_ControllerProgressPctChanged: { if (_controllerProgressPct === 1) { @@ -404,88 +418,76 @@ Item { text: qsTr("Statistics") } GridLayout { - columns: 2 + columns: 3 rowSpacing: ScreenTools.defaultFontPixelHeight * 0.5 anchors.topMargin: ScreenTools.defaultFontPixelHeight * 0.5 visible: statsHeader.checked - QGCLabel { - text: qsTr("Phase Length: ") - wrapMode: Text.WordWrap - Layout.fillWidth: true + Item { + id: widthItem + + Layout.fillWidth: true + Layout.columnSpan: parent.columns + height: 0 } - QGCLabel { + SmallValue { property var phaseDistance: wimaController.phaseDistance - text: phaseDistance >= 0 ? phaseDistance.toFixed(2) + " m": "-.-" - wrapMode: Text.WordWrap - Layout.fillWidth: true + shortDescription: qsTr("Phase Length") + value: phaseDistance >= 0 ? phaseDistance.toFixed(2): "-.-" + unit: "m" + //width: widthItem.width*0.49 } - QGCLabel { - text: qsTr("Phase Duration: ") - wrapMode: Text.WordWrap - Layout.fillWidth: true - } - QGCLabel { + SmallValue { property var phaseDuration: wimaController.phaseDuration - text: phaseDuration >= 0 ? getTime(phaseDuration) : "-.-" - wrapMode: Text.WordWrap - Layout.fillWidth: true + shortDescription: qsTr("Phase Duration") + value: phaseDuration >= 0 ? getTime(phaseDuration) : "-.-" + //unit: "m" + //width: widthItem.width*0.49 } - QGCLabel { - text: qsTr("Current Waypoint: ") - wrapMode: Text.WordWrap - Layout.fillWidth: true - } - QGCLabel { + SmallValue { property var currentMissionIndex: missionController.currentMissionIndex - text: currentMissionIndex > 0 ? currentMissionIndex : "-.-" - wrapMode: Text.WordWrap - Layout.fillWidth: true + shortDescription: qsTr("Current Waypoint") + value: currentMissionIndex > 0 ? currentMissionIndex : "-.-" + //unit: "m" + //width: widthItem.width*0.49 } - QGCLabel { - text: qsTr("Remaining Distance: ") - wrapMode: Text.WordWrap - Layout.fillWidth: true - } - QGCLabel { + SmallValue { property var remainingDistance: missionController.remainingDistance - text: remainingDistance >= 0 ? remainingDistance.toFixed(2) + " m" : "-.-" - wrapMode: Text.WordWrap - Layout.fillWidth: true + shortDescription: qsTr("Remaining Distance") + value: remainingDistance >= 0 ? remainingDistance.toFixed(2) : "-.-" + unit: "m" + //width: widthItem.width*0.49 } - QGCLabel { - text: qsTr("Remaining Time: ") - wrapMode: Text.WordWrap - Layout.fillWidth: true - } - QGCLabel { + SmallValue { property var remainingTime: missionController.remainingTime - text: remainingTime >= 0 ? getTime(remainingTime) : "-.-" - wrapMode: Text.WordWrap - Layout.fillWidth: true + shortDescription: qsTr("Remaining Time") + value: remainingTime >= 0 ? getTime(remainingTime) : "-.-" + //unit: "m" + //width: widthItem.width*0.49 } - QGCLabel { // space - text: "" - Layout.columnSpan: 2 + + Item { // spacer + height: 5 + Layout.columnSpan: parent.columns } - } + } // GridLayout } // settingsColumn Item { // spacer width: 6 height: 5 } - } + } // Row } // QGCFlickable diff --git a/src/FlightDisplay/SmallValue.qml b/src/FlightDisplay/SmallValue.qml new file mode 100644 index 000000000..51e33b876 --- /dev/null +++ b/src/FlightDisplay/SmallValue.qml @@ -0,0 +1,41 @@ +import QtQuick 2.0 +import QGroundControl.Controls 1.0 +import QGroundControl.ScreenTools 1.0 +import QtQuick.Layouts 1.2 + +GridLayout { + id: main + clip: true + columns: 1 + + property string shortDescription: "Description" + property string value: "-,-" + property string unit: "" + + QGCLabel { + Layout.fillWidth: true + Layout.columnSpan: parent.columns + wrapMode: Text.WordWrap + horizontalAlignment: Text.AlignHCenter + font.pointSize: ScreenTools.isTinyScreen ? + ScreenTools.smallFontPointSize * 0.75 + : ScreenTools.smallFontPointSize + text: main.shortDescription + } + QGCLabel { + Layout.fillWidth: true + horizontalAlignment: Text.AlignHCenter + fontSizeMode: Text.HorizontalFit + text: main.value + " " + main.unit + } +// QGCLabel { +// Layout.fillWidth: true +// //width: parent.width +// horizontalAlignment: Text.AlignHCenter +// font.pointSize: ScreenTools.isTinyScreen ? +// ScreenTools.smallFontPointSize * 0.75 +// : ScreenTools.smallFontPointSize +// fontSizeMode: Text.HorizontalFit +// text: main.unit +// } +} // Column diff --git a/src/Wima/WimaController.cc b/src/Wima/WimaController.cc index 7e64d953a..2e73f5501 100644 --- a/src/Wima/WimaController.cc +++ b/src/Wima/WimaController.cc @@ -1122,7 +1122,7 @@ void WimaController::_eventTimerHandler() if (rosBridgeTicker.ready()) { // using namespace ros_bridge; - _pRosBridge->send(_snakeTilesLocal, "/snake/snake_tiles"); + _pRosBridge->publish(_snakeTilesLocal, "/snake/snake_tiles"); // // Time // class Time time(1, 2); // rapidjson::Document doc(rapidjson::kObjectType); @@ -1444,8 +1444,6 @@ void WimaController::_initSmartRTL() case UserRequest: emit returnUserRequestConfirmRequired(); break; - default: - qWarning("\nWimaController::_initSmartRTL: default case reached!"); } return; diff --git a/src/comm/ros_bridge/include/JsonFactory.h b/src/comm/ros_bridge/include/JsonFactory.h index e486c40d5..2de533126 100644 --- a/src/comm/ros_bridge/include/JsonFactory.h +++ b/src/comm/ros_bridge/include/JsonFactory.h @@ -56,6 +56,7 @@ private: rapidjson::Document *_create(const U &msg, Type2Type){ (void)msg; assert(false); // Implementation missing for group U::Group! + return nullptr; } // =========================================================================== diff --git a/src/comm/ros_bridge/include/JsonMethodes.h b/src/comm/ros_bridge/include/JsonMethodes.h index 7bcd6c3a0..8d62f1032 100644 --- a/src/comm/ros_bridge/include/JsonMethodes.h +++ b/src/comm/ros_bridge/include/JsonMethodes.h @@ -591,7 +591,7 @@ using namespace ROSBridge::JsonMethodes::GeometryMsgs; typedef decltype (p.polygons()[0]) PolyStampedCVR; typedef typename boost::remove_cv::type>::type PolyStamped; - for (long i=0; i < polyStampedJson.Size(); ++i) { + for (unsigned int i=0; i < polyStampedJson.Size(); ++i) { if ( !polyStampedJson[i].HasMember("header") ){ assert(false); return false; @@ -632,7 +632,7 @@ namespace Progress { bool toJson(const ProgressType &p, rapidjson::Value &value, rapidjson::Document::AllocatorType &allocator) { rapidjson::Value progressJson(rapidjson::kArrayType); - for(unsigned long i=0; i < p.progress().size(); ++i){ + for(unsigned long i=0; i < std::uint64_t(p.progress().size()); ++i){ progressJson.PushBack(rapidjson::Value().SetInt(std::int8_t(p.progress()[i])), allocator); } value.AddMember("progress", progressJson, allocator); @@ -652,6 +652,7 @@ namespace Progress { p.progress().reserve(sz); for (unsigned long i=0; i < sz; ++i) p.progress().push_back(std::int8_t(jsonProgress[i].GetInt())); + return true; } } // namespace Progress } // namespace NemoMsgs diff --git a/src/comm/ros_bridge/include/ROSBridge.h b/src/comm/ros_bridge/include/ROSBridge.h index 0bd5f057c..131908231 100644 --- a/src/comm/ros_bridge/include/ROSBridge.h +++ b/src/comm/ros_bridge/include/ROSBridge.h @@ -4,7 +4,7 @@ #include "ros_bridge/include/CasePacker.h" #include "ros_bridge/include/TypeFactory.h" #include "ros_bridge/include/JsonFactory.h" -#include "ros_bridge/include/Transmitter.h" +#include "ros_bridge/include/TopicPublisher.h" #include "ros_bridge/include/Receiver.h" #include @@ -23,8 +23,8 @@ public: explicit ROSBridge(); template - void send(T &msg, const std::string &topic){ - _transmitter.send(msg, topic); + void publish(T &msg, const std::string &topic){ + _topicPublisher.publish(msg, topic); } void start(); @@ -41,7 +41,7 @@ private: JsonFactory _jsonFactory; CasePacker _casePacker; RosbridgeWsClient _rbc; - ComPrivate::Transmitter _transmitter; + ComPrivate::TopicPublisher _topicPublisher; ComPrivate::Receiver _receiver; }; diff --git a/src/comm/ros_bridge/include/Transmitter.cpp b/src/comm/ros_bridge/include/TopicPublisher.cpp similarity index 85% rename from src/comm/ros_bridge/include/Transmitter.cpp rename to src/comm/ros_bridge/include/TopicPublisher.cpp index afb725e56..cacfe5adf 100644 --- a/src/comm/ros_bridge/include/Transmitter.cpp +++ b/src/comm/ros_bridge/include/TopicPublisher.cpp @@ -1,4 +1,4 @@ -#include "Transmitter.h" +#include "TopicPublisher.h" void ROSBridge::ComPrivate::transmittLoop(const ROSBridge::CasePacker &casePacker, @@ -41,18 +41,21 @@ void ROSBridge::ComPrivate::transmittLoop(const ROSBridge::CasePacker &casePacke } } -ROSBridge::ComPrivate::Transmitter::Transmitter(CasePacker *casePacker, - RosbridgeWsClient *rbc, - JsonFactory *jsonFactory) : +ROSBridge::ComPrivate::TopicPublisher::TopicPublisher(CasePacker *casePacker, + RosbridgeWsClient *rbc) : _stopFlag(true) - , _jsonFactory(jsonFactory) , _casePacker(casePacker) , _rbc(rbc) { } -void ROSBridge::ComPrivate::Transmitter::start() +ROSBridge::ComPrivate::TopicPublisher::~TopicPublisher() +{ + this->stop(); +} + +void ROSBridge::ComPrivate::TopicPublisher::start() { if ( !_stopFlag.load() ) // start called while thread running. return; @@ -65,7 +68,7 @@ void ROSBridge::ComPrivate::Transmitter::start() std::cref(_stopFlag))); } -void ROSBridge::ComPrivate::Transmitter::stop() +void ROSBridge::ComPrivate::TopicPublisher::stop() { if ( _stopFlag.load() ) // start called while thread not running. return; diff --git a/src/comm/ros_bridge/include/Transmitter.h b/src/comm/ros_bridge/include/TopicPublisher.h similarity index 78% rename from src/comm/ros_bridge/include/Transmitter.h rename to src/comm/ros_bridge/include/TopicPublisher.h index c3b4f60b9..7ffd067f1 100644 --- a/src/comm/ros_bridge/include/Transmitter.h +++ b/src/comm/ros_bridge/include/TopicPublisher.h @@ -13,24 +13,25 @@ namespace ROSBridge { namespace ComPrivate { -class Transmitter +class TopicPublisher { typedef std::unique_ptr ThreadPtr; public: - Transmitter() = delete; - Transmitter(CasePacker *casePacker, - RosbridgeWsClient *rbc, - JsonFactory *jsonFactory); + TopicPublisher() = delete; + TopicPublisher(CasePacker *casePacker, + RosbridgeWsClient *rbc); + + ~TopicPublisher(); void start(); void stop(); template - void send(const T &msg, const std::string &topic){ + void publish(const T &msg, const std::string &topic){ JsonDocUPtr docPtr(_casePacker->pack(msg, topic)); - send(std::move(docPtr)); + publish(std::move(docPtr)); } - void send(JsonDocUPtr docPtr){ + void publish(JsonDocUPtr docPtr){ std::lock_guard lock(_queueMutex); _queue.push_back(std::move(docPtr)); } @@ -41,7 +42,6 @@ private: JsonQueue _queue; std::mutex _queueMutex; std::atomic _stopFlag; - JsonFactory *_jsonFactory; CasePacker *_casePacker; ThreadPtr _pThread; RosbridgeWsClient *_rbc; diff --git a/src/comm/ros_bridge/include/TypeFactory.h b/src/comm/ros_bridge/include/TypeFactory.h index b02ac13ee..ca1544039 100644 --- a/src/comm/ros_bridge/include/TypeFactory.h +++ b/src/comm/ros_bridge/include/TypeFactory.h @@ -51,6 +51,7 @@ private: (void)type; (void)doc; assert(false); // Implementation missing for group U::Group! + return false; } // =========================================================================== diff --git a/src/comm/ros_bridge/src/ROSBridge.cpp b/src/comm/ros_bridge/src/ROSBridge.cpp index f8ad33dc9..c9fdf9ed2 100644 --- a/src/comm/ros_bridge/src/ROSBridge.cpp +++ b/src/comm/ros_bridge/src/ROSBridge.cpp @@ -3,7 +3,7 @@ ROSBridge::ROSBridge::ROSBridge() : _casePacker(&_typeFactory, &_jsonFactory) , _rbc("localhost:9090") - , _transmitter(&_casePacker, &_rbc, &_jsonFactory) + , _topicPublisher(&_casePacker, &_rbc) , _receiver(&_casePacker, &_rbc, &_typeFactory) { @@ -11,12 +11,12 @@ ROSBridge::ROSBridge::ROSBridge() : void ROSBridge::ROSBridge::start() { - _transmitter.start(); + _topicPublisher.start(); } void ROSBridge::ROSBridge::stop() { - _transmitter.stop(); + _topicPublisher.stop(); } bool ROSBridge::ROSBridge::messagesAvailable() -- 2.22.0