/* Copyright (C) 2015 * swift project Community / Contributors * * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, * including this file, may be copied, modified, propagated, or distributed except according to the terms * contained in the LICENSE file. */ #include "simulatorxplaneconfigwindow.h" #include "blackcore/application.h" #include "blackmisc/directoryutils.h" #include "blackmisc/dbusserver.h" #include "blackmisc/fileutils.h" #include "blackmisc/simulation/xplane/xplaneutil.h" #include "ui_simulatorxplaneconfigwindow.h" #include #include #include #include #include #include #include #include #include class QWidget; using namespace BlackGui; using namespace BlackMisc; namespace { QString xBusOriginDir() { return CDirectoryUtils::applicationDirectoryPath() % QStringLiteral("/../xbus"); } } namespace BlackSimPlugin { namespace XPlane { CSimulatorXPlaneConfigWindow::CSimulatorXPlaneConfigWindow(QWidget *parent) : CPluginConfigWindow(parent), ui(new Ui::CSimulatorXPlaneConfigWindow) { ui->setupUi(this); ui->cp_XBusServer->addItem(BlackMisc::CDBusServer::sessionBusAddress()); ui->cp_XBusServer->addItem(BlackMisc::CDBusServer::systemBusAddress()); connect(ui->bb_OkCancel, &QDialogButtonBox::accepted, this, &CSimulatorXPlaneConfigWindow::ps_storeSettings); connect(ui->bb_OkCancel, &QDialogButtonBox::accepted, this, &CSimulatorXPlaneConfigWindow::close); connect(ui->bb_OkCancel, &QDialogButtonBox::rejected, this, &CSimulatorXPlaneConfigWindow::close); ui->cp_XBusServer->setCurrentText(m_xbusServerSetting.getThreadLocal()); if (xBusAvailable()) connect(ui->pb_InstallXBus, &QPushButton::clicked, this, &CSimulatorXPlaneConfigWindow::ps_installXBus); else ui->pb_InstallXBus->setEnabled(false); } CSimulatorXPlaneConfigWindow::~CSimulatorXPlaneConfigWindow() { } bool CSimulatorXPlaneConfigWindow::xBusAvailable() { return QDir(xBusOriginDir()).exists(); } void CSimulatorXPlaneConfigWindow::ps_storeSettings() { if (ui->cp_XBusServer->currentText() != m_xbusServerSetting.getThreadLocal()) { m_xbusServerSetting.set(ui->cp_XBusServer->currentText()); } } 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 | QFileDialog::DontUseNativeDialog); if (path.isEmpty()) // canceled return; path.append("/Resources/plugins"); if (!QDir(path).exists()) { QMessageBox::warning(this, tr("Invalid X-Plane directory"), tr("%1 is not a valid X-Plane installation.").arg(path)); return; } path.append("/xbus"); // TODO Use QtConcurrent here, maybe? bool result = BlackMisc::CFileUtils::copyRecursively(xBusOriginDir(), path); if (result) { QMessageBox::information(this, tr("XBus installed"), tr("You may now launch your X-Plane and start using XBus!")); } else { QMessageBox::warning(this, tr("Failed installing XBus"), tr("Failed installing the XBus plugin in your X-Plane installation directory; try installing it manually.")); } } } }