aboutsummaryrefslogtreecommitdiffstats
path: root/src/gamepad/qgamepadmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gamepad/qgamepadmanager.cpp')
-rw-r--r--src/gamepad/qgamepadmanager.cpp196
1 files changed, 117 insertions, 79 deletions
diff --git a/src/gamepad/qgamepadmanager.cpp b/src/gamepad/qgamepadmanager.cpp
index 58422c5..9628f0e 100644
--- a/src/gamepad/qgamepadmanager.cpp
+++ b/src/gamepad/qgamepadmanager.cpp
@@ -41,54 +41,70 @@
#include <QtCore/QLoggingCategory>
+#include <private/qobject_p.h>
+
QT_BEGIN_NAMESPACE
Q_LOGGING_CATEGORY(gp, "qt.gamepad")
-/*!
- \class QGamepadManager
- \inmodule QtGamepad
- \brief Queries attached gamepads and related events.
+class QGamepadManagerPrivate : public QObjectPrivate
+{
+ Q_DECLARE_PUBLIC(QGamepadManager)
+public:
+ QGamepadManagerPrivate()
+ : gamepadBackend(nullptr)
+ {
+ loadBackend();
+ }
- QGamepadManager provides a high-level interface for querying the attached
- gamepads and events related to all of the connected devices.
- */
+ void loadBackend();
-/*!
- * Constructor for QGamepadManager.
- */
+ QGamepadBackend *gamepadBackend;
+ QSet<int> connectedGamepads;
-QGamepadManager::QGamepadManager() :
- QObject(0)
+ //private slots
+ void _q_forwardGamepadConnected(int deviceId);
+ void _q_forwardGamepadDisconnected(int deviceId);
+ void _q_forwardGamepadAxisEvent(int deviceId, QGamepadManager::GamepadAxis axis, double value);
+ void _q_forwardGamepadButtonPressEvent(int deviceId, QGamepadManager::GamepadButton button, double value);
+ void _q_forwardGamepadButtonReleaseEvent(int deviceId, QGamepadManager::GamepadButton button);
+};
+
+void QGamepadManagerPrivate::_q_forwardGamepadConnected(int deviceId)
{
- loadBackend();
+ Q_Q(QGamepadManager);
+ connectedGamepads.insert(deviceId);
+ emit q->gamepadConnected(deviceId);
+ emit q->connectedGamepadsChanged();
+}
- qRegisterMetaType<QGamepadManager::GamepadButton>("QGamepadManager::GamepadButton");
- qRegisterMetaType<QGamepadManager::GamepadAxis>("QGamepadManager::GamepadAxis");
+void QGamepadManagerPrivate::_q_forwardGamepadDisconnected(int deviceId)
+{
+ Q_Q(QGamepadManager);
+ connectedGamepads.remove(deviceId);
+ emit q->gamepadDisconnected(deviceId);
+ emit q->connectedGamepadsChanged();
+}
- connect(m_gamepadBackend, SIGNAL(gamepadAdded(int)), this, SLOT(forwardGamepadConnected(int)));
- connect(m_gamepadBackend, SIGNAL(gamepadRemoved(int)), this, SLOT(forwardGamepadDisconnected(int)));
- connect(m_gamepadBackend, SIGNAL(gamepadAxisMoved(int,QGamepadManager::GamepadAxis,double)), this, SLOT(forwardGamepadAxisEvent(int,QGamepadManager::GamepadAxis,double)));
- connect(m_gamepadBackend, SIGNAL(gamepadButtonPressed(int,QGamepadManager::GamepadButton,double)), this, SLOT(forwardGamepadButtonPressEvent(int,QGamepadManager::GamepadButton,double)));
- connect(m_gamepadBackend, SIGNAL(gamepadButtonReleased(int,QGamepadManager::GamepadButton)), this, SLOT(forwardGamepadButtonReleaseEvent(int,QGamepadManager::GamepadButton)));
- connect(m_gamepadBackend, &QGamepadBackend::buttonConfigured, this, &QGamepadManager::buttonConfigured);
- connect(m_gamepadBackend, &QGamepadBackend::axisConfigured, this, &QGamepadManager::axisConfigured);
- connect(m_gamepadBackend, &QGamepadBackend::configurationCanceled, this, &QGamepadManager::configurationCanceled);
+void QGamepadManagerPrivate::_q_forwardGamepadAxisEvent(int deviceId, QGamepadManager::GamepadAxis axis, double value)
+{
+ Q_Q(QGamepadManager);
+ emit q->gamepadAxisEvent(deviceId, axis, value);
+}
- if (!m_gamepadBackend->start())
- qCWarning(gp) << "Failed to start gamepad backend";
+void QGamepadManagerPrivate::_q_forwardGamepadButtonPressEvent(int deviceId, QGamepadManager::GamepadButton button, double value)
+{
+ Q_Q(QGamepadManager);
+ emit q->gamepadButtonPressEvent(deviceId, button, value);
}
-/*!
- * Destructor for QGamepadManager.
- */
-QGamepadManager::~QGamepadManager()
+void QGamepadManagerPrivate::_q_forwardGamepadButtonReleaseEvent(int deviceId, QGamepadManager::GamepadButton button)
{
- m_gamepadBackend->stop();
- m_gamepadBackend->deleteLater();
+ Q_Q(QGamepadManager);
+ emit q->gamepadButtonReleaseEvent(deviceId, button);
}
-void QGamepadManager::loadBackend()
+void QGamepadManagerPrivate::loadBackend()
{
QStringList keys = QGamepadBackendFactory::keys();
qCDebug(gp) << "Available backends:" << keys;
@@ -99,95 +115,117 @@ void QGamepadManager::loadBackend()
targetKey = requestedKey;
if (!targetKey.isEmpty()) {
qCDebug(gp) << "Loading backend" << targetKey;
- m_gamepadBackend = QGamepadBackendFactory::create(targetKey, QStringList());
+ gamepadBackend = QGamepadBackendFactory::create(targetKey, QStringList());
}
}
- if (!m_gamepadBackend) {
+ if (!gamepadBackend) {
//Use dummy backend
- m_gamepadBackend = new QGamepadBackend();
+ gamepadBackend = new QGamepadBackend();
qCDebug(gp) << "Using dummy backend";
}
}
-QGamepadManager *QGamepadManager::instance()
-{
- static QGamepadManager instance;
- return &instance;
-}
+/*!
+ \class QGamepadManager
+ \inmodule QtGamepad
+ \brief Queries attached gamepads and related events.
-bool QGamepadManager::isGamepadConnected(int deviceId)
-{
- return m_connectedGamepads.contains(deviceId);
-}
+ QGamepadManager provides a high-level interface for querying the attached
+ gamepads and events related to all of the connected devices.
+ */
-const QList<int> QGamepadManager::connectedGamepads() const
-{
- return m_connectedGamepads.toList();
-}
+/*!
+ * Constructor for QGamepadManager.
+ */
-bool QGamepadManager::isConfigurationNeeded(int deviceId)
+QGamepadManager::QGamepadManager() :
+ QObject(*new QGamepadManagerPrivate(), nullptr)
{
- return m_gamepadBackend->isConfigurationNeeded(deviceId);
+ Q_D(QGamepadManager);
+
+ qRegisterMetaType<QGamepadManager::GamepadButton>("QGamepadManager::GamepadButton");
+ qRegisterMetaType<QGamepadManager::GamepadAxis>("QGamepadManager::GamepadAxis");
+
+ connect(d->gamepadBackend, SIGNAL(gamepadAdded(int)), this, SLOT(_q_forwardGamepadConnected(int)));
+ connect(d->gamepadBackend, SIGNAL(gamepadRemoved(int)), this, SLOT(_q_forwardGamepadDisconnected(int)));
+ connect(d->gamepadBackend, SIGNAL(gamepadAxisMoved(int,QGamepadManager::GamepadAxis,double)), this, SLOT(_q_forwardGamepadAxisEvent(int,QGamepadManager::GamepadAxis,double)));
+ connect(d->gamepadBackend, SIGNAL(gamepadButtonPressed(int,QGamepadManager::GamepadButton,double)), this, SLOT(_q_forwardGamepadButtonPressEvent(int,QGamepadManager::GamepadButton,double)));
+ connect(d->gamepadBackend, SIGNAL(gamepadButtonReleased(int,QGamepadManager::GamepadButton)), this, SLOT(_q_forwardGamepadButtonReleaseEvent(int,QGamepadManager::GamepadButton)));
+
+ connect(d->gamepadBackend, &QGamepadBackend::buttonConfigured, this, &QGamepadManager::buttonConfigured);
+ connect(d->gamepadBackend, &QGamepadBackend::axisConfigured, this, &QGamepadManager::axisConfigured);
+ connect(d->gamepadBackend, &QGamepadBackend::configurationCanceled, this, &QGamepadManager::configurationCanceled);
+
+ if (!d->gamepadBackend->start())
+ qCWarning(gp) << "Failed to start gamepad backend";
}
-bool QGamepadManager::configureButton(int deviceId, QGamepadManager::GamepadButton button)
+/*!
+ * Destructor for QGamepadManager.
+ */
+
+QGamepadManager::~QGamepadManager()
{
- return m_gamepadBackend->configureButton(deviceId, button);
+ Q_D(QGamepadManager);
+ d->gamepadBackend->stop();
+ d->gamepadBackend->deleteLater();
}
-bool QGamepadManager::configureAxis(int deviceId, QGamepadManager::GamepadAxis axis)
+QGamepadManager *QGamepadManager::instance()
{
- return m_gamepadBackend->configureAxis(deviceId, axis);
+ static QGamepadManager instance;
+ return &instance;
}
-bool QGamepadManager::setCancelConfigureButton(int deviceId, QGamepadManager::GamepadButton button)
+bool QGamepadManager::isGamepadConnected(int deviceId) const
{
- return m_gamepadBackend->setCancelConfigureButton(deviceId, button);
+ Q_D(const QGamepadManager);
+ return d->connectedGamepads.contains(deviceId);
}
-void QGamepadManager::resetConfiguration(int deviceId)
+const QList<int> QGamepadManager::connectedGamepads() const
{
- m_gamepadBackend->resetConfiguration(deviceId);
+ Q_D(const QGamepadManager);
+ return d->connectedGamepads.toList();
}
-void QGamepadManager::setSettingsFile(const QString &file)
+bool QGamepadManager::isConfigurationNeeded(int deviceId) const
{
- m_gamepadBackend->setSettingsFile(file);
+ Q_D(const QGamepadManager);
+ return d->gamepadBackend->isConfigurationNeeded(deviceId);
}
-void QGamepadManager::forwardGamepadConnected(int deviceId)
+bool QGamepadManager::configureButton(int deviceId, QGamepadManager::GamepadButton button)
{
- //qDebug() << "gamepad connected: " << index;
- m_connectedGamepads.insert(deviceId);
- emit gamepadConnected(deviceId);
- emit connectedGamepadsChanged();
+ Q_D(QGamepadManager);
+ return d->gamepadBackend->configureButton(deviceId, button);
}
-void QGamepadManager::forwardGamepadDisconnected(int deviceId)
+bool QGamepadManager::configureAxis(int deviceId, QGamepadManager::GamepadAxis axis)
{
- //qDebug() << "gamepad disconnected: " << index;
- m_connectedGamepads.remove(deviceId);
- emit gamepadDisconnected(deviceId);
- emit connectedGamepadsChanged();
+ Q_D(QGamepadManager);
+ return d->gamepadBackend->configureAxis(deviceId, axis);
}
-void QGamepadManager::forwardGamepadAxisEvent(int deviceId, QGamepadManager::GamepadAxis axis, double value)
+bool QGamepadManager::setCancelConfigureButton(int deviceId, QGamepadManager::GamepadButton button)
{
- //qDebug() << "gamepad axis event: " << index << axis << value;
- emit gamepadAxisEvent(deviceId, axis, value);
+ Q_D(QGamepadManager);
+ return d->gamepadBackend->setCancelConfigureButton(deviceId, button);
}
-void QGamepadManager::forwardGamepadButtonPressEvent(int deviceId, QGamepadManager::GamepadButton button, double value)
+void QGamepadManager::resetConfiguration(int deviceId)
{
- //qDebug() << "gamepad button press event: " << index << button << value;
- emit gamepadButtonPressEvent(deviceId, button, value);
+ Q_D(QGamepadManager);
+ d->gamepadBackend->resetConfiguration(deviceId);
}
-void QGamepadManager::forwardGamepadButtonReleaseEvent(int deviceId, QGamepadManager::GamepadButton button)
+void QGamepadManager::setSettingsFile(const QString &file)
{
- //qDebug() << "gamepad button release event: " << index << button;
- emit gamepadButtonReleaseEvent(deviceId, button);
+ Q_D(QGamepadManager);
+ d->gamepadBackend->setSettingsFile(file);
}
QT_END_NAMESPACE
+
+#include "moc_qgamepadmanager.cpp"