6#include <QIntValidator>
9#include "ui_simulatoremulatedmonitordialog.h"
16using namespace swift::config;
18using namespace swift::misc::aviation;
19using namespace swift::misc::simulation;
22using namespace swift::gui::editors;
24namespace swift::simplugin::emulated
35 Q_ASSERT_X(simulator, Q_FUNC_INFO,
"Need simulator");
38 ui->tw_SwiftMonitorDialog->setCurrentIndex(0);
39 ui->comp_LogComponent->setMaxLogMessages(500);
42 m_simulator = simulator;
43 m_uiUpdateTimer.setObjectName(this->
objectName() +
":uiUpdateTimer");
44 m_uiUpdateTimer.start(2500);
51 &CSimulatorEmulatedMonitorDialog::onSimulatorValuesChanged);
54 &CSimulatorEmulatedMonitorDialog::onSimulatorValuesChanged);
69 &CSimulatorEmulatedMonitorDialog::interpolatorLogButton);
71 &CSimulatorEmulatedMonitorDialog::interpolatorLogButton);
73 &CSimulatorEmulatedMonitorDialog::interpolatorLogButton);
75 &CSimulatorEmulatedMonitorDialog::interpolatorLogButton);
77 &CSimulatorEmulatedMonitorDialog::interpolatorLogButton);
79 &CSimulatorEmulatedMonitorDialog::interpolatorLogButton);
82 &CSimulatorEmulatedMonitorDialog::addAutoPublishTestData);
84 ui->led_Receiving->setToolTips(
"receiving",
"idle");
85 ui->led_Receiving->setShape(CLedWidget::Rounded);
86 ui->led_Sending->setToolTips(
"sending",
"idle");
87 ui->led_Sending->setShape(CLedWidget::Rounded);
88 ui->led_Fetching->setToolTips(
"fetching interpolated",
"not fetching interpolated");
89 ui->led_Fetching->setShape(CLedWidget::Rounded);
91 ui->le_InterpolatorTimeMs->setValidator(
new QIntValidator(10, 20000, ui->le_InterpolatorTimeMs));
93 this->enableInterpolationLogButtons(
false);
94 this->setSimulatorUiValues();
95 this->setInternalAircraftUiValues();
103 ui->comp_LogComponent->appendStatusMessagesToList(statusMessage);
109 ui->comp_LogComponent->appendStatusMessagesToList(statusMessages);
115 ui->led_Receiving->blink();
116 this->appendFunctionCall(function, p1, p2, p3);
122 ui->led_Sending->blink();
123 this->appendFunctionCall(function, p1, p2, p3);
126 void CSimulatorEmulatedMonitorDialog::appendFunctionCall(
const QString &function,
const QString &p1,
129 static const QString c1(
"%1 %2");
130 static const QString c2(
"%1 %2 %3");
131 static const QString c3(
"%1 %2 %3 %4");
155 ui->pte_StatusMessages->setPlainText(message.
toQString(
true));
160 ui->pte_TextMessages->setPlainText(message.
toQString(
true));
170 this->setSimulatorUiValues();
173 void CSimulatorEmulatedMonitorDialog::onSimulatorValuesChanged()
175 m_simulator->
setCombinedStatus(ui->cb_Connected->isChecked(), ui->cb_Simulating->isChecked(),
176 ui->cb_Paused->isChecked());
179 void CSimulatorEmulatedMonitorDialog::onSavedComTransmissionValues(
CComSystem::ComUnit unit)
181 if (!this->canUseSimulator())
187 ui->comp_ComTransmissions->updateComSystem(com, unit);
191 void CSimulatorEmulatedMonitorDialog::changeComFromUi(
const CSimulatedAircraft &aircraft)
193 if (!this->canUseSimulator())
197 m_simulator->changeInternalCom(aircraft);
200 void CSimulatorEmulatedMonitorDialog::changeSelcalFromUi(
const CSelcal &selcal)
202 if (!this->canUseSimulator())
206 m_simulator->changeInternalSelcal(selcal);
209 void CSimulatorEmulatedMonitorDialog::changeSituationFromUi()
211 if (!this->canUseSimulator())
215 const CAircraftSituation s(ui->editor_Situation->getSituation());
216 m_simulator->changeInternalSituation(s);
219 void CSimulatorEmulatedMonitorDialog::changePartsFromUi()
221 if (!this->canUseSimulator())
225 const CAircraftParts p(ui->editor_AircraftParts->getAircraftPartsFromGui());
226 m_simulator->changeInternalParts(p);
229 void CSimulatorEmulatedMonitorDialog::setSimulatorUiValues()
231 ui->cb_Connected->setChecked(m_simulator->isConnected());
232 ui->cb_Paused->setChecked(m_simulator->isPaused());
233 ui->cb_Simulating->setChecked(m_simulator->isSimulating());
235 ui->le_Simulator->setText(m_simulator->getSimulatorInfo().toQString(
true));
236 ui->le_SimulatorPlugin->setText(m_simulator->getSimulatorPluginInfo().toQString(
true));
239 void CSimulatorEmulatedMonitorDialog::setInternalAircraftUiValues()
241 const CSimulatedAircraft internal(m_simulator->getInternalOwnAircraft());
242 ui->editor_Situation->setSituation(internal.getSituation());
243 ui->editor_AircraftParts->setAircraftParts(internal.getParts());
244 ui->editor_Com->setValue(internal);
245 ui->comp_ComTransmissions->setComSystems(internal);
248 void CSimulatorEmulatedMonitorDialog::timerBasedUiUpdates()
250 if (!this->canUseSimulator())
255 ui->le_PhysicallyAddedAircraft->setText(
QString::number(m_simulator->getStatisticsPhysicallyAddedAircraft()));
256 ui->le_PhysicallyRemovedAircraft->setText(
QString::number(m_simulator->aircraftSituationsAdded()));
257 ui->le_SituationAdded->setText(
QString::number(m_simulator->aircraftSituationsAdded()));
258 ui->le_PartsAdded->setText(
QString::number(m_simulator->aircraftPartsAdded()));
259 ui->le_AircraftRendered->setText(
QString::number(m_simulator->m_renderedAircraft.size()));
260 ui->le_PartsEnabledAircraft->setText(
QString::number(m_simulator->getRemoteAircraftSupportingPartsCount()));
263 void CSimulatorEmulatedMonitorDialog::resetStatistics()
265 if (!this->canUseSimulator())
270 m_simulator->resetAircraftStatistics();
271 ui->le_PhysicallyAddedAircraft->clear();
272 ui->le_PhysicallyRemovedAircraft->clear();
273 ui->le_SituationAdded->clear();
274 ui->le_PartsAdded->clear();
277 void CSimulatorEmulatedMonitorDialog::interpolatorLogButton()
281 if (
sender == ui->pb_InterpolatorStopLog)
283 ok = m_simulator->parseCommandLine(
".drv logint off", this->
identifier());
285 else if (
sender == ui->pb_InterpolatorWriteLog)
287 ok = m_simulator->parseCommandLine(
".drv logint write", this->
identifier());
289 else if (
sender == ui->pb_InterpolatorClearLog)
291 ok = m_simulator->parseCommandLine(
".drv logint clear", this->
identifier());
293 else if (
sender == ui->pb_InterpolatorShowLogs)
295 ok = m_simulator->parseCommandLine(
".drv logint show", this->
identifier());
297 else if (
sender == ui->pb_InterpolatorStartLog)
299 const CCallsign cs = ui->comp_LogInterpolatorCallsign->getCallsign();
302 ok = m_simulator->parseCommandLine(
".drv logint " + cs.
asString(), this->identifier());
306 CLogMessage(
this).warning(u
"Need a (valid) callsign to write a log");
310 else if (
sender == ui->pb_InterpolatorFetch)
313 const int timeMs = m_simulator->isInterpolatorFetching() ? -1 : ui->le_InterpolatorTimeMs->text().toInt();
314 const bool fetching = m_simulator->setInterpolatorFetchTime(timeMs);
315 ui->led_Fetching->setOn(fetching);
316 ui->pb_InterpolatorFetch->setText(fetching ?
"Stop" :
"Fetch");
317 this->enableInterpolationLogButtons(fetching);
322 Q_ASSERT_X(
false, Q_FUNC_INFO,
"Unhandled button");
326 CLogMessage(
this).warning(u
"Cannot parse command for button: %1") <<
sender->objectName();
330 void CSimulatorEmulatedMonitorDialog::enableInterpolationLogButtons(
bool enable)
332 ui->pb_InterpolatorClearLog->setEnabled(enable);
333 ui->pb_InterpolatorShowLogs->setEnabled(enable);
334 ui->pb_InterpolatorStartLog->setEnabled(enable);
335 ui->pb_InterpolatorStopLog->setEnabled(enable);
336 ui->pb_InterpolatorWriteLog->setEnabled(enable);
339 void CSimulatorEmulatedMonitorDialog::emitSignal()
341 if (!this->canUseSimulator())
346 const CCallsign cs = ui->comp_CallsignCompleter->getCallsign();
350 const CSimulatedAircraft aircraft = m_simulator->getAircraftInRangeForCallsign(cs);
352 "Simulated driver driver failed for " + cs.
asString());
353 emit m_simulator->physicallyAddingRemoteModelFailed(aircraft,
true, ui->cb_Failover->isChecked(), msg);
357 void CSimulatorEmulatedMonitorDialog::addAutoPublishTestData()
359 if (!this->canUseSimulator())
363 m_simulator->m_autoPublishing.testData();
366 bool CSimulatorEmulatedMonitorDialog::canUseSimulator()
const
bool isShuttingDown() const
Is application shutting down?
void changedValues(swift::misc::aviation::CComSystem::ComUnit unit)
Values changed for unit.
CIdentifiable(const QString &objectName)
Use literal based object name.
const CIdentifier & identifier() const
Get identifier.
static const QString & driver()
Driver.
static const QString & plugin()
Plugin.
Streamable status message, e.g.
static constexpr auto SeverityInfo
Status severities.
static constexpr auto SeverityError
Status severities.
Status messages, e.g. from Core -> GUI.
const QString & asString() const
Get callsign (normalized).
bool isValid() const
Valid callsign?
COM system (aka "radio").
QString toQString(bool i18n=false) const
Cast as QString.
Value object encapsulating information of a text message.
CSimulatedAircraft getOwnAircraft() const
Own aircraft.
Comprehensive information of an aircraft.
aviation::CComSystem getComSystem(aviation::CComSystem::ComUnit unit) const
Get COM unit.
Simple hardcoded info about the corresponding simulator.
bool isSingleSimulator() const
Single simulator selected.
CSimulatorInfo getSimulatorInfo() const
Get the represented simulator.
swift simulator implementation
void internalAircraftChanged()
Internal aircraft changed.
bool changeInternalCom(const swift::misc::simulation::CSimulatedAircraft &aircraft)
Simulator internal change of COM values.
void setCombinedStatus(bool connected, bool simulating, bool paused)
UI setter.
CSimulatorEmulatedMonitorDialog(CSimulatorEmulated *simulator, QWidget *parent=nullptr)
Ctor.
void appendStatusMessageToList(const swift::misc::CStatusMessage &statusMessage)
Append status message.
void appendReceivingCall(const QString &function, const QString &p1={}, const QString &p2={}, const QString &p3={})
Receiving call to be written in log widget.
void displayStatusMessage(const swift::misc::CStatusMessage &message)
Display status message.
void updateWindowTitleAndUiValues(const swift::misc::simulation::CSimulatorInfo &info)
The title.
void appendStatusMessagesToList(const swift::misc::CStatusMessageList &statusMessages)
Append status messages.
void appendSendingCall(const QString &function, const QString &p1={}, const QString &p2={}, const QString &p3={})
Sending call to be written in log widget.
~CSimulatorEmulatedMonitorDialog()
Dtor.
static const QStringList & getLogCategories()
Log categories.
void displayTextMessage(const swift::misc::network::CTextMessage &message)
Display text message.
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
High level reusable GUI components.
Free functions in swift::misc.
QDialog(QWidget *parent, Qt::WindowFlags f)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
QObject * parent() const const
QObject * sender() const const
bool isEmpty() const const
QString number(double n, char format, int precision)
WindowContextHelpButtonHint