swift
xswiftbussettingsqtfree.inc
1 // SPDX-FileCopyrightText: Copyright (C) 2019 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
4 #include "xswiftbussettingsqtfree.h"
5 
6 #include <string>
7 #include <chrono>
8 
9 #include "nlohmann/json.hpp"
10 
11 #ifdef __GNUC__
12 #pragma GCC diagnostic push
13 #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant"
14 #endif
15 
16 using namespace swift::misc::simulation::settings;
17 using namespace swift::misc::simulation::xplane;
18 
33 
34 namespace swift::misc
35 {
36  namespace simulation
37  {
38  namespace settings
39  {
40  bool CXSwiftBusSettingsQtFree::parseXSwiftBusString(const std::string &json)
41  {
42  if (json.empty()) { return false; }
43 
44  const nlohmann::basic_json parsed = nlohmann::json::parse(json, nullptr, false);
45 
46  if (parsed.is_discarded()) { return false; }
47 
48  int c = 0;
50  {
51  m_dBusServerAddress = parsed[CXSwiftBusSettingsQtFree::JsonDBusServerAddress].get<std::string>(); c++;
52  }
54  {
55  m_msgBox = parsed[CXSwiftBusSettingsQtFree::JsonMessageBox].get<std::string>(); c++;
56  }
58  {
59  m_nightTextureMode = parsed[CXSwiftBusSettingsQtFree::JsonNightTextureMode].get<std::string>(); c++;
60  }
62  {
63  m_drawingLabels = parsed[CXSwiftBusSettingsQtFree::JsonDrawingLabels].get<bool>(); c++;
64  }
65  if (parsed.contains(CXSwiftBusSettingsQtFree::JsonLabelColor) && parsed[CXSwiftBusSettingsQtFree::JsonLabelColor].is_number_integer())
66  {
67  m_labelColor = parsed[CXSwiftBusSettingsQtFree::JsonLabelColor].get<int>(); c++;
68  }
70  {
71  m_bundleTaxiLandingLights = parsed[CXSwiftBusSettingsQtFree::JsonBundleTaxiLandingLights].get<bool>(); c++;
72  }
73  if (parsed.contains(CXSwiftBusSettingsQtFree::JsonTcas) && parsed[CXSwiftBusSettingsQtFree::JsonTcas].is_boolean())
74  {
75  m_tcasEnabled = parsed[CXSwiftBusSettingsQtFree::JsonTcas].get<bool>(); c++;
76  }
78  {
79  m_terrainProbeEnabled = parsed[CXSwiftBusSettingsQtFree::JsonTerrainProbe].get<bool>(); c++;
80  }
82  {
83  m_logRenderPhases = parsed[CXSwiftBusSettingsQtFree::JsonLogRenderPhases].get<bool>(); c++;
84  }
85  if (parsed.contains(CXSwiftBusSettingsQtFree::JsonMaxPlanes) && parsed[CXSwiftBusSettingsQtFree::JsonMaxPlanes].is_number_integer())
86  {
87  m_maxPlanes = parsed[CXSwiftBusSettingsQtFree::JsonMaxPlanes].get<int>(); c++;
88  }
90  {
91  m_maxDrawDistanceNM = parsed[CXSwiftBusSettingsQtFree::JsonMaxDrawDistance].get<double>(); c++;
92  }
94  {
95  m_followAircraftDistanceM = parsed[CXSwiftBusSettingsQtFree::JsonFollowAircraftDistanceM].get<int>(); c++;
96  }
97  if (parsed.contains(CXSwiftBusSettingsQtFree::JsonTimestamp) && parsed[CXSwiftBusSettingsQtFree::JsonTimestamp].is_number_integer())
98  {
99  m_msSinceEpochQtFree = parsed[CXSwiftBusSettingsQtFree::JsonTimestamp].get<int64_t>(); c++;
100  }
101  this->objectUpdated(); // post processing
102  return c == 13;
103  }
104 
106  {
107  nlohmann::json json;
108 
109 
110  json[JsonDBusServerAddress] = m_dBusServerAddress;
111  json[JsonNightTextureMode] = m_nightTextureMode;
112  json[JsonMessageBox] = m_msgBox;
113  json[JsonMaxPlanes] = m_maxPlanes;
114  json[JsonMaxDrawDistance] = m_maxDrawDistanceNM;
115  json[JsonTimestamp] = m_msSinceEpochQtFree;
116  json[JsonDrawingLabels] = m_drawingLabels;
117  json[JsonLabelColor] = m_labelColor;
118  json[JsonBundleTaxiLandingLights] = m_bundleTaxiLandingLights;
119  json[JsonFollowAircraftDistanceM] = m_followAircraftDistanceM;
120  json[JsonLogRenderPhases] = m_logRenderPhases;
121  json[JsonTcas] = m_tcasEnabled;
122  json[JsonTerrainProbe] = m_terrainProbeEnabled;
123 
124  return json.dump(2);
125  }
126 
128  {
129  return "DBusServer: " + m_dBusServerAddress +
130  ", drawLabels: " + qtfreeutils::boolToYesNo(m_drawingLabels) +
131  ", labelColor: " + std::to_string((m_labelColor >> 16) & 0xff) +
132  ";" + std::to_string((m_labelColor >> 8) & 0xff) +
133  ";" + std::to_string(m_labelColor & 0xff) +
134  ", bundle lights: " + qtfreeutils::boolToYesNo(m_bundleTaxiLandingLights) +
135  ", phases: " + qtfreeutils::boolToYesNo(m_logRenderPhases) +
136  ", TCAS: " + qtfreeutils::boolToYesNo(m_tcasEnabled) +
137  ", terr.probe: " + qtfreeutils::boolToYesNo(m_terrainProbeEnabled) +
138  ", night t.: " + m_nightTextureMode +
139  ", max planes: " + std::to_string(m_maxPlanes) +
140  ", max distance NM: " + std::to_string(m_maxDrawDistanceNM) +
141  ", follow dist m: " + std::to_string(m_followAircraftDistanceM) +
142  ", msg.box: " + m_msgBox +
143  ", ts: " + std::to_string(m_msSinceEpochQtFree);
144  }
145 
147  {
148  int changed = 0;
149  if (m_dBusServerAddress != newValues.m_dBusServerAddress) { m_dBusServerAddress = newValues.m_dBusServerAddress; changed++; }
150  if (m_msgBox != newValues.m_msgBox) { m_msgBox = newValues.m_msgBox; changed++; }
151  if (m_drawingLabels != newValues.m_drawingLabels) { m_drawingLabels = newValues.m_drawingLabels; changed++; }
152  if (m_labelColor != newValues.m_labelColor) { m_labelColor = newValues.m_labelColor; changed++; }
153  if (m_nightTextureMode != newValues.m_nightTextureMode) { m_nightTextureMode = newValues.m_nightTextureMode; changed++; }
154  if (m_logRenderPhases != newValues.m_logRenderPhases) { m_logRenderPhases = newValues.m_logRenderPhases; changed++; }
155  if (m_tcasEnabled != newValues.m_tcasEnabled) { m_tcasEnabled = newValues.m_tcasEnabled; changed++; }
156  if (m_terrainProbeEnabled != newValues.m_terrainProbeEnabled) { m_terrainProbeEnabled = newValues.m_terrainProbeEnabled; changed++; }
157  if (m_maxPlanes != newValues.m_maxPlanes) { m_maxPlanes = newValues.m_maxPlanes; changed++; }
158  if (m_msSinceEpochQtFree != newValues.m_msSinceEpochQtFree) { m_msSinceEpochQtFree = newValues.m_msSinceEpochQtFree; changed++; }
159  if (m_bundleTaxiLandingLights != newValues.m_bundleTaxiLandingLights) { m_bundleTaxiLandingLights = newValues.m_bundleTaxiLandingLights; changed++; }
160  if (m_followAircraftDistanceM != newValues.m_followAircraftDistanceM) { m_followAircraftDistanceM = newValues.m_followAircraftDistanceM; changed++; }
161  if (!qtfreeutils::isFuzzyEqual(m_maxDrawDistanceNM, newValues.m_maxDrawDistanceNM)) { m_maxDrawDistanceNM = newValues.m_maxDrawDistanceNM; changed++; }
162 
163  if (changed > 0) { this->objectUpdated(); } // post processing
164  return changed;
165  }
166 
167  } // ns
168  } // ns
169 } // ns
170 
171 #ifdef __GNUC__
172 #pragma GCC diagnostic pop
173 #endif
xswiftbus/swift side settings class, JSON capable, shared among all services
static constexpr char JsonBundleTaxiLandingLights[]
The JSON members.
int update(const CXSwiftBusSettingsQtFree &newValues)
Update only changed values.
static constexpr char JsonFollowAircraftDistanceM[]
The JSON members.
std::string m_dBusServerAddress
DBus server (also in class CXSwiftBusConfigWriter)
static constexpr char JsonDBusServerAddress[]
The JSON members.
std::string m_msgBox
left, top, right, bottom, lines, duration, colors
std::string convertToString() const
Convert to string.
bool m_terrainProbeEnabled
terrain probe to establish ground elevation
std::string toXSwiftBusJsonString() const
As JSON string.
bool parseXSwiftBusString(const std::string &json)
Load and parse config file.
Free functions in swift::misc.