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
+
+
+
+