6 #include "ui_simulatorcomponent.h"
28 using namespace swift::misc::aviation;
29 using namespace swift::misc::physical_quantities;
30 using namespace swift::misc::simulation;
32 using namespace swift::core::context;
36 const QStringList &CSimulatorComponent::getLogCategories()
42 CSimulatorComponent::CSimulatorComponent(QWidget *parent)
45 Q_ASSERT_X(
sGui, Q_FUNC_INFO,
"Need sGui");
48 this->setCurrentIndex(0);
49 ui->comp_StatusMessages->showFilterDialog();
52 ui->tvp_LiveData->setIconMode(
true);
53 ui->tvp_LiveData->setAutoResizeFrequency(10);
54 ui->tvp_Internals->setIconMode(
false);
55 this->addOrUpdateLiveDataByName(
"info",
"no data yet", CIcons::StandardIconWarning16);
59 &CSimulatorComponent::onSimulatorStatusChanged, Qt::QueuedConnection);
61 connect(ui->pb_RefreshInternals, &QPushButton::pressed,
this, &CSimulatorComponent::refreshInternals);
65 &CSimulatorComponent::onAddingRemoteModelFailed, Qt::QueuedConnection);
67 &CSimulatorComponent::onSimulatorMessages, Qt::QueuedConnection);
76 void CSimulatorComponent::addOrUpdateLiveDataByName(
const QString &name,
const QString &value,
const CIcon &icon)
78 const bool resize = this->currentWidget() == ui->tb_LiveData;
79 ui->tvp_LiveData->addOrUpdateByName(name, value, icon, resize,
false);
82 void CSimulatorComponent::addOrUpdateLiveDataByName(
const QString &name,
const QString &value,
85 this->addOrUpdateLiveDataByName(name, value, CIcon::iconByIndex(iconIndex));
88 void CSimulatorComponent::removeLiveDataByName(
const QString &name) { ui->tvp_LiveData->removeByName(name); }
94 ui->tvp_LiveData->clear();
95 if (addInternalsAfterwards) { this->refreshInternals(); }
103 const ISimulator::SimulatorStatus simulatorStatus =
105 if (simulatorStatus == ISimulator::Unspecified || simulatorStatus == ISimulator::Disconnected)
107 static const QString s(
"No simulator available");
108 this->addOrUpdateLiveDataByName(QStringLiteral(
"info"), s, CIcons::StandardIconWarning16);
112 if (!simulatorStatus.testFlag(ISimulator::Simulating))
114 static const QString s(
"Simulator (%1) not yet running");
115 this->addOrUpdateLiveDataByName(
117 CIcons::StandardIconWarning16);
130 static const CIcon iconRadio(CIcon::iconByIndex(CIcons::StandardIconRadio16));
131 static const CIcon iconAttitude(CIcon::iconByIndex(CIcons::AviationAttitudeIndicator));
132 static const CIcon iconPlane(CIcon::iconByIndex(CIcons::StandardIconPaperPlane16));
136 this->addOrUpdateLiveDataByName(
"simulator", m_simulator.
toQString(
true), m_simulator.
toIcon());
141 this->addOrUpdateLiveDataByName(QStringLiteral(
"FPS"),
142 fps < 0 ? QStringLiteral(
"N/A") : QString::number(fps,
'f', 1),
143 CIcon(CIcons::ApplicationSimulator));
146 this->addOrUpdateLiveDataByName(QStringLiteral(
"Time Ratio"), QString::number(ratio,
'f', 2),
147 CIcon(CIcons::ApplicationSimulator));
150 this->addOrUpdateLiveDataByName(QStringLiteral(
"Miles Short"), QString::number(miles,
'f', 1),
151 CIcon(CIcons::ApplicationSimulator));
154 this->addOrUpdateLiveDataByName(QStringLiteral(
"Minutes Late"), QString::number(minutes,
'f', 1),
155 CIcon(CIcons::ApplicationSimulator));
159 this->addOrUpdateLiveDataByName(QStringLiteral(
"latitude"), s.
latitude().
toQString(), iconLatLng);
160 this->addOrUpdateLiveDataByName(QStringLiteral(
"longitude"), s.
longitude().
toQString(), iconLatLng);
161 this->addOrUpdateLiveDataByName(QStringLiteral(
"altitude, true (ft)"),
163 this->addOrUpdateLiveDataByName(QStringLiteral(
"altitude, true (m)"),
165 this->addOrUpdateLiveDataByName(QStringLiteral(
"altitude, pressure (ft)"),
167 this->addOrUpdateLiveDataByName(QStringLiteral(
"altitude, pressure (m)"),
172 this->addOrUpdateLiveDataByName(QStringLiteral(
"elevation (ft)"),
174 this->addOrUpdateLiveDataByName(QStringLiteral(
"elevation (m)"),
177 else { this->addOrUpdateLiveDataByName(QStringLiteral(
"elevation"), QStringLiteral(
"N/A"), iconAlt); }
179 if (ownAircraft.
hasCG())
181 this->addOrUpdateLiveDataByName(QStringLiteral(
"CG (ft)"),
183 this->addOrUpdateLiveDataByName(QStringLiteral(
"CG (m)"),
186 else { this->addOrUpdateLiveDataByName(QStringLiteral(
"CG"), QStringLiteral(
"N/A"), iconPlane); }
188 this->addOrUpdateLiveDataByName(QStringLiteral(
"pitch"), s.
getPitch().
toQString(), iconAttitude);
189 this->addOrUpdateLiveDataByName(QStringLiteral(
"bank"), s.
getBank().
toQString(), iconAttitude);
192 this->addOrUpdateLiveDataByName(QStringLiteral(
"heading"), heading.
valueRoundedWithUnit(CAngleUnit::deg(), 1),
196 this->addOrUpdateLiveDataByName(QStringLiteral(
"ground speed (kts)"),
198 this->addOrUpdateLiveDataByName(QStringLiteral(
"ground speed (km/h)"),
207 this->addOrUpdateLiveDataByName(QStringLiteral(
"COM1 volume"), QString::number(c1.
getVolumeReceive()),
209 this->addOrUpdateLiveDataByName(QStringLiteral(
"COM2 volume"), QString::number(c2.
getVolumeReceive()),
215 void CSimulatorComponent::onSimulatorStatusChanged(
int status)
217 ISimulator::SimulatorStatus simStatus =
static_cast<ISimulator::SimulatorStatus
>(status);
219 if (simStatus.testFlag(ISimulator::Connected))
221 const int intervalMs = getUpdateIntervalMs();
222 m_updateTimer.start(intervalMs);
227 m_updateTimer.stop();
232 void CSimulatorComponent::onAddingRemoteModelFailed(
const CSimulatedAircraft &aircraft,
bool disabled,
238 ui->comp_StatusMessages->appendStatusMessageToList(msg);
239 ui->comp_StatusMessages->appendStatusMessageToList(message);
244 if (messages.
isEmpty()) {
return; }
245 ui->comp_StatusMessages->appendStatusMessagesToList(messages);
248 void CSimulatorComponent::refreshInternals()
253 m_simulator = simulatorInfo;
258 ui->tvp_Internals->clear();
263 static const CIcon emptyIcon;
264 const bool resize =
true;
265 const bool skipEqualValues =
true;
266 for (
const QString &name : names)
268 ui->tvp_Internals->addOrUpdateByName(name, internals.
getVariantValue(name), emptyIcon, resize,
271 ui->tvp_Internals->fullResizeToContents();
274 int CSimulatorComponent::getUpdateIntervalMs()
const
const context::IContextOwnAircraft * getIContextOwnAircraft() const
Direct access to contexts if a CCoreFacade has been initialized.
QPointer< ISimulator > getISimulator() const
The simulator plugin, if available.
bool isShuttingDown() const
Is application shutting down?
const context::IContextSimulator * getIContextSimulator() const
Direct access to contexts if a CCoreFacade has been initialized.
bool supportsContexts(bool ignoreShutdownTest=false) const
Supports contexts.
bool isUsingImplementingObject() const
Using local implementing object?
virtual swift::misc::simulation::CSimulatedAircraft getOwnAircraft() const =0
Get own aircraft.
virtual swift::misc::simulation::CSimulatorPluginInfo getSimulatorPluginInfo() const =0
Simulator info, currently loaded plugin.
virtual swift::misc::simulation::CSimulatorInternals getSimulatorInternals() const =0
Simulator setup.
virtual ISimulator::SimulatorStatus getSimulatorStatus() const =0
Simulator combined status.
void clear(bool addInternalsAfterwards=false)
Clear.
int rowCount() const
Number of entries.
virtual ~CSimulatorComponent()
Destructor.
void update()
Update simulator.
Value object for icons. An icon is stored in the global icon repository and identified by its index....
IconIndex
Index for each icon, allows to send them via DBus, efficiently store them, etc.
static const QString & matching()
Matching.
static const QString & guiComponent()
GUI components.
Derived & warning(const char16_t(&format)[N])
Set the severity to warning, providing a format string.
bool isEmpty() const
Synonym for empty.
Streamable status message, e.g.
Status messages, e.g. from Core -> GUI.
Value object encapsulating information of an aircraft's situation.
const CAltitude & getGroundElevation() const
Elevation of the ground directly beneath.
bool hasGroundElevation() const
Is ground elevation value available.
const CHeading & getHeading() const
Get heading.
virtual geo::CLatitude latitude() const
Latitude.
const physical_quantities::CSpeed & getGroundSpeed() const
Get ground speed.
const CAltitude & getAltitude() const
Get altitude.
const CAltitude & getPressureAltitude() const
Get pressure altitude.
const physical_quantities::CAngle & getBank() const
Get bank (angle)
const physical_quantities::CAngle & getPitch() const
Get pitch.
virtual geo::CLongitude longitude() const
Longitude.
swift::misc::CIcons::IconIndex toIcon() const
As icon, not implemented by all classes.
Heading as used in aviation, can be true or magnetic heading.
CHeading normalizedTo360Degrees() const
As [0, 359.99] normalized heading.
swift::misc::physical_quantities::CFrequency getFrequencyStandby() const
Standby frequency.
int getVolumeReceive() const
Output volume 0..100.
swift::misc::physical_quantities::CFrequency getFrequencyActive() const
Active frequency.
CIcons::IconIndex toIcon() const
As icon, not implemented by all classes.
CIcons::IconIndex toIcon() const
As icon, not implemented by all classes.
QString toQString(bool i18n=false) const
Cast as QString.
swift::misc::CIcons::IconIndex toIcon() const
As icon, not implemented by all classes.
QString valueRoundedWithUnit(const MU &unit, int digits=-1, bool withGroupSeparator=false, bool i18n=false) const
Value to QString with the given unit, e.g. "5.00m".
Comprehensive information of an aircraft.
const aviation::CAircraftSituation & getSituation() const
Get situation.
const aviation::CComSystem & getCom2System() const
Get COM2 system.
bool hasCG() const
Has CG from model?
QString getTransponderCodeFormatted() const
Get transponder code.
const aviation::CComSystem & getCom1System() const
Get COM1 system.
const physical_quantities::CLength & getCG() const
Get CG from model.
const QString & getModelString() const
Get model string.
Simple hardcoded info about the corresponding simulator.
CIcons::IconIndex toIcon() const
As icon, not implemented by all classes.
bool isAnySimulator() const
Any simulator?
Simulator internals for flight simulators. Those are obtained from a running simulator and represent ...
QStringList getSortedNames() const
Get sorted names.
CVariant getVariantValue(const QString &name) const
Get value.
const QString & getSimulator() const
Simulator.
const CSimulatorInfo & getSimulatorInfo() const
Simulator info object.
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
Backend services of the swift project, like dealing with the network or the simulators.
High level reusable GUI components.
Free functions in swift::misc.