Ref T268, log.display UI allows to display "loopback" situations

This commit is contained in:
Klaus Basan
2018-07-18 03:32:18 +02:00
parent 88098dddf7
commit 5c9e670705
3 changed files with 100 additions and 18 deletions

View File

@@ -13,7 +13,6 @@
#include "blackcore/context/contextnetworkimpl.h"
#include "blackcore/context/contextsimulator.h"
#include "blackcore/airspacemonitor.h"
#include "blackmisc/simulation/interpolationlogger.h"
#include "blackmisc/stringutils.h"
using namespace BlackCore;
@@ -51,7 +50,7 @@ namespace BlackGui
ui->led_Updating->setValues(CLedWidget::Yellow, CLedWidget::Black, shape, "Just updating", "Idle", 14);
m_callsign = ui->comp_CallsignCompleter->getCallsign();
ui->tvp_AircraftSituations->setWithMenuRequestElevation(true);
ui->tvp_InboundAircraftSituations->setWithMenuRequestElevation(true);
connect(&m_updateTimer, &QTimer::timeout, this, &CInterpolationLogDisplay::updateLog);
connect(ui->comp_CallsignCompleter, &CCallsignCompleter::validCallsignEntered, this, &CInterpolationLogDisplay::onCallsignEntered);
@@ -63,9 +62,9 @@ namespace BlackGui
connect(ui->pb_FollowInSimulator, &QPushButton::released, this, &CInterpolationLogDisplay::followInSimulator);
connect(ui->pb_RequestElevation1, &QPushButton::released, this, &CInterpolationLogDisplay::requestElevationClicked);
connect(ui->pb_RequestElevation2, &QPushButton::released, this, &CInterpolationLogDisplay::requestElevationClicked);
connect(ui->pb_GetLastInterpolation, &QPushButton::released, this, &CInterpolationLogDisplay::displayLastInterpolation);
connect(ui->pb_GetLastInterpolation, &QPushButton::released, this, &CInterpolationLogDisplay::getLogAmdDisplayLastInterpolation);
connect(ui->pb_InjectElevation, &QPushButton::released, this, &CInterpolationLogDisplay::onInjectElevation);
connect(ui->tvp_AircraftSituations, &CAircraftSituationView::requestElevation, this, &CInterpolationLogDisplay::requestElevation);
connect(ui->tvp_InboundAircraftSituations, &CAircraftSituationView::requestElevation, this, &CInterpolationLogDisplay::requestElevation);
connect(ui->le_InjectElevation, &QLineEdit::returnPressed, this, &CInterpolationLogDisplay::onInjectElevation);
connect(sGui, &CGuiApplication::aboutToShutdown, this, &CInterpolationLogDisplay::onAboutToShutdown);
}
@@ -114,6 +113,9 @@ namespace BlackGui
return;
}
const SituationLog sLog = m_simulator->interpolationLogger().getLastSituationLog();
m_lastInterpolations.push_frontKeepLatestAdjustedFirst(sLog.situationCurrent, true, 10);
// only display visible tab
if (ui->tw_LogTabs->currentWidget() == ui->tb_TextLog)
{
@@ -146,15 +148,24 @@ namespace BlackGui
ui->le_GndFlag->setText(boolToYesNo(client.hasGndFlagCapability()));
this->displayElevationRequestReceive();
this->displayLastInterpolation();
this->displayLastInterpolation(sLog);
}
else if (ui->tw_LogTabs->currentWidget() == ui->tb_Loopback)
{
this->displayLoopback();
}
}
void CInterpolationLogDisplay::displayLastInterpolation()
void CInterpolationLogDisplay::getLogAmdDisplayLastInterpolation()
{
const SituationLog sLog = m_simulator->interpolationLogger().getLastSituationLog();
this->displayLastInterpolation(sLog);
}
void CInterpolationLogDisplay::displayLastInterpolation(const SituationLog &sLog)
{
if (!this->checkLogPrerequisites()) { return; }
const SituationLog sLog = m_simulator->interpolationLogger().getLastSituationLog();
ui->te_LastInterpolatedSituation->setText(sLog.situationCurrent.toQString(true));
ui->te_SituationChange->setText(sLog.change.toQString(true));
@@ -165,6 +176,13 @@ namespace BlackGui
ui->te_LastInterpolatedParts->setText(pLog.parts.toQString(true));
}
void CInterpolationLogDisplay::displayLoopback()
{
if (!m_simulator) { return; }
ui->tvp_LoopbackAircraftSituations->updateContainerAsync(m_simulator->getLoopbackSituations(m_callsign));
ui->tvp_InterpolatedAircraftSituations->updateContainerAsync(m_lastInterpolations);
}
void CInterpolationLogDisplay::onSliderChanged(int timeSecs)
{
static const QString time("%1secs");
@@ -282,7 +300,7 @@ namespace BlackGui
if (!this->logCallsign(cs)) { return; }
const CAircraftSituationList situations = m_airspaceMonitor->remoteAircraftSituations(cs);
const CAircraftSituationChangeList changes = m_airspaceMonitor->remoteAircraftSituationChanges(cs);
ui->tvp_AircraftSituations->updateContainerAsync(situations);
ui->tvp_InboundAircraftSituations->updateContainerAsync(situations);
ui->tvp_Changes->updateContainerMaybeAsync(changes);
ui->led_Situation->blink();
}
@@ -292,7 +310,7 @@ namespace BlackGui
if (!this->logCallsign(callsign)) { return; }
Q_UNUSED(parts);
const CAircraftPartsList partsList = m_airspaceMonitor->remoteAircraftParts(callsign);
ui->tvp_AircraftParts->updateContainerAsync(partsList);
ui->tvp_InboundAircraftParts->updateContainerAsync(partsList);
ui->led_Parts->blink();
}
@@ -341,8 +359,8 @@ namespace BlackGui
void CInterpolationLogDisplay::clear()
{
ui->tvp_AircraftParts->clear();
ui->tvp_AircraftSituations->clear();
ui->tvp_InboundAircraftParts->clear();
ui->tvp_InboundAircraftSituations->clear();
ui->te_TextLog->clear();
ui->le_CG->clear();
ui->le_Elevation->clear();
@@ -352,6 +370,8 @@ namespace BlackGui
ui->le_UpdateTimes->clear();
ui->le_Limited->clear();
m_elvReceived = m_elvRequested = 0;
m_lastInterpolations.clear();
m_lastLoopbackSituations.clear();
}
bool CInterpolationLogDisplay::checkLogPrerequisites()
@@ -376,7 +396,7 @@ namespace BlackGui
break;
}
if (!m_simulator->getLogCallsigns().contains(m_callsign))
if (!m_simulator->isLogCallsign(m_callsign))
{
static const CStatusMessage ms = CStatusMessage(this).validationError("No longer logging callsign");
m = ms;

View File

@@ -15,6 +15,8 @@
#include "blackgui/overlaymessagesframe.h"
#include "blackgui/blackguiexport.h"
#include "blackcore/simulator.h"
#include "blackmisc/simulation/interpolationlogger.h"
#include "blackmisc/aviation/aircraftsituationlist.h"
#include "blackmisc/aviation/callsign.h"
#include "blackmisc/identifiable.h"
#include <QFrame>
@@ -44,6 +46,7 @@ namespace BlackGui
TabFlow,
TabFlow2,
TabInterpolation,
TabLoopback,
TabTextLog
};
@@ -67,7 +70,13 @@ namespace BlackGui
void updateLog();
//! Get last interpolation
void displayLastInterpolation();
void getLogAmdDisplayLastInterpolation();
//! Get last interpolation
void displayLastInterpolation(const BlackMisc::Simulation::SituationLog &sLog);
//! Display the loopback information
void displayLoopback();
//! Slider interval
void onSliderChanged(int timeSecs);
@@ -145,6 +154,8 @@ namespace BlackGui
QTimer m_updateTimer;
QPointer<BlackCore::ISimulator> m_simulator; //!< related simulator
QPointer<BlackCore::CAirspaceMonitor> m_airspaceMonitor; //!< related airspace monitor
BlackMisc::Aviation::CAircraftSituationList m_lastInterpolations;
BlackMisc::Aviation::CAircraftSituationList m_lastLoopbackSituations;
BlackMisc::Aviation::CCallsign m_callsign; //!< current callsign
int m_elvRequested = 0; //!< counted via signal
int m_elvReceived = 0; //!< counted via signal

View File

@@ -532,7 +532,7 @@
</property>
<layout class="QVBoxLayout" name="vl_InboundSituations">
<item>
<widget class="BlackGui::Views::CAircraftSituationView" name="tvp_AircraftSituations">
<widget class="BlackGui::Views::CAircraftSituationView" name="tvp_InboundAircraftSituations">
<property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum>
</property>
@@ -552,7 +552,7 @@
</property>
<layout class="QVBoxLayout" name="vl_InboundParts">
<item>
<widget class="BlackGui::Views::CAircraftPartsView" name="tvp_AircraftParts">
<widget class="BlackGui::Views::CAircraftPartsView" name="tvp_InboundAircraftParts">
<property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum>
</property>
@@ -603,7 +603,7 @@
<attribute name="title">
<string>Interpolation</string>
</attribute>
<layout class="QVBoxLayout" name="vl_Interpolation" stretch="0,0,2,1">
<layout class="QVBoxLayout" name="vl_Interpolation">
<property name="leftMargin">
<number>4</number>
</property>
@@ -747,6 +747,57 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="tb_Loopback">
<attribute name="title">
<string>Loopback (Sim-&gt;Driver)</string>
</attribute>
<layout class="QVBoxLayout" name="vl_Loopback">
<item>
<widget class="QGroupBox" name="gb_InterpolatedSituations">
<property name="title">
<string>Interpolated</string>
</property>
<layout class="QVBoxLayout" name="vl_InterpolatedGb">
<item>
<widget class="BlackGui::Views::CAircraftSituationView" name="tvp_InterpolatedAircraftSituations">
<property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="gb_LoopbackSituations">
<property name="title">
<string>Loopback</string>
</property>
<layout class="QVBoxLayout" name="vl_LoopbackGb">
<item>
<widget class="BlackGui::Views::CAircraftSituationView" name="tvp_LoopbackAircraftSituations">
<property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tb_TextLog">
<attribute name="title">
<string>Text log.</string>
@@ -818,8 +869,8 @@
<tabstop>le_ElevationReqRec</tabstop>
<tabstop>le_Elevation</tabstop>
<tabstop>le_SimulatorSpecific</tabstop>
<tabstop>tvp_AircraftSituations</tabstop>
<tabstop>tvp_AircraftParts</tabstop>
<tabstop>tvp_InboundAircraftSituations</tabstop>
<tabstop>tvp_InboundAircraftParts</tabstop>
<tabstop>tvp_Changes</tabstop>
<tabstop>le_InjectElevation</tabstop>
<tabstop>pb_InjectElevation</tabstop>