22#include <QRegularExpression>
23#include <QRegularExpressionMatch>
26#include "moc_qgsinputcontrollermanager.cpp"
28using namespace Qt::StringLiterals;
33#include <QtGamepad/QGamepadManager>
46 qDeleteAll( m2DMapControllers );
47 qDeleteAll( m3DMapControllers );
55 if ( m2DMapControllers.contains( controller->
deviceId() ) )
61 m2DMapControllers.insert( controller->
deviceId(), controller );
70 if ( m3DMapControllers.contains( controller->
deviceId() ) )
76 m3DMapControllers.insert( controller->
deviceId(), controller );
82 QStringList devices = m2DMapControllers.keys();
85 const QList<int> gamepadIds = QGamepadManager::instance()->connectedGamepads();
86 for (
int id : gamepadIds )
88 devices.append( u
"gamepad2d:%1"_s.arg(
id ) );
98 const thread_local QRegularExpression gamepadRx( u
"^gamepad2d:(\\d+)$"_s );
99 const QRegularExpressionMatch gamepadMatch = gamepadRx.match( deviceId );
100 if ( gamepadMatch.hasMatch() )
102 const int gamepadId = gamepadMatch.captured( 1 ).toInt();
103 return new QgsGamepad2DMapController( gamepadId );
107 auto it = m2DMapControllers.constFind( deviceId );
108 if ( it == m2DMapControllers.constEnd() )
111 return qgis::down_cast<QgsAbstract2DMapController *>( it.value()->clone() );
116 QStringList devices = m3DMapControllers.keys();
119 const QList<int> gamepadIds = QGamepadManager::instance()->connectedGamepads();
120 for (
int id : gamepadIds )
122 devices.append( u
"gamepad3d:%1"_s.arg(
id ) );
132 const thread_local QRegularExpression gamepadRx( u
"^gamepad3d:(\\d+)$"_s );
133 const QRegularExpressionMatch gamepadMatch = gamepadRx.match( deviceId );
134 if ( gamepadMatch.hasMatch() )
136 const int gamepadId = gamepadMatch.captured( 1 ).toInt();
137 return new QgsGamepad3DMapController( gamepadId );
141 auto it = m3DMapControllers.constFind( deviceId );
142 if ( it == m3DMapControllers.constEnd() )
145 return qgis::down_cast<QgsAbstract3DMapController *>( it.value()->clone() );
Abstract base class for all 2D map controllers.
Abstract base class for all 3D map controllers.