diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro
index 381d5fcea097aac03c86243f85ecf871f7b574fc..7edc9e5c1249e6e4d7dc7dc463e01bd37b6c3e71 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 80fa382b73a37229cfb6c8b93439af1e9549a003..3a379887c346443ec529efed085a81a1ff88a7e7 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 61b86eb6af403655cf0ce65dc35c050b85242269..7fd514b70620331dc5f936795e6f48831df86ee0 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 0000000000000000000000000000000000000000..51e33b876f51072b047bf197e7e2827eeb4dcb64
--- /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 7e64d953a00a65cf8f03f67dbad6b9b210b804ba..2e73f5501239afa1609b92070ae81a0d1578429b 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 e486c40d51c9624a22fa0f4d31f565ab3358ea52..2de5331262fc19b33fcf377e1e41c29f2fe4673d 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 7bcd6c3a0f296d43d02729e2319dad92a62eb6f7..8d62f10322137602499b124fcae116fa3ee4453f 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 0bd5f057c57e28010864bc25f7a83e37d2281b0c..131908231d8a319330a25c3eb2624df916986414 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 afb725e56706be0ea598f5ee48ef011e340f19d9..cacfe5adf5e0df81660e592000172e4d05e86775 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 c3b4f60b9b07aa9709cbd4e253c1f9818c236635..7ffd067f1fc307324e1e4782e41866d511f76227 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 b02ac13ee64f545ab86937b5e3e9b65b5dcd9c91..ca1544039c4865c9fa35af19c2c1fd4d2e443131 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 f8ad33dc96a8c05fd873fb2f5d552c0ab2d87615..c9fdf9ed2e90a0fdeb362dd86b8c092477a66410 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()