/* SPDX-FileCopyrightText: 2023 Joshua Goins SPDX-FileCopyrightText: 2023 Jeremy Whiting SPDX-FileCopyrightText: 2023 Niccolò Venerandi SPDX-License-Identifier: GPL-2.0-or-later */ #pragma once #include #include #include #include #include "device.h" #include "gamepad.h" class QTimer; class DeviceModel : public QAbstractListModel { Q_OBJECT Q_PROPERTY(int count READ count NOTIFY devicesChanged) public: enum CustomRoles { TextRole = Qt::UserRole + 1, IDRole, }; DeviceModel(); virtual ~DeviceModel(); Q_INVOKABLE Device *device(SDL_JoystickID id) const; Q_INVOKABLE Gamepad *gamepad(SDL_JoystickID id) const; int rowCount(const QModelIndex &parent) const override; QVariant data(const QModelIndex &index, int role) const override; QHash roleNames() const override; int count() const; Q_SIGNALS: void devicesChanged(); private Q_SLOTS: void poll(); private: void addDevice(const int deviceIndex); void removeDevice(const SDL_JoystickID id); // Map of sdl indexes to Gamepad devices QMap m_devices; QMap m_gamepads; QPointer m_timer; };