6 #include <QIntValidator>
9 #include "ui_simulatoremulatedmonitordialog.h"
16 using namespace swift::config;
18 using namespace swift::misc::aviation;
19 using namespace swift::misc::simulation;
22 using namespace swift::gui::editors;
24 namespace swift::simplugin::emulated
26 const QStringList &CSimulatorEmulatedMonitorDialog::getLogCategories()
28 static const QStringList cats { CLogCategories::driver(), CLogCategories::plugin() };
32 CSimulatorEmulatedMonitorDialog::CSimulatorEmulatedMonitorDialog(
CSimulatorEmulated *simulator, QWidget *parent)
35 Q_ASSERT_X(simulator, Q_FUNC_INFO,
"Need simulator");
38 ui->tw_SwiftMonitorDialog->setCurrentIndex(0);
39 ui->comp_LogComponent->setMaxLogMessages(500);
40 this->setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
42 m_simulator = simulator;
43 m_uiUpdateTimer.setObjectName(this->objectName() +
":uiUpdateTimer");
44 m_uiUpdateTimer.start(2500);
47 &CSimulatorEmulatedMonitorDialog::setInternalAircraftUiValues, Qt::QueuedConnection);
48 connect(&m_uiUpdateTimer, &QTimer::timeout,
this, &CSimulatorEmulatedMonitorDialog::timerBasedUiUpdates);
50 connect(ui->cb_Connected, &QCheckBox::released,
this,
51 &CSimulatorEmulatedMonitorDialog::onSimulatorValuesChanged);
52 connect(ui->cb_Paused, &QCheckBox::released,
this, &CSimulatorEmulatedMonitorDialog::onSimulatorValuesChanged);
53 connect(ui->cb_Simulating, &QCheckBox::released,
this,
54 &CSimulatorEmulatedMonitorDialog::onSimulatorValuesChanged);
56 connect(ui->editor_Situation, &CSituationForm::changeAircraftSituation,
this,
57 &CSimulatorEmulatedMonitorDialog::changeSituationFromUi, Qt::QueuedConnection);
58 connect(ui->editor_AircraftParts, &CAircraftPartsForm::changeAircraftParts,
this,
59 &CSimulatorEmulatedMonitorDialog::changePartsFromUi, Qt::QueuedConnection);
60 connect(ui->editor_Com, &CCockpitComForm::changedCockpitValues,
this,
61 &CSimulatorEmulatedMonitorDialog::changeComFromUi, Qt::QueuedConnection);
62 connect(ui->editor_Com, &CCockpitComForm::changedSelcal,
this,
63 &CSimulatorEmulatedMonitorDialog::changeSelcalFromUi, Qt::QueuedConnection);
64 connect(ui->comp_ComTransmissions, &CCockpitComTransmissionComponent::changedValues,
this,
65 &CSimulatorEmulatedMonitorDialog::onSavedComTransmissionValues, Qt::QueuedConnection);
67 connect(ui->pb_ResetStatistics, &QPushButton::clicked,
this, &CSimulatorEmulatedMonitorDialog::resetStatistics);
68 connect(ui->pb_InterpolatorStopLog, &QPushButton::clicked,
this,
69 &CSimulatorEmulatedMonitorDialog::interpolatorLogButton);
70 connect(ui->pb_InterpolatorWriteLog, &QPushButton::clicked,
this,
71 &CSimulatorEmulatedMonitorDialog::interpolatorLogButton);
72 connect(ui->pb_InterpolatorClearLog, &QPushButton::clicked,
this,
73 &CSimulatorEmulatedMonitorDialog::interpolatorLogButton);
74 connect(ui->pb_InterpolatorShowLogs, &QPushButton::clicked,
this,
75 &CSimulatorEmulatedMonitorDialog::interpolatorLogButton);
76 connect(ui->pb_InterpolatorStartLog, &QPushButton::clicked,
this,
77 &CSimulatorEmulatedMonitorDialog::interpolatorLogButton);
78 connect(ui->pb_InterpolatorFetch, &QPushButton::clicked,
this,
79 &CSimulatorEmulatedMonitorDialog::interpolatorLogButton);
80 connect(ui->pb_EmitAddedFailed, &QPushButton::clicked,
this, &CSimulatorEmulatedMonitorDialog::emitSignal);
81 connect(ui->pb_AddAutoPublishData, &QPushButton::clicked,
this,
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);
113 const QString &p2,
const QString &p3)
115 ui->led_Receiving->blink();
116 this->appendFunctionCall(
function, p1, p2, p3);
120 const QString &p2,
const QString &p3)
122 ui->led_Sending->blink();
123 this->appendFunctionCall(
function, p1, p2, p3);
126 void CSimulatorEmulatedMonitorDialog::appendFunctionCall(
const QString &
function,
const QString &p1,
127 const QString &p2,
const QString &p3)
129 static const QString c1(
"%1 %2");
130 static const QString c2(
"%1 %2 %3");
131 static const QString c3(
"%1 %2 %3 %4");
134 if (!p3.isEmpty()) { msg =
CStatusMessage(
this, CStatusMessage::SeverityInfo, c3.arg(
function, p1, p2, p3)); }
135 else if (!p2.isEmpty()) { msg =
CStatusMessage(
this, CStatusMessage::SeverityInfo, c2.arg(
function, p1, p2)); }
136 else if (!p1.isEmpty()) { msg =
CStatusMessage(
this, CStatusMessage::SeverityInfo, c1.arg(
function, p1)); }
137 else { msg =
CStatusMessage(
this, CStatusMessage::SeverityInfo,
function); }
143 ui->pte_StatusMessages->setPlainText(message.
toQString(
true));
148 ui->pte_TextMessages->setPlainText(message.
toQString(
true));
154 this->setWindowTitle(
"Emulated driver : " + info.
toQString());
155 this->setSimulatorUiValues();
158 void CSimulatorEmulatedMonitorDialog::onSimulatorValuesChanged()
160 m_simulator->
setCombinedStatus(ui->cb_Connected->isChecked(), ui->cb_Simulating->isChecked(),
161 ui->cb_Paused->isChecked());
164 void CSimulatorEmulatedMonitorDialog::onSavedComTransmissionValues(
CComSystem::ComUnit unit)
166 if (!this->canUseSimulator()) {
return; }
169 ui->comp_ComTransmissions->updateComSystem(com, unit);
173 void CSimulatorEmulatedMonitorDialog::changeComFromUi(
const CSimulatedAircraft &aircraft)
175 if (!this->canUseSimulator()) {
return; }
179 void CSimulatorEmulatedMonitorDialog::changeSelcalFromUi(
const CSelcal &selcal)
181 if (!this->canUseSimulator()) {
return; }
185 void CSimulatorEmulatedMonitorDialog::changeSituationFromUi()
187 if (!this->canUseSimulator()) {
return; }
192 void CSimulatorEmulatedMonitorDialog::changePartsFromUi()
194 if (!this->canUseSimulator()) {
return; }
195 const CAircraftParts p(ui->editor_AircraftParts->getAircraftPartsFromGui());
199 void CSimulatorEmulatedMonitorDialog::setSimulatorUiValues()
201 ui->cb_Connected->setChecked(m_simulator->
isConnected());
202 ui->cb_Paused->setChecked(m_simulator->
isPaused());
203 ui->cb_Simulating->setChecked(m_simulator->
isSimulating());
209 void CSimulatorEmulatedMonitorDialog::setInternalAircraftUiValues()
212 ui->editor_Situation->setSituation(
internal.getSituation());
213 ui->editor_AircraftParts->setAircraftParts(
internal.getParts());
214 ui->editor_Com->setValue(
internal);
215 ui->comp_ComTransmissions->setComSystems(
internal);
218 void CSimulatorEmulatedMonitorDialog::timerBasedUiUpdates()
220 if (!this->canUseSimulator()) {
return; }
226 ui->le_AircraftRendered->setText(QString::number(m_simulator->m_renderedAircraft.
size()));
230 void CSimulatorEmulatedMonitorDialog::resetStatistics()
232 if (!this->canUseSimulator()) {
return; }
235 ui->le_PhysicallyAddedAircraft->clear();
236 ui->le_PhysicallyRemovedAircraft->clear();
237 ui->le_SituationAdded->clear();
238 ui->le_PartsAdded->clear();
241 void CSimulatorEmulatedMonitorDialog::interpolatorLogButton()
243 const QObject *sender = QObject::sender();
245 if (sender == ui->pb_InterpolatorStopLog)
249 else if (sender == ui->pb_InterpolatorWriteLog)
253 else if (sender == ui->pb_InterpolatorClearLog)
257 else if (sender == ui->pb_InterpolatorShowLogs)
261 else if (sender == ui->pb_InterpolatorStartLog)
263 const CCallsign cs = ui->comp_LogInterpolatorCallsign->getCallsign();
274 else if (sender == ui->pb_InterpolatorFetch)
277 const int timeMs = m_simulator->
isInterpolatorFetching() ? -1 : ui->le_InterpolatorTimeMs->text().toInt();
279 ui->led_Fetching->setOn(fetching);
280 ui->pb_InterpolatorFetch->setText(fetching ?
"Stop" :
"Fetch");
281 this->enableInterpolationLogButtons(fetching);
284 else { Q_ASSERT_X(
false, Q_FUNC_INFO,
"Unhandled button"); }
285 if (!ok) {
CLogMessage(
this).
warning(u
"Cannot parse command for button: %1") << sender->objectName(); }
288 void CSimulatorEmulatedMonitorDialog::enableInterpolationLogButtons(
bool enable)
290 ui->pb_InterpolatorClearLog->setEnabled(enable);
291 ui->pb_InterpolatorShowLogs->setEnabled(enable);
292 ui->pb_InterpolatorStartLog->setEnabled(enable);
293 ui->pb_InterpolatorStopLog->setEnabled(enable);
294 ui->pb_InterpolatorWriteLog->setEnabled(enable);
297 void CSimulatorEmulatedMonitorDialog::emitSignal()
299 if (!this->canUseSimulator()) {
return; }
301 const CCallsign cs = ui->comp_CallsignCompleter->getCallsign();
302 const QObject *sender = QObject::sender();
303 if (sender == ui->pb_EmitAddedFailed && cs.
isValid())
307 "Simulated driver driver failed for " + cs.
asString());
312 void CSimulatorEmulatedMonitorDialog::addAutoPublishTestData()
314 if (!this->canUseSimulator()) {
return; }
318 bool CSimulatorEmulatedMonitorDialog::canUseSimulator()
const
bool isShuttingDown() const
Is application shutting down?
int getStatisticsPhysicallyAddedAircraft() const
Counter added aircraft.
void physicallyAddingRemoteModelFailed(const swift::misc::simulation::CSimulatedAircraft &remoteAircraft, bool disabled, bool requestFailover, const swift::misc::CStatusMessage &message)
Adding the remote model failed.
swift::misc::simulation::CAutoPublishData m_autoPublishing
for the DB
virtual void resetAircraftStatistics()
Reset the statistics.
Base class with a member CIdentifier to be inherited by a class which has an identity in the environm...
const CIdentifier & identifier() const
Get identifier.
Class for emitting a log message.
Derived & warning(const char16_t(&format)[N])
Set the severity to warning, providing a format string.
size_type size() const
Returns number of elements in the sequence.
Streamable status message, e.g.
Status messages, e.g. from Core -> GUI.
Value object encapsulating information of aircraft's parts.
Value object encapsulating information of an aircraft's situation.
Value object encapsulating information of a callsign.
const QString & asString() const
Get callsign (normalized)
bool isValid() const
Valid callsign?
QString toQString(bool i18n=false) const
Cast as QString.
Value object encapsulating information of a text message.
CSimulatedAircraft getOwnAircraft() const
Own aircraft.
int aircraftSituationsAdded() const
Number of situations added.
CSimulatedAircraft getAircraftInRangeForCallsign(const aviation::CCallsign &callsign) const
Aircraft for callsign.
int aircraftPartsAdded() const
Number of parts added.
int getRemoteAircraftSupportingPartsCount() const
Number of aircraft supporting parts.
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.
CSimulatorPluginInfo getSimulatorPluginInfo() const
Get the represented plugin.
CSimulatorInfo getSimulatorInfo() const
Get the represented simulator.
swift simulator implementation
bool isInterpolatorFetching() const
Is fetching from interpolator.
void internalAircraftChanged()
Internal aircraft changed.
const swift::misc::simulation::CSimulatedAircraft & getInternalOwnAircraft() const
Internal own aircraft.
bool changeInternalSituation(const swift::misc::aviation::CAircraftSituation &situation)
Simulator internal change of situation.
bool changeInternalCom(const swift::misc::simulation::CSimulatedAircraft &aircraft)
Simulator internal change of COM values.
virtual bool isSimulating() const
Simulator running?
bool setInterpolatorFetchTime(int timeMs)
Interpolator fetch time, <=0 stops.
bool changeInternalParts(const swift::misc::aviation::CAircraftParts &parts)
Simulator internal change of parts.
bool changeInternalSelcal(const swift::misc::aviation::CSelcal &selcal)
Simulator internal change of SELCAL.
virtual bool isConnected() const
Are we connected to the simulator?
virtual bool isPaused() const
Simulator paused?
void setCombinedStatus(bool connected, bool simulating, bool paused)
UI setter.
Monitor widget for the pseudo driver.
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.
virtual ~CSimulatorEmulatedMonitorDialog()
Dtor.
void displayTextMessage(const swift::misc::network::CTextMessage &message)
Display text message.
virtual bool parseCommandLine(const QString &commandLine, const swift::misc::CIdentifier &originator)
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
High level reusable GUI components.
Free functions in swift::misc.