Add new page in sample_blackgui to display user aircraft data

refs #143
This commit is contained in:
Roland Winklmeier
2014-03-03 22:14:30 +01:00
parent 23056c61c8
commit eccfae1fd3
4 changed files with 252 additions and 3 deletions

View File

@@ -3,6 +3,7 @@
#include "blackgui/atcstationlistmodel.h" #include "blackgui/atcstationlistmodel.h"
#include "blackcore/dbus_server.h" #include "blackcore/dbus_server.h"
#include "blackcore/context_network.h" #include "blackcore/context_network.h"
#include "blackmisc/avaircraft.h"
#include <QMouseEvent> #include <QMouseEvent>
using namespace BlackCore; using namespace BlackCore;
@@ -33,10 +34,11 @@ MainWindow::MainWindow(GuiModes::WindowMode windowMode, QWidget *parent) :
m_coreMode(GuiModes::CoreExternal), m_coreMode(GuiModes::CoreExternal),
m_coreAvailable(false), m_contextNetworkAvailable(false), m_contextVoiceAvailable(false), m_coreAvailable(false), m_contextNetworkAvailable(false), m_contextVoiceAvailable(false),
m_contextApplication(nullptr), m_contextNetwork(nullptr), m_contextVoice(nullptr), m_contextSettings(nullptr), m_contextApplication(nullptr), m_contextNetwork(nullptr), m_contextVoice(nullptr), m_contextSettings(nullptr),
m_contextSimulator(nullptr),
// timers // timers
m_timerUpdateAtcStationsOnline(nullptr), m_timerUpdateAircraftsInRange(nullptr), m_timerUpdateUsers(nullptr), m_timerUpdateAtcStationsOnline(nullptr), m_timerUpdateAircraftsInRange(nullptr), m_timerUpdateUsers(nullptr),
m_timerCollectedCockpitUpdates(nullptr), m_timerContextWatchdog(nullptr), m_timerCollectedCockpitUpdates(nullptr), m_timerContextWatchdog(nullptr),
m_timerStatusBar(nullptr), m_timerAudioTests(nullptr), m_timerStatusBar(nullptr), m_timerAudioTests(nullptr), m_timerSimulator(nullptr),
// context menus // context menus
m_contextMenuAudio(nullptr), m_contextMenuStatusMessageList(nullptr), m_contextMenuAudio(nullptr), m_contextMenuStatusMessageList(nullptr),
// cockpit // cockpit
@@ -165,6 +167,8 @@ void MainWindow::setMainPage(bool start)
this->ui->sw_MainMiddle->setCurrentIndex(MainPageFlightplan); this->ui->sw_MainMiddle->setCurrentIndex(MainPageFlightplan);
else if (sender == this->ui->pb_MainSettings) else if (sender == this->ui->pb_MainSettings)
this->ui->sw_MainMiddle->setCurrentIndex(MainPageSettings); this->ui->sw_MainMiddle->setCurrentIndex(MainPageSettings);
else if (sender == this->ui->pb_MainSimulator)
this->ui->sw_MainMiddle->setCurrentIndex(MainPageSimulator);
} }
/* /*
@@ -314,6 +318,11 @@ void MainWindow::connectionStatusChanged(uint /** from **/, uint to)
} }
} }
void MainWindow::simulatorAvailable()
{
m_timerSimulator->start(500);
}
/* /*
* Timer event * Timer event
*/ */
@@ -343,6 +352,10 @@ void MainWindow::timerBasedUpdates()
this->setContextAvailability(); this->setContextAvailability();
this->updateGuiStatusInformation(); this->updateGuiStatusInformation();
} }
else if (sender == this->m_timerSimulator)
{
updateSimulatorData();
}
// own aircraft // own aircraft
if (sender == this->m_timerUpdateAircraftsInRange || sender == this->m_timerUpdateAtcStationsOnline) if (sender == this->m_timerUpdateAircraftsInRange || sender == this->m_timerUpdateAtcStationsOnline)
@@ -489,3 +502,27 @@ void MainWindow::reloadAllUsers()
this->ui->tv_AllUsers->resizeRowsToContents(); this->ui->tv_AllUsers->resizeRowsToContents();
this->ui->tv_AllUsers->horizontalHeader()->setStretchLastSection(true); this->ui->tv_AllUsers->horizontalHeader()->setStretchLastSection(true);
} }
void MainWindow::updateSimulatorData()
{
if (m_contextSimulator->isConnected())
ui->le_SimulatorStatus->setText("Connected");
else
ui->le_SimulatorStatus->setText("Not connected");
CAircraft ownAircraft = m_contextSimulator->ownAircraft();
ui->le_SimulatorLatitude->setText(ownAircraft.getSituation().latitude().toFormattedQString());
ui->le_SimulatorLongitude->setText(ownAircraft.getSituation().longitude().toFormattedQString());
ui->le_SimulatorAltitude->setText(ownAircraft.getSituation().getAltitude().toFormattedQString());
ui->le_SimulatorPitch->setText(ownAircraft.getSituation().getPitch().toFormattedQString());
ui->le_SimulatorBank->setText(ownAircraft.getSituation().getBank().toFormattedQString());
ui->le_SimulatorHeading->setText(ownAircraft.getSituation().getHeading().toFormattedQString());
ui->le_SimulatorGroundSpeed->setText(ownAircraft.getSituation().getGroundSpeed().toFormattedQString());
ui->le_SimulatorCom1Active->setText(ownAircraft.getCom1System().getFrequencyActive().toFormattedQString());
ui->le_SimulatorCom1Standby->setText(ownAircraft.getCom1System().getFrequencyStandby().toFormattedQString());
ui->le_SimulatorCom2Active->setText(ownAircraft.getCom2System().getFrequencyActive().toFormattedQString());
ui->le_SimulatorCom2Standby->setText(ownAircraft.getCom2System().getFrequencyStandby().toFormattedQString());
ui->le_SimulatorTransponder->setText(ownAircraft.getTransponderCodeFormatted());
}

View File

@@ -16,6 +16,7 @@
#include "blackcore/context_network_interface.h" #include "blackcore/context_network_interface.h"
#include "blackcore/context_settings_interface.h" #include "blackcore/context_settings_interface.h"
#include "blackcore/context_application_interface.h" #include "blackcore/context_application_interface.h"
#include "blackcore/context_simulator.h"
#include "blackcore/coreruntime.h" #include "blackcore/coreruntime.h"
#include "blackgui/atcstationlistmodel.h" #include "blackgui/atcstationlistmodel.h"
#include "blackgui/serverlistmodel.h" #include "blackgui/serverlistmodel.h"
@@ -93,7 +94,8 @@ protected:
MainPageCockpit = 4, MainPageCockpit = 4,
MainPageTextMessages = 5, MainPageTextMessages = 5,
MainPageFlightplan = 6, MainPageFlightplan = 6,
MainPageSettings = 7 MainPageSettings = 7,
MainPageSimulator = 8
}; };
enum AudioTest enum AudioTest
@@ -133,6 +135,7 @@ private:
BlackCore::IContextNetwork *m_contextNetwork; BlackCore::IContextNetwork *m_contextNetwork;
BlackCore::IContextVoice *m_contextVoice; BlackCore::IContextVoice *m_contextVoice;
BlackCore::IContextSettings *m_contextSettings; BlackCore::IContextSettings *m_contextSettings;
BlackCore::IContextSimulator *m_contextSimulator;
BlackMisc::Aviation::CAircraft m_ownAircraft; /*!< own aircraft's state */ BlackMisc::Aviation::CAircraft m_ownAircraft; /*!< own aircraft's state */
QTimer *m_timerUpdateAtcStationsOnline; /*!< timer for update of stations */ QTimer *m_timerUpdateAtcStationsOnline; /*!< timer for update of stations */
QTimer *m_timerUpdateAircraftsInRange; /*!< timer for update of aircrafts */ QTimer *m_timerUpdateAircraftsInRange; /*!< timer for update of aircrafts */
@@ -141,6 +144,7 @@ private:
QTimer *m_timerContextWatchdog; /*!< core available? */ QTimer *m_timerContextWatchdog; /*!< core available? */
QTimer *m_timerStatusBar; /*!< cleaning up status bar */ QTimer *m_timerStatusBar; /*!< cleaning up status bar */
QTimer *m_timerAudioTests; /*!< cleaning up status bar */ QTimer *m_timerAudioTests; /*!< cleaning up status bar */
QTimer *m_timerSimulator; /*!< update simulator data */
// pixmaps // pixmaps
QPixmap m_resPixmapConnectionConnected; QPixmap m_resPixmapConnectionConnected;
@@ -314,6 +318,9 @@ private:
*/ */
void playNotifcationSound(BlackSound::CSoundGenerator::Notification notification) const; void playNotifcationSound(BlackSound::CSoundGenerator::Notification notification) const;
//! \brief Update simulator page with latest user aircraft data
void updateSimulatorData();
private slots: private slots:
// //
@@ -372,6 +379,8 @@ private slots:
//! \brief Send cockpit updates //! \brief Send cockpit updates
void sendCockpitUpdates(); void sendCockpitUpdates();
void simulatorAvailable();
// //
// GUI related slots // GUI related slots
// //

View File

@@ -554,7 +554,7 @@ QStatusBar QLabel {
<item> <item>
<widget class="QToolBox" name="tb_StatusPage"> <widget class="QToolBox" name="tb_StatusPage">
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>1</number>
</property> </property>
<property name="tabSpacing"> <property name="tabSpacing">
<number>3</number> <number>3</number>
@@ -2485,6 +2485,190 @@ QStatusBar QLabel {
</item> </item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="pg_Simulator">
<layout class="QGridLayout" name="gridLayout_2">
<item row="3" column="0">
<widget class="QLabel" name="lbl_OwnAircraftSituationLongitude">
<property name="text">
<string>Longitude</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="lbl_SimulatorStatus">
<property name="text">
<string>Status</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="lbl_OwnAircraftSituationBank">
<property name="text">
<string>Bank</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="lbl_OwnAircraftSituationLatitude">
<property name="text">
<string>Latitude</string>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="lbl_SimulatorGroundSpeed">
<property name="text">
<string>Ground Speed</string>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="lbl_SimulatorHeading">
<property name="text">
<string>Heading</string>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="lbl_SimulatorOnGround">
<property name="text">
<string>On ground</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="lbl_OwnAircraftSituationAltitude">
<property name="text">
<string>Altitude</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="lbl_OwnAircraftSituationPitch">
<property name="text">
<string>Pitch</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="le_SimulatorStatus">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="le_SimulatorLatitude">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="le_SimulatorLongitude">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLineEdit" name="le_SimulatorAltitude">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QLineEdit" name="le_SimulatorPitch">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item row="10" column="1">
<widget class="QLineEdit" name="le_SimulatorCom1Active">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item row="11" column="0">
<widget class="QLabel" name="lbl_SimulatorCom1Standby">
<property name="text">
<string>COM1 Standby</string>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="lbl_SimulatorCom1Active">
<property name="text">
<string>COM1 Active</string>
</property>
</widget>
</item>
<item row="12" column="0">
<widget class="QLabel" name="lbl_SimulatorCom2Active">
<property name="text">
<string>COM2 Active</string>
</property>
</widget>
</item>
<item row="13" column="0">
<widget class="QLabel" name="lbl_SimulatorCom2Standby">
<property name="text">
<string>COM2 Standby</string>
</property>
</widget>
</item>
<item row="11" column="1">
<widget class="QLineEdit" name="le_SimulatorCom1Standby"/>
</item>
<item row="12" column="1">
<widget class="QLineEdit" name="le_SimulatorCom2Active"/>
</item>
<item row="13" column="1">
<widget class="QLineEdit" name="le_SimulatorCom2Standby"/>
</item>
<item row="6" column="1">
<widget class="QLineEdit" name="le_SimulatorBank">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QLineEdit" name="le_SimulatorHeading">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="QLineEdit" name="le_SimulatorGroundSpeed">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QLineEdit" name="le_SimulatorOnGround">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item row="14" column="1">
<widget class="QLineEdit" name="le_SimulatorTransponder"/>
</item>
<item row="14" column="0">
<widget class="QLabel" name="lbl_SimulatorTransponder">
<property name="text">
<string>Transponder</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget> </widget>
</item> </item>
<item> <item>
@@ -2813,6 +2997,13 @@ QStatusBar QLabel {
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="2">
<widget class="QPushButton" name="pb_MainSimulator">
<property name="text">
<string>Simulator</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>

View File

@@ -2,6 +2,8 @@
#include "ui_mainwindow.h" #include "ui_mainwindow.h"
#include "blackcore/dbus_server.h" #include "blackcore/dbus_server.h"
#include "blackcore/context_network.h" #include "blackcore/context_network.h"
#include "blackcore/context_simulator_impl.h"
#include "blackcore/context_simulator_proxy.h"
#include "blackcore/coreruntime.h" #include "blackcore/coreruntime.h"
#include "blackgui/atcstationlistmodel.h" #include "blackgui/atcstationlistmodel.h"
#include "blackgui/keyboardkeylistmodel.h" #include "blackgui/keyboardkeylistmodel.h"
@@ -156,6 +158,7 @@ void MainWindow::init(GuiModes::CoreMode coreMode)
if (this->m_timerContextWatchdog == nullptr) this->m_timerContextWatchdog = new QTimer(this); if (this->m_timerContextWatchdog == nullptr) this->m_timerContextWatchdog = new QTimer(this);
if (this->m_timerCollectedCockpitUpdates == nullptr) this->m_timerCollectedCockpitUpdates = new QTimer(this); if (this->m_timerCollectedCockpitUpdates == nullptr) this->m_timerCollectedCockpitUpdates = new QTimer(this);
if (this->m_timerAudioTests == nullptr) this->m_timerAudioTests = new QTimer(this); if (this->m_timerAudioTests == nullptr) this->m_timerAudioTests = new QTimer(this);
if (this->m_timerSimulator == nullptr) this->m_timerSimulator = new QTimer(this);
// context // context
if (this->m_coreMode != GuiModes::CoreInGuiProcess) if (this->m_coreMode != GuiModes::CoreInGuiProcess)
@@ -165,6 +168,7 @@ void MainWindow::init(GuiModes::CoreMode coreMode)
this->m_contextVoice = new BlackCore::IContextVoice(BlackCore::CDBusServer::ServiceName, this->m_dBusConnection, this); this->m_contextVoice = new BlackCore::IContextVoice(BlackCore::CDBusServer::ServiceName, this->m_dBusConnection, this);
this->m_contextSettings = new BlackCore::IContextSettings(BlackCore::CDBusServer::ServiceName, this->m_dBusConnection, this); this->m_contextSettings = new BlackCore::IContextSettings(BlackCore::CDBusServer::ServiceName, this->m_dBusConnection, this);
this->m_contextApplication = new BlackCore::IContextApplication(BlackCore::CDBusServer::ServiceName, this->m_dBusConnection, this); this->m_contextApplication = new BlackCore::IContextApplication(BlackCore::CDBusServer::ServiceName, this->m_dBusConnection, this);
this->m_contextSimulator = new BlackCore::CContextSimulatorProxy(BlackCore::CDBusServer::ServiceName, this->m_dBusConnection, this);
} }
else else
{ {
@@ -173,6 +177,7 @@ void MainWindow::init(GuiModes::CoreMode coreMode)
this->m_contextVoice = this->m_coreRuntime->getIContextVoice(); this->m_contextVoice = this->m_coreRuntime->getIContextVoice();
this->m_contextSettings = this->m_coreRuntime->getIContextSettings(); this->m_contextSettings = this->m_coreRuntime->getIContextSettings();
this->m_contextApplication = this->m_coreRuntime->getIContextApplication(); this->m_contextApplication = this->m_coreRuntime->getIContextApplication();
this->m_contextSimulator = this->m_coreRuntime->getIContextSimulator();
} }
// wire GUI signals // wire GUI signals
@@ -209,12 +214,14 @@ void MainWindow::init(GuiModes::CoreMode coreMode)
this->connect(this->m_contextSettings, &IContextSettings::changedSettings, this, &MainWindow::changedSettings); this->connect(this->m_contextSettings, &IContextSettings::changedSettings, this, &MainWindow::changedSettings);
connect = this->connect(this->m_contextNetwork, SIGNAL(textMessagesReceived(BlackMisc::Network::CTextMessageList)), this, SLOT(appendTextMessagesToGui(BlackMisc::Network::CTextMessageList))); connect = this->connect(this->m_contextNetwork, SIGNAL(textMessagesReceived(BlackMisc::Network::CTextMessageList)), this, SLOT(appendTextMessagesToGui(BlackMisc::Network::CTextMessageList)));
Q_ASSERT(connect); Q_ASSERT(connect);
this->connect(this->m_contextSimulator, &IContextSimulator::connectionChanged, this, &MainWindow::simulatorAvailable);
this->connect(this->m_timerUpdateAircraftsInRange, &QTimer::timeout, this, &MainWindow::timerBasedUpdates); this->connect(this->m_timerUpdateAircraftsInRange, &QTimer::timeout, this, &MainWindow::timerBasedUpdates);
this->connect(this->m_timerUpdateAtcStationsOnline, &QTimer::timeout, this, &MainWindow::timerBasedUpdates); this->connect(this->m_timerUpdateAtcStationsOnline, &QTimer::timeout, this, &MainWindow::timerBasedUpdates);
this->connect(this->m_timerUpdateUsers, &QTimer::timeout, this, &MainWindow::timerBasedUpdates); this->connect(this->m_timerUpdateUsers, &QTimer::timeout, this, &MainWindow::timerBasedUpdates);
this->connect(this->m_timerContextWatchdog, &QTimer::timeout, this, &MainWindow::timerBasedUpdates); this->connect(this->m_timerContextWatchdog, &QTimer::timeout, this, &MainWindow::timerBasedUpdates);
this->connect(this->m_timerCollectedCockpitUpdates, &QTimer::timeout, this, &MainWindow::sendCockpitUpdates); this->connect(this->m_timerCollectedCockpitUpdates, &QTimer::timeout, this, &MainWindow::sendCockpitUpdates);
this->connect(this->m_timerAudioTests, &QTimer::timeout, this, &MainWindow::audioTestUpdate); this->connect(this->m_timerAudioTests, &QTimer::timeout, this, &MainWindow::audioTestUpdate);
this->connect(this->m_timerSimulator, &QTimer::timeout, this, &MainWindow::timerBasedUpdates);
connect = this->connect(this->m_contextVoice, &IContextVoice::audioTestCompleted, this, &MainWindow::audioTestUpdate); connect = this->connect(this->m_contextVoice, &IContextVoice::audioTestCompleted, this, &MainWindow::audioTestUpdate);
// start timers, update timers will be started when network is connected // start timers, update timers will be started when network is connected
@@ -239,6 +246,9 @@ void MainWindow::init(GuiModes::CoreMode coreMode)
// do this as last statement, so it can be used as flag // do this as last statement, so it can be used as flag
// whether init has been completed // whether init has been completed
this->m_init = true; this->m_init = true;
// TODO remove later
simulatorAvailable();
} }
// //
@@ -267,6 +277,8 @@ void MainWindow::initGuiSignals()
Q_ASSERT(connected); Q_ASSERT(connected);
connected = this->connect(this->ui->pb_MainSettings, SIGNAL(released()), this, SLOT(setMainPage())); connected = this->connect(this->ui->pb_MainSettings, SIGNAL(released()), this, SLOT(setMainPage()));
Q_ASSERT(connected); Q_ASSERT(connected);
connected = this->connect(this->ui->pb_MainSimulator, SIGNAL(released()), this, SLOT(setMainPage()));
Q_ASSERT(connected);
connected = this->connect(this->ui->pb_MainStatus, SIGNAL(released()), this, SLOT(setMainPage())); connected = this->connect(this->ui->pb_MainStatus, SIGNAL(released()), this, SLOT(setMainPage()));
Q_ASSERT(connected); Q_ASSERT(connected);
connected = this->connect(this->ui->pb_MainUsers, SIGNAL(released()), this, SLOT(setMainPage())); connected = this->connect(this->ui->pb_MainUsers, SIGNAL(released()), this, SLOT(setMainPage()));