diff --git a/samples/blackgui/mainwindow.cpp b/samples/blackgui/mainwindow.cpp index 59baa8bfe..7b91507ea 100644 --- a/samples/blackgui/mainwindow.cpp +++ b/samples/blackgui/mainwindow.cpp @@ -5,9 +5,7 @@ #include "blackcore/context_network.h" #include "blackcore/context_application.h" #include "blackcore/network.h" - #include "blackmisc/avaircraft.h" - #include using namespace BlackCore; diff --git a/samples/blackgui/mainwindow.h b/samples/blackgui/mainwindow.h index 3439355f6..6b6d29161 100644 --- a/samples/blackgui/mainwindow.h +++ b/samples/blackgui/mainwindow.h @@ -318,8 +318,8 @@ private: * \brief Play notifcation sound */ void playNotifcationSound(BlackSound::CSoundGenerator::Notification notification) const; - - //! \brief Update simulator page with latest user aircraft data + + //! \brief Update simulator page with latest user aircraft data void updateSimulatorData(); private slots: @@ -405,14 +405,10 @@ private slots: */ void toggleNetworkConnection(); - /*! - * \brief Menu item clicked - */ + //! \brief Menu item clicked void menuClicked(); - /*! - * \brief Terminated connection - */ + //! \brief Terminated connection void connectionTerminated(); /*! @@ -432,9 +428,7 @@ private slots: */ void alterTrafficServer(); - /*! - * \brief Network settings have been changed - */ + //! \brief Network settings have been changed void changedSettings(); /*! @@ -454,28 +448,19 @@ private slots: */ void middlePanelChanged(int index); - /*! - * \brief Command entered - */ + //! \brief Command entered void commandEntered(); - /*! - * \brief Get METAR - * \param airportIcaoCode - */ + //! \brief Get METAR for given ICAO airport code void getMetar(const QString &airportIcaoCode = ""); //! \brief Request new ATIS void requestAtis(); - /*! - * \brief Close text message tab - */ + //! \brief Close text message tab void closeTextMessageTab(); - /*! - * \brief Cockpit values changed - */ + //! \brief Cockpit values changed void cockpitValuesChanged(); /*! @@ -484,9 +469,7 @@ private slots: */ void audioDeviceSelected(int index); - /*! - * \brief Reset transponder to Standby / Charly - */ + //! \brief Reset transponder to Standby / Charly void resetTransponderMode(); /*! @@ -525,6 +508,13 @@ private slots: //! Clear single hotkey void clearHotkey(); + + //! Test the SIM connect connectivity + void testSimConnectConnection(); + + //! Save a simconnect.cfg file for FSX + void saveSimConnectCfg(); + }; #pragma pop_macro("interface") diff --git a/samples/blackgui/mainwindow.ui b/samples/blackgui/mainwindow.ui index cbfb4383f..866b6f9b0 100644 --- a/samples/blackgui/mainwindow.ui +++ b/samples/blackgui/mainwindow.ui @@ -1798,9 +1798,9 @@ QStatusBar QLabel { 0 - + - 4 + 3 @@ -2289,6 +2289,73 @@ QStatusBar QLabel { + + + Simulator + + + + + + QFormLayout::AllNonFixedFieldsGrow + + + + + FSX address + + + + + + + 127.0.0.1 + + + + + + + FSX port + + + + + + + 500 + + + + + + + + + Open + + + + + + + Save + + + + + + + Test connection + + + + + + + + + GUI @@ -3168,7 +3235,7 @@ QStatusBar QLabel { te_TextMessagesUnicom te_TextMessagesCOM1 te_TextMessagesCOM2 - tb_Settings + Simulator tv_SettingsTnServers le_SettingsTnCsName le_SettingsTnCsDescription diff --git a/samples/blackgui/mainwindow_init.cpp b/samples/blackgui/mainwindow_init.cpp index afa8fd6a0..2bddb60e4 100644 --- a/samples/blackgui/mainwindow_init.cpp +++ b/samples/blackgui/mainwindow_init.cpp @@ -367,6 +367,10 @@ void MainWindow::initGuiSignals() this->connect(this->ui->pb_SettingsMiscSave, &QPushButton::clicked, this, &MainWindow::saveHotkeys); this->connect(this->ui->pb_SettingsMiscRemove, &QPushButton::clicked, this, &MainWindow::clearHotkey); + // Settings simulator + this->connect(this->ui->pb_SettingsSimulatorFsxTestConnection, &QPushButton::clicked, this, &MainWindow::testSimConnectConnection); + this->connect(this->ui->pb_SettingsSimulatorFsxSaveSimconnectCfg, &QPushButton::clicked, this, &MainWindow::saveSimConnectCfg); + // no warnings in release build Q_UNUSED(connected); } diff --git a/samples/blackgui/mainwindow_settings.cpp b/samples/blackgui/mainwindow_settings.cpp index 34e5399fa..fae08756a 100644 --- a/samples/blackgui/mainwindow_settings.cpp +++ b/samples/blackgui/mainwindow_settings.cpp @@ -4,6 +4,8 @@ #include "blackcore/dbus_server.h" #include "blackcore/context_network.h" #include "blackmisc/hwkeyboardkey.h" +#include "blackmisc/networkchecks.h" +#include "blacksim/fsx/simconnectutilities.h" using namespace BlackCore; using namespace BlackMisc; @@ -13,6 +15,7 @@ using namespace BlackMisc::Aviation; using namespace BlackMisc::PhysicalQuantities; using namespace BlackMisc::Geo; using namespace BlackMisc::Settings; +using namespace BlackSim::Fsx; /* * Reload settings @@ -146,3 +149,69 @@ void MainWindow::clearHotkey() defKey.setFunction(key.getFunction()); this->m_modelSettingsHotKeys->update(i, defKey); } + +void MainWindow::testSimConnectConnection() +{ + QString address = this->ui->le_SettingsSimulatorFsxAddress->text().trimmed(); + QString port = this->ui->le_SettingsSimulatorFsxPort->text().trimmed(); + + if (address.isEmpty() || port.isEmpty()) + { + this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, "no address or port")); + return; + } + if (!CNetworkChecks::isValidIPv4Address(address)) + { + this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, "IPv4 address invalid")); + return; + } + if (!CNetworkChecks::isValidPort(port)) + { + this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, "invalid port")); + return; + } + quint16 p = port.toUInt(); + QString msg; + if (!CNetworkChecks::canConnect(address, p, msg)) + { + this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, msg)); + return; + } + + msg = QString("Connected to %1:%2").arg(address).arg(port); + this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityInfo, msg)); +} + +void MainWindow::saveSimConnectCfg() +{ + QString address = this->ui->le_SettingsSimulatorFsxAddress->text().trimmed(); + QString port = this->ui->le_SettingsSimulatorFsxPort->text().trimmed(); + + if (address.isEmpty() || port.isEmpty()) + { + this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, "no address or port")); + return; + } + if (!CNetworkChecks::isValidIPv4Address(address)) + { + this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, "IPv4 address invalid")); + return; + } + if (!CNetworkChecks::isValidPort(port)) + { + this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, "invalid port")); + return; + } + quint16 p = port.toUInt(); + QString file = CSimConnectUtilities::getLocalSimConnectCfgFilename(); + if (CSimConnectUtilities::writeSimConnectCfg(file, address, p)) + { + QString m = QString("Written ").append(file); + this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityInfo, m)); + } + else + { + QString m = QString("Cannot write ").append(file); + this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityError, m)); + } +} diff --git a/samples/blackgui/sample_blackgui.pro b/samples/blackgui/sample_blackgui.pro index cf0950cc9..3c9f61aca 100644 --- a/samples/blackgui/sample_blackgui.pro +++ b/samples/blackgui/sample_blackgui.pro @@ -10,20 +10,22 @@ TEMPLATE = app SOURCES += *.cpp HEADERS += *.h FORMS += *.ui -CONFIG += blackmisc blacksound blackcore blackgui +CONFIG += blackmisc blacksound blackcore blackgui blacksim -DEPENDPATH += . ../../src/blackmisc ../../src/blackgui ../../src/blacksound ../../src/blackcore +DEPENDPATH += . ../../src/blackmisc ../../src/blackgui ../../src/blacksound ../../src/blacksim ../../src/blackcore INCLUDEPATH += . ../../src DESTDIR = ../../bin win32:!win32-g++*: PRE_TARGETDEPS += ../../lib/blackmisc.lib \ ../../lib/blackgui.lib \ + ../../lib/blacksim.lib \ ../../lib/blacksound.lib \ ../../lib/blackcore.lib else: PRE_TARGETDEPS += ../../lib/libblackmisc.a \ ../../lib/libblackgui.a \ + ../../lib/libblacksim.a \ ../../lib/libblacksound.a \ ../../lib/libblackcore.a