From 6e90ec5c72399b3c50ceed71644d6b4fff581962 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 14 Aug 2019 23:57:48 +0200 Subject: [PATCH] Ref T709, added settings for lights and message box margins --- .../simulation/settings/xswiftbussettings.cpp | 28 ++++++----- .../simulation/settings/xswiftbussettings.h | 4 ++ .../settings/xswiftbussettingsqtfree.cpp | 24 ++++++++-- .../settings/xswiftbussettingsqtfree.h | 48 +++++++++++++++++-- 4 files changed, 84 insertions(+), 20 deletions(-) diff --git a/src/blackmisc/simulation/settings/xswiftbussettings.cpp b/src/blackmisc/simulation/settings/xswiftbussettings.cpp index fa9478dbb..0dd8a378b 100644 --- a/src/blackmisc/simulation/settings/xswiftbussettings.cpp +++ b/src/blackmisc/simulation/settings/xswiftbussettings.cpp @@ -28,12 +28,14 @@ namespace BlackMisc const ColumnIndex i = index.frontCasted(); switch (i) { - case IndexMaxPlanes: return CVariant::fromValue(m_maxPlanes); - case IndexDBusServerAddress: return CVariant::fromValue(QString::fromStdString(m_dBusServerAddress)); - case IndexNightTextureMode: return CVariant::fromValue(QString::fromStdString(m_nightTextureMode)); - case IndexDrawingLabels: return CVariant::fromValue(m_drawingLabels); - case IndexMaxDrawingDistance: return CVariant::fromValue(m_maxDrawDistanceNM); - case IndexFollowAircraftDistance: return CVariant::fromValue(m_followAircraftDistanceM); + case IndexMaxPlanes: return CVariant::fromValue(m_maxPlanes); + case IndexDBusServerAddress: return CVariant::fromValue(QString::fromStdString(m_dBusServerAddress)); + case IndexNightTextureMode: return CVariant::fromValue(QString::fromStdString(m_nightTextureMode)); + case IndexMessageBoxMargins: return CVariant::fromValue(QString::fromStdString(m_msgBox)); + case IndexDrawingLabels: return CVariant::fromValue(m_drawingLabels); + case IndexBundleTaxiLandingLights: return CVariant::fromValue(m_bundleTaxiLandingLights); + case IndexMaxDrawingDistance: return CVariant::fromValue(m_maxDrawDistanceNM); + case IndexFollowAircraftDistance: return CVariant::fromValue(m_followAircraftDistanceM); default: break; } return CValueObject::propertyByIndex(index); @@ -47,12 +49,14 @@ namespace BlackMisc const ColumnIndex i = index.frontCasted(); switch (i) { - case IndexMaxPlanes: m_maxPlanes = variant.toInt(); break; - case IndexDBusServerAddress: m_dBusServerAddress = variant.toStdString(); break; - case IndexNightTextureMode: m_nightTextureMode = variant.toStdString(); break; - case IndexDrawingLabels: m_drawingLabels = variant.toBool(); break; - case IndexMaxDrawingDistance: m_maxDrawDistanceNM = variant.toDouble(); break; - case IndexFollowAircraftDistance: m_followAircraftDistanceM = variant.toInt(); break; + case IndexMaxPlanes: m_maxPlanes = variant.toInt(); break; + case IndexDBusServerAddress: m_dBusServerAddress = variant.toStdString(); break; + case IndexMessageBoxMargins: m_msgBox = variant.toStdString(); break; + case IndexNightTextureMode: m_nightTextureMode = variant.toStdString(); break; + case IndexDrawingLabels: m_drawingLabels = variant.toBool(); break; + case IndexBundleTaxiLandingLights: m_bundleTaxiLandingLights = variant.toBool(); break; + case IndexMaxDrawingDistance: m_maxDrawDistanceNM = variant.toDouble(); break; + case IndexFollowAircraftDistance: m_followAircraftDistanceM = variant.toInt(); break; default: CValueObject::setPropertyByIndex(index, variant); break; diff --git a/src/blackmisc/simulation/settings/xswiftbussettings.h b/src/blackmisc/simulation/settings/xswiftbussettings.h index e1faf97ea..1d3a3f699 100644 --- a/src/blackmisc/simulation/settings/xswiftbussettings.h +++ b/src/blackmisc/simulation/settings/xswiftbussettings.h @@ -39,6 +39,8 @@ namespace BlackMisc IndexDBusServerAddress = CPropertyIndex::GlobalIndexCXSwiftBusSettings, IndexMaxPlanes, IndexDrawingLabels, + IndexBundleTaxiLandingLights, + IndexMessageBoxMargins, IndexMaxDrawingDistance, IndexFollowAircraftDistance, IndexNightTextureMode @@ -94,9 +96,11 @@ namespace BlackMisc BLACK_METACLASS( CXSwiftBusSettings, BLACK_METAMEMBER(dBusServerAddress), + BLACK_METAMEMBER(msgBox), BLACK_METAMEMBER(nightTextureMode), BLACK_METAMEMBER(maxPlanes), BLACK_METAMEMBER(drawingLabels), + BLACK_METAMEMBER(bundleTaxiLandingLights), BLACK_METAMEMBER(maxDrawDistanceNM), BLACK_METAMEMBER(followAircraftDistanceM), BLACK_METAMEMBER(timestampMSecsSinceEpoch, 0, DisabledForComparison | DisabledForHashing) diff --git a/src/blackmisc/simulation/settings/xswiftbussettingsqtfree.cpp b/src/blackmisc/simulation/settings/xswiftbussettingsqtfree.cpp index 53cbf2210..79ea90993 100644 --- a/src/blackmisc/simulation/settings/xswiftbussettingsqtfree.cpp +++ b/src/blackmisc/simulation/settings/xswiftbussettingsqtfree.cpp @@ -26,6 +26,8 @@ constexpr char BlackMisc::Simulation::Settings::CXSwiftBusSettingsQtFree::JsonMa constexpr char BlackMisc::Simulation::Settings::CXSwiftBusSettingsQtFree::JsonMaxDrawDistance[]; constexpr char BlackMisc::Simulation::Settings::CXSwiftBusSettingsQtFree::JsonFollowAircraftDistanceM[]; constexpr char BlackMisc::Simulation::Settings::CXSwiftBusSettingsQtFree::JsonNightTextureMode[]; +constexpr char BlackMisc::Simulation::Settings::CXSwiftBusSettingsQtFree::JsonMessageBox[]; +constexpr char BlackMisc::Simulation::Settings::CXSwiftBusSettingsQtFree::JsonBundleTaxiLandingLights[]; constexpr char BlackMisc::Simulation::Settings::CXSwiftBusSettingsQtFree::JsonTimestamp[]; //! @endcond @@ -52,6 +54,10 @@ namespace BlackMisc { m_dBusServerAddress = settingsDoc[CXSwiftBusSettingsQtFree::JsonDBusServerAddress].GetString(); c++; } + if (settingsDoc.HasMember(CXSwiftBusSettingsQtFree::JsonMessageBox) && settingsDoc[CXSwiftBusSettingsQtFree::JsonMessageBox].IsString()) + { + m_msgBox = settingsDoc[CXSwiftBusSettingsQtFree::JsonMessageBox].GetString(); c++; + } if (settingsDoc.HasMember(CXSwiftBusSettingsQtFree::JsonNightTextureMode) && settingsDoc[CXSwiftBusSettingsQtFree::JsonNightTextureMode].IsString()) { m_nightTextureMode = settingsDoc[CXSwiftBusSettingsQtFree::JsonNightTextureMode].GetString(); c++; @@ -60,6 +66,10 @@ namespace BlackMisc { m_drawingLabels = settingsDoc[CXSwiftBusSettingsQtFree::JsonDrawingLabels].GetBool(); c++; } + if (settingsDoc.HasMember(CXSwiftBusSettingsQtFree::JsonBundleTaxiLandingLights) && settingsDoc[CXSwiftBusSettingsQtFree::JsonBundleTaxiLandingLights].IsBool()) + { + m_bundleTaxiLandingLights = settingsDoc[CXSwiftBusSettingsQtFree::JsonBundleTaxiLandingLights].GetBool(); c++; + } if (settingsDoc.HasMember(CXSwiftBusSettingsQtFree::JsonMaxPlanes) && settingsDoc[CXSwiftBusSettingsQtFree::JsonMaxPlanes].IsInt()) { m_maxPlanes = settingsDoc[CXSwiftBusSettingsQtFree::JsonMaxPlanes].GetInt(); c++; @@ -77,7 +87,7 @@ namespace BlackMisc m_msSinceEpochQtFree = settingsDoc[CXSwiftBusSettingsQtFree::JsonTimestamp].GetInt64(); c++; } this->objectUpdated(); // post processing - return c == 7; + return c == 9; } std::string CXSwiftBusSettingsQtFree::toXSwiftBusJsonString() const @@ -90,12 +100,14 @@ namespace BlackMisc Document::AllocatorType &a = document.GetAllocator(); // Value k1(JsonDBusServerAddress, a); // Value v1(m_dBusServerAddress, a); - document.AddMember(JsonDBusServerAddress, StringRef(m_dBusServerAddress.c_str()), a); - document.AddMember(JsonNightTextureMode, StringRef(m_nightTextureMode.c_str()), a); + document.AddMember(JsonDBusServerAddress, StringRef(m_dBusServerAddress.c_str()), a); + document.AddMember(JsonNightTextureMode, StringRef(m_nightTextureMode.c_str()), a); + document.AddMember(JsonMessageBox, StringRef(m_msgBox.c_str()), a); document.AddMember(JsonMaxPlanes, m_maxPlanes, a); document.AddMember(JsonMaxDrawDistance, m_maxDrawDistanceNM, a); document.AddMember(JsonTimestamp, m_msSinceEpochQtFree, a); document.AddMember(JsonDrawingLabels, m_drawingLabels, a); + document.AddMember(JsonBundleTaxiLandingLights, m_bundleTaxiLandingLights, a); document.AddMember(JsonFollowAircraftDistanceM, m_followAircraftDistanceM, a); // document[CXSwiftBusSettingsQtFree::JsonDBusServerAddress].SetString(StringRef(m_dBusServerAddress.c_str(), m_dBusServerAddress.size())); @@ -113,11 +125,13 @@ namespace BlackMisc std::string CXSwiftBusSettingsQtFree::convertToString() const { return "DBusServer: " + m_dBusServerAddress + - ", drawLabels: " + QtFreeUtils::boolToYesNo(m_drawingLabels) + + ", drawLabels: " + QtFreeUtils::boolToYesNo(m_drawingLabels) + + ", bundle lights: " + QtFreeUtils::boolToYesNo(m_bundleTaxiLandingLights) + ", night t.: " + m_nightTextureMode + ", max planes: " + std::to_string(m_maxPlanes) + ", max distance NM: " + std::to_string(m_maxDrawDistanceNM) + ", follow dist m: " + std::to_string(m_followAircraftDistanceM) + + ", msg.box: " + m_msgBox + ", ts: " + std::to_string(m_msSinceEpochQtFree); } @@ -125,7 +139,9 @@ namespace BlackMisc { int changed = 0; if (m_dBusServerAddress != newValues.m_dBusServerAddress) { m_dBusServerAddress = newValues.m_dBusServerAddress; changed++; } + if (m_msgBox != newValues.m_msgBox) { m_msgBox = newValues.m_msgBox; changed++; } if (m_drawingLabels != newValues.m_drawingLabels) { m_drawingLabels = newValues.m_drawingLabels; changed++; } + if (m_bundleTaxiLandingLights != newValues.m_bundleTaxiLandingLights) { m_bundleTaxiLandingLights = newValues.m_bundleTaxiLandingLights; changed++; } if (m_nightTextureMode != newValues.m_nightTextureMode) { m_nightTextureMode = newValues.m_nightTextureMode; changed++; } if (m_maxPlanes != newValues.m_maxPlanes) { m_maxPlanes = newValues.m_maxPlanes; changed++; } if (m_msSinceEpochQtFree != newValues.m_msSinceEpochQtFree) { m_msSinceEpochQtFree = newValues.m_msSinceEpochQtFree; changed++; } diff --git a/src/blackmisc/simulation/settings/xswiftbussettingsqtfree.h b/src/blackmisc/simulation/settings/xswiftbussettingsqtfree.h index 4f32258bf..2d761d10a 100644 --- a/src/blackmisc/simulation/settings/xswiftbussettingsqtfree.h +++ b/src/blackmisc/simulation/settings/xswiftbussettingsqtfree.h @@ -20,7 +20,7 @@ namespace BlackMisc { /*! * XSwiftBus/swift side settings class, JSON capable, shared among all services - * \details Used on swift and XSwiftBus side, MUST BE QT free + * \details Used on swift and XSwiftBus side, MUST BE Qt free */ class CXSwiftBusSettingsQtFree { @@ -44,12 +44,48 @@ namespace BlackMisc //! Get whether the plugin draws type and callsign labels above aircraft bool isDrawingLabels() const { return m_drawingLabels; } + //! Bundle taxi and landing lights + void setBundlingTaxiAndLandingLights(bool bundle) { m_bundleTaxiLandingLights = bundle; } + + //! Bundle taxi and landing lights + bool isBundlingTaxiAndLandingLights() const { return m_bundleTaxiLandingLights; } + //! The the night texture mode void setNightTextureMode(const std::string &mode) { m_nightTextureMode = XPlane::QtFreeUtils::toLower(mode); } //! The the night texture mode const std::string &getNightTextureMode() const { return m_nightTextureMode; } + //! Left, top, right, bottom, lines, duration + void setMessageBoxValues(const std::string &positions) { m_msgBox = positions; } + + //! Left, top, right, bottom, lines, duration + void setMessageBoxValues(int leftPx, int topPx, int rightPx, int bottomPx, int lines, int durationMs) + { + if (topPx >= 0) { bottomPx = -1; } + if (lines < 3) { lines = 3; } + this->setMessageBoxValues(std::to_string(leftPx) + ";" + std::to_string(topPx) + ";" + std::to_string(rightPx) + ";" + std::to_string(bottomPx) + ";" + std::to_string(lines) + ";" + std::to_string(durationMs)); + } + + //! Left, top, right, bottom, lines, duration + const std::string &getMessageBoxValues() const { return m_msgBox; } + + //! Left, top, right, bottom, lines, duration + std::vector getMessageBoxValuesVector() const + { + constexpr int partCount = 6; + std::vector partsInt = {20, 20, 20, -1, 5, 5000}; + const std::vector parts = XPlane::QtFreeUtils::split(m_msgBox, partCount, ";"); + + size_t c = 0; + for (const std::string &p : parts) + { + const int i = std::stoi(p); + partsInt[c++] = i; + } + return partsInt; + } + //! Set the maximum number of aircraft. bool setMaxPlanes(int planes) { @@ -106,6 +142,8 @@ namespace BlackMisc static constexpr char JsonMaxDrawDistance[] = "maxDrawDistance"; static constexpr char JsonNightTextureMode[] = "nighttexture"; static constexpr char JsonTimestamp[] = "timestamp"; + static constexpr char JsonMessageBox[] = "msgbox"; + static constexpr char JsonBundleTaxiLandingLights[] = "bundleLights"; static constexpr char JsonFollowAircraftDistanceM[] = "followAircraftDistance"; //! @} @@ -114,11 +152,13 @@ namespace BlackMisc std::string m_dBusServerAddress { "tcp:host=127.0.0.1,port=45001" }; //!< DBus server std::string m_nightTextureMode { "auto" }; //!< night texture mode + std::string m_msgBox { "20;20;20;-1;5;5000" }; //!< left, top, right, bottom, lines, duration int m_maxPlanes = 100; //!< max. planes in XPlane int m_followAircraftDistanceM = 200; //!< follow aircraft in distance - bool m_drawingLabels = true; //!< labels in XPlane - double m_maxDrawDistanceNM = 50.0; //!< distance in XPlane - int64_t m_msSinceEpochQtFree = 0; //!< timestamp + bool m_drawingLabels = true; //!< labels in XPlane + bool m_bundleTaxiLandingLights = true; //!< bundle taxi and landing lights + double m_maxDrawDistanceNM = 50.0; //!< distance in XPlane + int64_t m_msSinceEpochQtFree = 0; //!< timestamp }; } // ns } // ns