refs #392 Added BlackGui::CPluginConfigWindow

* CPluginConfigWindow is now base class for all plugin config windows
* CPluginConfigWindow is styled properly
* Fixed behaviour in CSimulatorXPlaneConfigWindow
This commit is contained in:
Michał Garapich
2015-09-08 22:10:02 +02:00
committed by Mathew Sutcliffe
parent a0b4d47736
commit 06c17d7d09
11 changed files with 128 additions and 17 deletions

View File

@@ -11,6 +11,7 @@
#include "xbus_service_proxy.h"
#include "xbus_traffic_proxy.h"
#include "xbus_weather_proxy.h"
#include "blackcore/dbus_server.h"
#include "blackmisc/logmessage.h"
#include "blackmisc/blackmiscfreefunctions.h"
#include "blackmisc/simulation/modelmappingsprovider.h"
@@ -351,6 +352,22 @@ namespace BlackSimPlugin
return CPixmap();
}
QDBusConnection CSimulatorXPlane::connectionFromString(const QString &str)
{
if (str == BlackCore::CDBusServer::sessionDBusServer())
{
return QDBusConnection::sessionBus();
}
else if (str == BlackCore::CDBusServer::systemDBusServer())
{
return QDBusConnection::systemBus();
}
else
{
Q_UNREACHABLE();
}
}
bool CSimulatorXPlane::isPhysicallyRenderedAircraft(const CCallsign &callsign) const
{
//! \todo XP implement isRenderedAircraft correctly. This work around, but not really telling me if callsign is really(!) visible in SIM
@@ -510,7 +527,7 @@ namespace BlackSimPlugin
}
else
{
m_conn = QDBusConnection::sessionBus(); // TODO make this configurable
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);
}
@@ -527,7 +544,7 @@ namespace BlackSimPlugin
bool CSimulatorXPlaneListener::isXBusRunning() const
{
QDBusConnection conn = QDBusConnection::sessionBus(); // TODO make this configurable
QDBusConnection conn = CSimulatorXPlane::connectionFromString(m_xbusServerSetting.get());
CXBusServiceProxy *service = new CXBusServiceProxy(conn);
CXBusTrafficProxy *traffic = new CXBusTrafficProxy(conn);
@@ -547,5 +564,15 @@ namespace BlackSimPlugin
}
}
void CSimulatorXPlaneListener::ps_xbusServerSettingChanged()
{
// user changed settings, restart the listener
if (m_watcher) {
CLogMessage(this).debug() << "XP: Restarting listener";
stop();
start();
}
}
} // namespace
} // namespace

View File

@@ -17,6 +17,7 @@
#include "blackmisc/simulation/ownaircraftprovider.h"
#include "blackmisc/simulation/aircraftmodellist.h"
#include "blackmisc/pixmap.h"
#include "plugins/simulator/xplane_config/simulatorxplaneconfig.h"
#include <QDBusConnection>
class QDBusServiceWatcher;
@@ -99,6 +100,9 @@ namespace BlackSimPlugin
//! \copydoc ISimulator::iconForModel
virtual BlackMisc::CPixmap iconForModel(const QString &modelString) const override;
//! Creates an appropriate dbus connection from the string describing it
static QDBusConnection connectionFromString(const QString &str);
protected slots:
//! \copydoc CSimulatorCommon::ps_remoteProviderAddAircraftSituation
virtual void ps_remoteProviderAddAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation) override;
@@ -205,10 +209,13 @@ namespace BlackSimPlugin
private slots:
void ps_serviceRegistered(const QString &serviceName);
void ps_xbusServerSettingChanged();
private:
QDBusConnection m_conn { "default" };
QDBusServiceWatcher *m_watcher { nullptr };
BlackCore::CSetting<XBusServer> m_xbusServerSetting { this, &CSimulatorXPlaneListener::ps_xbusServerSettingChanged };
};
//! Factory for creating CSimulatorXPlane instance

View File

@@ -11,11 +11,10 @@ namespace BlackSimPlugin
}
QWidget *CSimulatorXPlaneConfig::createConfigWindow()
BlackGui::CPluginConfigWindow *CSimulatorXPlaneConfig::createConfigWindow()
{
CSimulatorXPlaneConfigWindow* w = new CSimulatorXPlaneConfigWindow();
return w;
}
}
}

View File

@@ -13,12 +13,21 @@
#define BLACKSIMPLUGIN_SIMULATOR_XPLANE_CONFIG_H
#include "blackgui/pluginconfig.h"
#include "blackcore/settingscache.h"
namespace BlackSimPlugin
{
namespace XPlane
{
struct XBusServer : public BlackCore::CSettingTrait<QString>
{
//! \copydoc BlackCore::CSetting::key
static const char *key() { return "xbus/server"; }
//! \copydoc BlackCore::CSetting::defaultValue
static QString defaultValue() { return QStringLiteral("session"); }
};
/**
* Config plugin for the X-Plane plugin.
*/
@@ -33,7 +42,7 @@ namespace BlackSimPlugin
CSimulatorXPlaneConfig(QObject *parent = nullptr);
//! \copydoc BlackGui::IPluginConfig::createConfigWindow()
QWidget *createConfigWindow() override;
BlackGui::CPluginConfigWindow *createConfigWindow() override;
};
}

View File

@@ -2,6 +2,7 @@
#include "ui_simulatorxplaneconfigwindow.h"
#include "blackcore/dbus_server.h"
using namespace BlackGui;
namespace BlackSimPlugin
{
@@ -9,7 +10,6 @@ namespace BlackSimPlugin
{
CSimulatorXPlaneConfigWindow::CSimulatorXPlaneConfigWindow() :
QWidget(nullptr),
ui(new Ui::CSimulatorXPlaneConfigWindow)
{
ui->setupUi(this);
@@ -17,7 +17,11 @@ namespace BlackSimPlugin
ui->cp_XBusServer->addItem(BlackCore::CDBusServer::sessionDBusServer());
ui->cp_XBusServer->addItem(BlackCore::CDBusServer::systemDBusServer());
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.get());
}
CSimulatorXPlaneConfigWindow::~CSimulatorXPlaneConfigWindow()
@@ -25,5 +29,13 @@ namespace BlackSimPlugin
}
void CSimulatorXPlaneConfigWindow::ps_storeSettings()
{
if (ui->cp_XBusServer->currentText() != m_xbusServerSetting.get())
{
m_xbusServerSetting.set(ui->cp_XBusServer->currentText());
}
}
}
}

View File

@@ -12,6 +12,8 @@
#ifndef BLACKSIMPLUGIN_SIMULATOR_XPLANE_CONFIG_WINDOW_H
#define BLACKSIMPLUGIN_SIMULATOR_XPLANE_CONFIG_WINDOW_H
#include "simulatorxplaneconfig.h"
#include "blackgui/pluginconfigwindow.h"
#include <QWidget>
#include <QScopedPointer>
@@ -26,7 +28,7 @@ namespace BlackSimPlugin
/**
* A window that shows all the X-Plane plugin options.
*/
class CSimulatorXPlaneConfigWindow : public QWidget
class CSimulatorXPlaneConfigWindow : public BlackGui::CPluginConfigWindow
{
Q_OBJECT
@@ -37,9 +39,14 @@ namespace BlackSimPlugin
//! Dtor.
virtual ~CSimulatorXPlaneConfigWindow();
private slots:
void ps_storeSettings();
private:
QScopedPointer<Ui::CSimulatorXPlaneConfigWindow> ui;
BlackCore::CSetting<XBusServer> m_xbusServerSetting { this };
};
}
}