// SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2026 A-La-Karte Contributors #pragma once #include #include class QEvent; class QJSEngine; class InputManager : public QObject { Q_OBJECT QML_ELEMENT QML_SINGLETON Q_PROPERTY(ActiveInput activeInput READ activeInput NOTIFY activeInputChanged) Q_PROPERTY(bool hasSeenKeyboardMouse READ hasSeenKeyboardMouse NOTIFY inputHistoryChanged) Q_PROPERTY(bool hasSeenGamepad READ hasSeenGamepad NOTIFY inputHistoryChanged) public: enum ActiveInput { KeyboardMouse = 0, Gamepad = 1, }; Q_ENUM(ActiveInput) static InputManager *instance(); static InputManager *create(QQmlEngine *engine, QJSEngine *scriptEngine); ActiveInput activeInput() const; bool hasSeenKeyboardMouse() const; bool hasSeenGamepad() const; Q_SIGNALS: void activeInputChanged(); void inputHistoryChanged(); protected: bool eventFilter(QObject *watched, QEvent *event) override; private: explicit InputManager(QObject *parent = nullptr); static InputManager *s_instance; ActiveInput m_activeInput = KeyboardMouse; bool m_hasSeenKeyboardMouse = false; bool m_hasSeenGamepad = false; void setActiveInput(ActiveInput input); };