diff --git a/samples/blackgui/mainwindow.h b/samples/blackgui/mainwindow.h index c86568f13..fedb7f6dd 100644 --- a/samples/blackgui/mainwindow.h +++ b/samples/blackgui/mainwindow.h @@ -408,14 +408,6 @@ private slots: //! Clear single hotkey void clearHotkey(); - //! Test the SIM connect connectivity - void testSimConnectConnection(); - - //! Save a simconnect.cfg file for FSX - void saveSimConnectCfg(); - - //! simConnect.cfg: open, exists? delete - void simConnectCfgFile(); }; #pragma pop_macro("interface") diff --git a/samples/blackgui/mainwindow.ui b/samples/blackgui/mainwindow.ui index b206ae637..1196ec26e 100644 --- a/samples/blackgui/mainwindow.ui +++ b/samples/blackgui/mainwindow.ui @@ -461,7 +461,7 @@ QStatusBar QLabel { QFrame::NoFrame - 4 + 7 @@ -571,8 +571,8 @@ QStatusBar QLabel { 0 0 - 326 - 267 + 86 + 59 @@ -1801,9 +1801,9 @@ QStatusBar QLabel { 0 - + - 0 + 3 @@ -2292,119 +2292,20 @@ QStatusBar QLabel { - + Simulator - - - QFormLayout::AllNonFixedFieldsGrow + + + QFrame::StyledPanel - - - - FSX address - - - - - - - 127.0.0.1 - - - - - - - FSX port - - - - - - - 500 - - - - - - - - - Open - - - - - - - Delete - - - - - - - Save - - - - - - - Test connection - - - - - - - - - "simconnect.cfg" exists? - - - - - - - - 4 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - true - - - - - - - Check - - - - - - - + + QFrame::Raised + + @@ -3302,6 +3203,12 @@ QStatusBar QLabel {
blackgui/flightplancomponent.h
1 + + BlackGui::CSettingsFsxComponent + QFrame +
blackgui/settingsfsxcomponent.h
+ 1 +
cb_StatusWithDBus @@ -3343,7 +3250,7 @@ QStatusBar QLabel { te_TextMessagesUnicom te_TextMessagesCOM1 te_TextMessagesCOM2 - Simulator + tw_Settings tvp_SettingsTnServers le_SettingsTnCsName le_SettingsTnCsDescription diff --git a/samples/blackgui/mainwindow_init.cpp b/samples/blackgui/mainwindow_init.cpp index 9bb2b83cb..d55d4936a 100644 --- a/samples/blackgui/mainwindow_init.cpp +++ b/samples/blackgui/mainwindow_init.cpp @@ -273,13 +273,6 @@ 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); - this->connect(this->ui->pb_SettingsSimulatorFsxOpenSimconnectCfg, &QPushButton::clicked, this, &MainWindow::simConnectCfgFile); - this->connect(this->ui->pb_SettingsSimulatorFsxDeleteSimconnectCfg, &QPushButton::clicked, this, &MainWindow::simConnectCfgFile); - this->connect(this->ui->pb_SettingsSimulatorFsxExistsSimconncetCfg, &QPushButton::clicked, this, &MainWindow::simConnectCfgFile); - // no warnings in release build Q_UNUSED(connected); } diff --git a/samples/blackgui/mainwindow_settings.cpp b/samples/blackgui/mainwindow_settings.cpp index fe4b54079..e4f563c94 100644 --- a/samples/blackgui/mainwindow_settings.cpp +++ b/samples/blackgui/mainwindow_settings.cpp @@ -4,10 +4,6 @@ #include "blackcore/dbus_server.h" #include "blackcore/context_network.h" #include "blackmisc/hwkeyboardkey.h" -#include "blackmisc/networkutils.h" -#include "blacksim/fsx/fsxsimulatorsetup.h" -#include "blacksim/fsx/simconnectutilities.h" -#include using namespace BlackCore; using namespace BlackMisc; @@ -17,7 +13,6 @@ using namespace BlackMisc::Aviation; using namespace BlackMisc::PhysicalQuantities; using namespace BlackMisc::Geo; using namespace BlackMisc::Settings; -using namespace BlackSim::Fsx; /* * Reload settings @@ -150,136 +145,3 @@ void MainWindow::clearHotkey() defaultKey.setFunction(key.getFunction()); this->ui->tvp_SettingsMiscHotkeys->derivedModel()->update(i, defaultKey); } - -/* - * SimConnect working? - */ -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 (!CNetworkUtils::isValidIPv4Address(address)) - { - this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, "IPv4 address invalid")); - return; - } - if (!CNetworkUtils::isValidPort(port)) - { - this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, "invalid port")); - return; - } - quint16 p = port.toUInt(); - QString msg; - if (!CNetworkUtils::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)); -} - -/* - * Save simconnect.cfg - */ -void MainWindow::saveSimConnectCfg() -{ - if (!this->getIContextSimulator()) return; - if (!this->getIContextSimulator()->isSimulatorAvailable()) return; - 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 (!CNetworkUtils::isValidIPv4Address(address)) - { - this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, "IPv4 address invalid")); - return; - } - if (!CNetworkUtils::isValidPort(port)) - { - this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, "invalid port")); - return; - } - quint16 p = port.toUInt(); - QString fileName = this->getIContextSimulator()->getSimulatorInfo().getSimulatorSetupValueAsString(CFsxSimulatorSetup::SetupSimConnectCfgFile); - Q_ASSERT(!fileName.isEmpty()); - // write either local or remote file - bool local = this->getIContextSimulator()->usingLocalObjects(); - bool success = local ? - BlackSim::Fsx::CSimConnectUtilities::writeSimConnectCfg(fileName, address, p) : - this->getIContextApplication()->writeToFile(fileName, CSimConnectUtilities::simConnectCfg(address, p)); - if (success) - { - QString m = QString("Written ").append(local ? " local " : "remote ").append(fileName); - this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityInfo, m)); - } - else - { - QString m = QString("Cannot write ").append(fileName); - this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityError, m)); - } - this->ui->pb_SettingsSimulatorFsxExistsSimconncetCfg->click(); // update status -} - -/* - * simconnect.cfg: open, delete, exists? - */ -void MainWindow::simConnectCfgFile() -{ - if (!this->getIContextSimulator()) return; - if (!this->getIContextSimulator()->isSimulatorAvailable()) return; - - QObject *sender = QObject::sender(); - if (sender == this->ui->pb_SettingsSimulatorFsxOpenSimconnectCfg) - { - QFileInfo fi(CSimConnectUtilities::getLocalSimConnectCfgFilename()); - QString path = QDir::toNativeSeparators(fi.absolutePath()); - QDesktopServices::openUrl(QUrl("file:///" + path)); - } - else if (sender == this->ui->pb_SettingsSimulatorFsxDeleteSimconnectCfg) - { - if (!this->getIContextSimulator()) return; - QString fileName = BlackSim::Fsx::CSimConnectUtilities::getLocalSimConnectCfgFilename(); - QString m = QString("Deleted %1 ").append(fileName); - if (this->getIContextSimulator()->usingLocalObjects()) - { - QFile f(fileName); - f.remove(); - m = m.arg("locally"); - } - else - { - this->getIContextApplication()->removeFile(fileName); - m = m.arg("remotely"); - } - this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeSimulator, CStatusMessage::SeverityInfo, m)); - this->ui->pb_SettingsSimulatorFsxExistsSimconncetCfg->click(); // update status - } - else if (sender == this->ui->pb_SettingsSimulatorFsxExistsSimconncetCfg) - { - if (!this->getIContextSimulator()) return; - QString fileName = BlackSim::Fsx::CSimConnectUtilities::getLocalSimConnectCfgFilename(); - bool exists = this->getIContextSimulator()->usingLocalObjects() ? - QFile::exists(fileName) : - this->getIContextApplication()->existsFile(fileName); - if (exists) - { - this->ui->le_SettingsSimulatorFsxExistsSimconncetCfg->setText(fileName); - } - else - { - this->ui->le_SettingsSimulatorFsxExistsSimconncetCfg->setText("no file"); - } - } -} diff --git a/src/blackgui/settingsfsxcomponent.cpp b/src/blackgui/settingsfsxcomponent.cpp new file mode 100644 index 000000000..8451d27dd --- /dev/null +++ b/src/blackgui/settingsfsxcomponent.cpp @@ -0,0 +1,176 @@ +#include "settingsfsxcomponent.h" +#include "ui_settingsfsxcomponent.h" +#include +#include +#include +#include + +#include "blackmisc/networkutils.h" +#include "blackmisc/statusmessage.h" +#include "blacksim/fsx/fsxsimulatorsetup.h" +#include "blacksim/fsx/simconnectutilities.h" + +using namespace BlackMisc; +using namespace BlackSim::Fsx; +using namespace BlackMisc::Network; + +namespace BlackGui +{ + + CSettingsFsxComponent::CSettingsFsxComponent(QWidget *parent) : + QFrame(parent), CRuntimeBasedComponent(nullptr, false), ui(new Ui::CSettingsFsxComponent) + { + ui->setupUi(this); + + this->connect(this->ui->pb_SettingsFsxTestConnection, &QPushButton::clicked, this, &CSettingsFsxComponent::testSimConnectConnection); + this->connect(this->ui->pb_SettingsFsxSaveSimconnectCfg, &QPushButton::clicked, this, &CSettingsFsxComponent::saveSimConnectCfg); + this->connect(this->ui->pb_SettingsFsxOpenSimconnectCfg, &QPushButton::clicked, this, &CSettingsFsxComponent::simConnectCfgFile); + this->connect(this->ui->pb_SettingsFsxDeleteSimconnectCfg, &QPushButton::clicked, this, &CSettingsFsxComponent::simConnectCfgFile); + this->connect(this->ui->pb_SettingsFsxExistsSimconncetCfg, &QPushButton::clicked, this, &CSettingsFsxComponent::simConnectCfgFile); + + } + + CSettingsFsxComponent::~CSettingsFsxComponent() + { + delete ui; + } + + /* + * SimConnect working? + */ + void CSettingsFsxComponent::testSimConnectConnection() + { + QString address = this->ui->le_SettingsFsxAddress->text().trimmed(); + QString port = this->ui->le_SettingsFsxPort->text().trimmed(); + + if (address.isEmpty() || port.isEmpty()) + { + this->sendStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, "no address or port")); + return; + } + if (!CNetworkUtils::isValidIPv4Address(address)) + { + this->sendStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, "IPv4 address invalid")); + return; + } + if (!CNetworkUtils::isValidPort(port)) + { + this->sendStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, "invalid port")); + return; + } + quint16 p = port.toUInt(); + QString msg; + if (!CNetworkUtils::canConnect(address, p, msg)) + { + this->sendStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, msg)); + return; + } + + msg = QString("Connected to %1:%2").arg(address).arg(port); + this->sendStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityInfo, msg)); + } + + /* + * Save simconnect.cfg + */ + void CSettingsFsxComponent::saveSimConnectCfg() + { + if (!this->getIContextSimulator() || !this->getIContextSimulator()->isSimulatorAvailable()) + { + this->sendStatusMessage(CStatusMessage::getErrorMessage("Simulator not available", CStatusMessage::TypeSimulator)); + return; + } + QString address = this->ui->le_SettingsFsxAddress->text().trimmed(); + QString port = this->ui->le_SettingsFsxPort->text().trimmed(); + + if (address.isEmpty() || port.isEmpty()) + { + this->sendStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, "no address or port")); + return; + } + if (!CNetworkUtils::isValidIPv4Address(address)) + { + this->sendStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, "IPv4 address invalid")); + return; + } + if (!CNetworkUtils::isValidPort(port)) + { + this->sendStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, "invalid port")); + return; + } + quint16 p = port.toUInt(); + QString fileName = this->getIContextSimulator()->getSimulatorInfo().getSimulatorSetupValueAsString(CFsxSimulatorSetup::SetupSimConnectCfgFile); + Q_ASSERT(!fileName.isEmpty()); + // write either local or remote file + bool local = this->getIContextSimulator()->usingLocalObjects(); + bool success = local ? + BlackSim::Fsx::CSimConnectUtilities::writeSimConnectCfg(fileName, address, p) : + this->getIContextApplication()->writeToFile(fileName, CSimConnectUtilities::simConnectCfg(address, p)); + if (success) + { + QString m = QString("Written ").append(local ? " local " : "remote ").append(fileName); + this->sendStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityInfo, m)); + } + else + { + QString m = QString("Cannot write ").append(fileName); + this->sendStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityError, m)); + } + this->ui->pb_SettingsFsxExistsSimconncetCfg->click(); // update status + } + + /* + * simconnect.cfg: open, delete, exists? + */ + void CSettingsFsxComponent::simConnectCfgFile() + { + if (!this->getIContextSimulator() || !this->getIContextSimulator()->isSimulatorAvailable()) + { + this->sendStatusMessage(CStatusMessage::getErrorMessage("Simulator not available", CStatusMessage::TypeSimulator)); + return; + } + + QObject *sender = QObject::sender(); + if (sender == this->ui->pb_SettingsFsxOpenSimconnectCfg) + { + QFileInfo fi(CSimConnectUtilities::getLocalSimConnectCfgFilename()); + QString path = QDir::toNativeSeparators(fi.absolutePath()); + QDesktopServices::openUrl(QUrl("file:///" + path)); + } + else if (sender == this->ui->pb_SettingsFsxDeleteSimconnectCfg) + { + if (!this->getIContextSimulator()) return; + QString fileName = BlackSim::Fsx::CSimConnectUtilities::getLocalSimConnectCfgFilename(); + QString m = QString("Deleted %1 ").append(fileName); + if (this->getIContextSimulator()->usingLocalObjects()) + { + QFile f(fileName); + f.remove(); + m = m.arg("locally"); + } + else + { + this->getIContextApplication()->removeFile(fileName); + m = m.arg("remotely"); + } + this->sendStatusMessage(CStatusMessage(CStatusMessage::TypeSimulator, CStatusMessage::SeverityInfo, m)); + this->ui->pb_SettingsFsxExistsSimconncetCfg->click(); // update status + } + else if (sender == this->ui->pb_SettingsFsxExistsSimconncetCfg) + { + if (!this->getIContextSimulator()) return; + QString fileName = BlackSim::Fsx::CSimConnectUtilities::getLocalSimConnectCfgFilename(); + bool exists = this->getIContextSimulator()->usingLocalObjects() ? + QFile::exists(fileName) : + this->getIContextApplication()->existsFile(fileName); + if (exists) + { + this->ui->le_SettingsFsxExistsSimconncetCfg->setText(fileName); + } + else + { + this->ui->le_SettingsFsxExistsSimconncetCfg->setText("no file"); + } + } + } +} diff --git a/src/blackgui/settingsfsxcomponent.h b/src/blackgui/settingsfsxcomponent.h new file mode 100644 index 000000000..939fd4742 --- /dev/null +++ b/src/blackgui/settingsfsxcomponent.h @@ -0,0 +1,41 @@ +#ifndef BLACKGUI_SETTINGSFSXCOMPONENT_H +#define BLACKGUI_SETTINGSFSXCOMPONENT_H + +#include "blackgui/runtimebasedcomponent.h" +#include + +namespace Ui { class CSettingsFsxComponent; } + +namespace BlackGui +{ + + /*! + * \brief Settings for FSX + */ + class CSettingsFsxComponent : public QFrame, public CRuntimeBasedComponent + { + Q_OBJECT + + public: + //! Constructor + explicit CSettingsFsxComponent(QWidget *parent = nullptr); + + //! Destructor + ~CSettingsFsxComponent(); + + private slots: + //! Test the SIM connect connectivity + void testSimConnectConnection(); + + //! Save a simconnect.cfg file for FSX + void saveSimConnectCfg(); + + //! simConnect.cfg: open, exists? delete + void simConnectCfgFile(); + + private: + Ui::CSettingsFsxComponent *ui; + }; +} + +#endif // guard diff --git a/src/blackgui/settingsfsxcomponent.ui b/src/blackgui/settingsfsxcomponent.ui new file mode 100644 index 000000000..2a2bee7e8 --- /dev/null +++ b/src/blackgui/settingsfsxcomponent.ui @@ -0,0 +1,161 @@ + + + CSettingsFsxComponent + + + + 0 + 0 + 400 + 300 + + + + Frame + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QFormLayout::AllNonFixedFieldsGrow + + + + + FSX address + + + + + + + 127.0.0.1 + + + + + + + FSX port + + + + + + + 500 + + + + + + + + + Open + + + + + + + Delete + + + + + + + Save + + + + + + + Test connection + + + + + + + + + "simconnect.cfg" exists? + + + + + + + + 4 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + true + + + + + + + Check + + + + + + + + + + + + le_SettingsFsxAddress + le_SettingsFsxPort + le_SettingsFsxExistsSimconncetCfg + pb_SettingsFsxExistsSimconncetCfg + pb_SettingsFsxOpenSimconnectCfg + pb_SettingsFsxDeleteSimconnectCfg + pb_SettingsFsxSaveSimconnectCfg + pb_SettingsFsxTestConnection + + + +