From cf3102333b3884d8ce95b27da4aec6c3f6e6ad61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Garapich?= Date: Sun, 13 Sep 2015 19:15:32 +0200 Subject: [PATCH] refs #392 Added the "Install XBus" feature * New "Install XBus" button in the CSimulatorXPlaneConfigWindow * CSettingsSimulatorComponent cleanup --- .../components/settingssimulatorcomponent.cpp | 4 +-- src/blackgui/pluginconfig.h | 4 +-- src/blackgui/pluginconfigwindow.cpp | 19 +++++++++- src/blackgui/pluginconfigwindow.h | 5 ++- .../simulator/xplane/simulator_xplane.cpp | 2 +- .../xplane_config/simulatorxplaneconfig.cpp | 4 +-- .../xplane_config/simulatorxplaneconfig.h | 7 ++-- .../simulatorxplaneconfigwindow.cpp | 36 ++++++++++++++++++- .../simulatorxplaneconfigwindow.h | 4 +-- .../simulatorxplaneconfigwindow.ui | 24 +++++++++++-- 10 files changed, 92 insertions(+), 17 deletions(-) diff --git a/src/blackgui/components/settingssimulatorcomponent.cpp b/src/blackgui/components/settingssimulatorcomponent.cpp index 72d0aaaa4..a53130aab 100644 --- a/src/blackgui/components/settingssimulatorcomponent.cpp +++ b/src/blackgui/components/settingssimulatorcomponent.cpp @@ -280,9 +280,7 @@ namespace BlackGui QString configId = m_plugins->getPluginConfigId(selected->getIdentifier()); IPluginConfig *config = m_plugins->getPluginById(configId); - CPluginConfigWindow *window = config->createConfigWindow(); - window->setParent(qApp->activeWindow()); - window->setWindowFlags(Qt::Dialog); + CPluginConfigWindow *window = config->createConfigWindow(qApp->activeWindow()); window->setAttribute(Qt::WA_DeleteOnClose); window->show(); } diff --git a/src/blackgui/pluginconfig.h b/src/blackgui/pluginconfig.h index 56809e491..40482af54 100644 --- a/src/blackgui/pluginconfig.h +++ b/src/blackgui/pluginconfig.h @@ -32,10 +32,10 @@ namespace BlackGui public: //! Dtor. - virtual ~IPluginConfig() = default; + virtual ~IPluginConfig() {} //! Creates a new config window and returns its pointer. - virtual CPluginConfigWindow *createConfigWindow() = 0; + virtual CPluginConfigWindow *createConfigWindow(QWidget *parent) = 0; }; } diff --git a/src/blackgui/pluginconfigwindow.cpp b/src/blackgui/pluginconfigwindow.cpp index 7acd8ec27..4492fbdaa 100644 --- a/src/blackgui/pluginconfigwindow.cpp +++ b/src/blackgui/pluginconfigwindow.cpp @@ -1,10 +1,27 @@ #include "pluginconfigwindow.h" +#include +#include +#include namespace BlackGui { - CPluginConfigWindow::CPluginConfigWindow() : QWidget(nullptr) + CPluginConfigWindow::CPluginConfigWindow(QWidget *parent) : QWidget(parent, Qt::Window) { } + void CPluginConfigWindow::showEvent(QShowEvent *event) + { + this->setGeometry( + QStyle::alignedRect( + Qt::LeftToRight, + Qt::AlignCenter, + this->size(), + QDesktopWidget().screenGeometry(qApp->activeWindow()) + ) + ); + + Q_UNUSED(event); + } + } diff --git a/src/blackgui/pluginconfigwindow.h b/src/blackgui/pluginconfigwindow.h index a43f23592..36302c574 100644 --- a/src/blackgui/pluginconfigwindow.h +++ b/src/blackgui/pluginconfigwindow.h @@ -22,7 +22,10 @@ namespace BlackGui Q_OBJECT public: //! No parent - explicit CPluginConfigWindow(); + explicit CPluginConfigWindow(QWidget *parent); + + protected: + virtual void showEvent(QShowEvent *event) override; }; } diff --git a/src/plugins/simulator/xplane/simulator_xplane.cpp b/src/plugins/simulator/xplane/simulator_xplane.cpp index e2fcd6cea..b81948a36 100644 --- a/src/plugins/simulator/xplane/simulator_xplane.cpp +++ b/src/plugins/simulator/xplane/simulator_xplane.cpp @@ -527,6 +527,7 @@ namespace BlackSimPlugin } else { + CLogMessage(this).debug() << "Starting XBus on %1" << m_xbusServerSetting.get(); m_conn = CSimulatorXPlane::connectionFromString(m_xbusServerSetting.get()); m_watcher = new QDBusServiceWatcher(xbusServiceName(), m_conn, QDBusServiceWatcher::WatchForRegistration, this); connect(m_watcher, &QDBusServiceWatcher::serviceRegistered, this, &CSimulatorXPlaneListener::ps_serviceRegistered); @@ -568,7 +569,6 @@ namespace BlackSimPlugin { // user changed settings, restart the listener if (m_watcher) { - CLogMessage(this).debug() << "XP: Restarting listener"; stop(); start(); } diff --git a/src/plugins/simulator/xplane_config/simulatorxplaneconfig.cpp b/src/plugins/simulator/xplane_config/simulatorxplaneconfig.cpp index 7dc13be38..a31e4c237 100644 --- a/src/plugins/simulator/xplane_config/simulatorxplaneconfig.cpp +++ b/src/plugins/simulator/xplane_config/simulatorxplaneconfig.cpp @@ -11,9 +11,9 @@ namespace BlackSimPlugin } - BlackGui::CPluginConfigWindow *CSimulatorXPlaneConfig::createConfigWindow() + BlackGui::CPluginConfigWindow *CSimulatorXPlaneConfig::createConfigWindow(QWidget *parent) { - CSimulatorXPlaneConfigWindow* w = new CSimulatorXPlaneConfigWindow(); + CSimulatorXPlaneConfigWindow* w = new CSimulatorXPlaneConfigWindow(parent); return w; } } diff --git a/src/plugins/simulator/xplane_config/simulatorxplaneconfig.h b/src/plugins/simulator/xplane_config/simulatorxplaneconfig.h index 63f2105f7..01ebf5666 100644 --- a/src/plugins/simulator/xplane_config/simulatorxplaneconfig.h +++ b/src/plugins/simulator/xplane_config/simulatorxplaneconfig.h @@ -41,11 +41,14 @@ namespace BlackSimPlugin //! Ctor CSimulatorXPlaneConfig(QObject *parent = nullptr); + //! Dtor + virtual ~CSimulatorXPlaneConfig() {} + //! \copydoc BlackGui::IPluginConfig::createConfigWindow() - BlackGui::CPluginConfigWindow *createConfigWindow() override; + BlackGui::CPluginConfigWindow *createConfigWindow(QWidget *parent) override; }; } } -#endif // SIMULATORXPLANECONFIG_H +#endif // guard diff --git a/src/plugins/simulator/xplane_config/simulatorxplaneconfigwindow.cpp b/src/plugins/simulator/xplane_config/simulatorxplaneconfigwindow.cpp index 732e56c2e..9d04abb35 100644 --- a/src/plugins/simulator/xplane_config/simulatorxplaneconfigwindow.cpp +++ b/src/plugins/simulator/xplane_config/simulatorxplaneconfigwindow.cpp @@ -1,6 +1,10 @@ #include "simulatorxplaneconfigwindow.h" #include "ui_simulatorxplaneconfigwindow.h" #include "blackcore/dbus_server.h" +#include "blackmisc/simulation/xplane/xplaneutil.h" +#include +#include +#include using namespace BlackGui; @@ -9,7 +13,8 @@ namespace BlackSimPlugin namespace XPlane { - CSimulatorXPlaneConfigWindow::CSimulatorXPlaneConfigWindow() : + CSimulatorXPlaneConfigWindow::CSimulatorXPlaneConfigWindow(QWidget *parent) : + CPluginConfigWindow(parent), ui(new Ui::CSimulatorXPlaneConfigWindow) { ui->setupUi(this); @@ -22,6 +27,8 @@ namespace BlackSimPlugin connect(ui->bb_OkCancel, &QDialogButtonBox::rejected, this, &CSimulatorXPlaneConfigWindow::close); ui->cp_XBusServer->setCurrentText(m_xbusServerSetting.get()); + + connect(ui->pb_InstallXBus, &QPushButton::clicked, this, &CSimulatorXPlaneConfigWindow::ps_installXBus); } CSimulatorXPlaneConfigWindow::~CSimulatorXPlaneConfigWindow() @@ -37,5 +44,32 @@ namespace BlackSimPlugin } } + void CSimulatorXPlaneConfigWindow::ps_installXBus() + { + QString xPlaneLocation = BlackMisc::Simulation::XPlane::CXPlaneUtil::xplane10Dir(); + if (xPlaneLocation.isEmpty()) + xPlaneLocation = BlackMisc::Simulation::XPlane::CXPlaneUtil::xplane9Dir(); + + QString path = QFileDialog::getExistingDirectory(parentWidget(), + tr("Choose your X-Plane install directory"), + xPlaneLocation, + QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); + + path.append("/Resources/plugins/xbus/64/"); + QDir xbusDir(path); + if (!xbusDir.exists()) + { + if (!xbusDir.mkpath(".")) + { + return; + } + } + + QString origin = QCoreApplication::applicationDirPath() % QStringLiteral("/../xbus/64/lin.xpl"); + QString destination = path % "/lin.xpl"; + QFile::copy(origin, destination); + + QMessageBox::information(this, tr("XBus installed"), tr("You may now launch your X-Plane and start using XBus!")); + } } } diff --git a/src/plugins/simulator/xplane_config/simulatorxplaneconfigwindow.h b/src/plugins/simulator/xplane_config/simulatorxplaneconfigwindow.h index 32ba6db43..8dc62b92e 100644 --- a/src/plugins/simulator/xplane_config/simulatorxplaneconfigwindow.h +++ b/src/plugins/simulator/xplane_config/simulatorxplaneconfigwindow.h @@ -34,17 +34,17 @@ namespace BlackSimPlugin public: //! Ctor. - CSimulatorXPlaneConfigWindow(); + CSimulatorXPlaneConfigWindow(QWidget *parent); //! Dtor. virtual ~CSimulatorXPlaneConfigWindow(); private slots: void ps_storeSettings(); + void ps_installXBus(); private: QScopedPointer ui; - BlackCore::CSetting m_xbusServerSetting { this }; }; diff --git a/src/plugins/simulator/xplane_config/simulatorxplaneconfigwindow.ui b/src/plugins/simulator/xplane_config/simulatorxplaneconfigwindow.ui index b09a867a4..a1e9d5cc5 100644 --- a/src/plugins/simulator/xplane_config/simulatorxplaneconfigwindow.ui +++ b/src/plugins/simulator/xplane_config/simulatorxplaneconfigwindow.ui @@ -7,7 +7,7 @@ 0 0 400 - 74 + 136 @@ -24,7 +24,14 @@ - + + + + Install XBus in the X-Plane directory... + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok @@ -34,6 +41,19 @@ + + + + Qt::Vertical + + + + 20 + 40 + + + +