# {py:mod}`simvx.core.input.controls` ```{py:module} simvx.core.input.controls ``` ```{autodoc2-docstring} simvx.core.input.controls :allowtitles: ``` ## Module Contents ### Classes ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`DeviceType ` - ```{autodoc2-docstring} simvx.core.input.controls.DeviceType :summary: ``` * - {py:obj}`DeviceControl ` - ```{autodoc2-docstring} simvx.core.input.controls.DeviceControl :summary: ``` * - {py:obj}`DeviceButton ` - ```{autodoc2-docstring} simvx.core.input.controls.DeviceButton :summary: ``` * - {py:obj}`DeviceAxis ` - ```{autodoc2-docstring} simvx.core.input.controls.DeviceAxis :summary: ``` * - {py:obj}`DeviceStick ` - ```{autodoc2-docstring} simvx.core.input.controls.DeviceStick :summary: ``` * - {py:obj}`DeviceControls ` - ```{autodoc2-docstring} simvx.core.input.controls.DeviceControls :summary: ``` * - {py:obj}`Key ` - ```{autodoc2-docstring} simvx.core.input.controls.Key :summary: ``` * - {py:obj}`Mouse ` - ```{autodoc2-docstring} simvx.core.input.controls.Mouse :summary: ``` * - {py:obj}`Touch ` - ```{autodoc2-docstring} simvx.core.input.controls.Touch :summary: ``` * - {py:obj}`Pen ` - ```{autodoc2-docstring} simvx.core.input.controls.Pen :summary: ``` * - {py:obj}`Tablet ` - ```{autodoc2-docstring} simvx.core.input.controls.Tablet :summary: ``` * - {py:obj}`Controller ` - ```{autodoc2-docstring} simvx.core.input.controls.Controller :summary: ``` * - {py:obj}`Pointer ` - ```{autodoc2-docstring} simvx.core.input.controls.Pointer :summary: ``` ```` ### Functions ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`roles_of ` - ```{autodoc2-docstring} simvx.core.input.controls.roles_of :summary: ``` * - {py:obj}`key_code ` - ```{autodoc2-docstring} simvx.core.input.controls.key_code :summary: ``` * - {py:obj}`key_for_code ` - ```{autodoc2-docstring} simvx.core.input.controls.key_for_code :summary: ``` * - {py:obj}`key_to_name ` - ```{autodoc2-docstring} simvx.core.input.controls.key_to_name :summary: ``` * - {py:obj}`name_to_keys ` - ```{autodoc2-docstring} simvx.core.input.controls.name_to_keys :summary: ``` ```` ### Data ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`__all__ ` - ```{autodoc2-docstring} simvx.core.input.controls.__all__ :summary: ``` * - {py:obj}`MODIFIER_SIDES ` - ```{autodoc2-docstring} simvx.core.input.controls.MODIFIER_SIDES :summary: ``` * - {py:obj}`MODIFIER_OF ` - ```{autodoc2-docstring} simvx.core.input.controls.MODIFIER_OF :summary: ``` * - {py:obj}`ROLE_MEMBER ` - ```{autodoc2-docstring} simvx.core.input.controls.ROLE_MEMBER :summary: ``` * - {py:obj}`SELF_MODIFIER ` - ```{autodoc2-docstring} simvx.core.input.controls.SELF_MODIFIER :summary: ``` ```` ### API ````{py:data} __all__ :canonical: simvx.core.input.controls.__all__ :value: > ['DeviceAxis', 'DeviceButton', 'DeviceControl', 'DeviceControls', 'DeviceStick', 'DeviceType', 'Cont... ```{autodoc2-docstring} simvx.core.input.controls.__all__ ``` ```` `````{py:class} DeviceType() :canonical: simvx.core.input.controls.DeviceType Bases: {py:obj}`enum.StrEnum` ```{autodoc2-docstring} simvx.core.input.controls.DeviceType ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.core.input.controls.DeviceType.__init__ ``` ````{py:attribute} KEYBOARD :canonical: simvx.core.input.controls.DeviceType.KEYBOARD :value: > 'keyboard' ```{autodoc2-docstring} simvx.core.input.controls.DeviceType.KEYBOARD ``` ```` ````{py:attribute} MOUSE :canonical: simvx.core.input.controls.DeviceType.MOUSE :value: > 'mouse' ```{autodoc2-docstring} simvx.core.input.controls.DeviceType.MOUSE ``` ```` ````{py:attribute} TOUCH :canonical: simvx.core.input.controls.DeviceType.TOUCH :value: > 'touch' ```{autodoc2-docstring} simvx.core.input.controls.DeviceType.TOUCH ``` ```` ````{py:attribute} PEN :canonical: simvx.core.input.controls.DeviceType.PEN :value: > 'pen' ```{autodoc2-docstring} simvx.core.input.controls.DeviceType.PEN ``` ```` ````{py:attribute} TABLET :canonical: simvx.core.input.controls.DeviceType.TABLET :value: > 'tablet' ```{autodoc2-docstring} simvx.core.input.controls.DeviceType.TABLET ``` ```` ````{py:attribute} CONTROLLER :canonical: simvx.core.input.controls.DeviceType.CONTROLLER :value: > 'controller' ```{autodoc2-docstring} simvx.core.input.controls.DeviceType.CONTROLLER ``` ```` ````{py:attribute} POINTER :canonical: simvx.core.input.controls.DeviceType.POINTER :value: > 'pointer' ```{autodoc2-docstring} simvx.core.input.controls.DeviceType.POINTER ``` ```` ````{py:method} __new__(*values) :canonical: simvx.core.input.controls.DeviceType.__new__ ```` ````{py:method} __add__() :canonical: simvx.core.input.controls.DeviceType.__add__ ```` ````{py:method} __contains__() :canonical: simvx.core.input.controls.DeviceType.__contains__ ```` ````{py:method} __delattr__() :canonical: simvx.core.input.controls.DeviceType.__delattr__ ```` ````{py:method} __dir__() :canonical: simvx.core.input.controls.DeviceType.__dir__ ```` ````{py:method} __eq__() :canonical: simvx.core.input.controls.DeviceType.__eq__ ```` ````{py:method} __format__() :canonical: simvx.core.input.controls.DeviceType.__format__ ```` ````{py:method} __ge__() :canonical: simvx.core.input.controls.DeviceType.__ge__ ```` ````{py:method} __getattribute__() :canonical: simvx.core.input.controls.DeviceType.__getattribute__ ```` ````{py:method} __getitem__() :canonical: simvx.core.input.controls.DeviceType.__getitem__ ```` ````{py:method} __getnewargs__() :canonical: simvx.core.input.controls.DeviceType.__getnewargs__ ```` ````{py:method} __getstate__() :canonical: simvx.core.input.controls.DeviceType.__getstate__ ```` ````{py:method} __gt__() :canonical: simvx.core.input.controls.DeviceType.__gt__ ```` ````{py:method} __hash__() :canonical: simvx.core.input.controls.DeviceType.__hash__ ```` ````{py:method} __iter__() :canonical: simvx.core.input.controls.DeviceType.__iter__ ```` ````{py:method} __le__() :canonical: simvx.core.input.controls.DeviceType.__le__ ```` ````{py:method} __len__() :canonical: simvx.core.input.controls.DeviceType.__len__ ```` ````{py:method} __lt__() :canonical: simvx.core.input.controls.DeviceType.__lt__ ```` ````{py:method} __mod__() :canonical: simvx.core.input.controls.DeviceType.__mod__ ```` ````{py:method} __mul__() :canonical: simvx.core.input.controls.DeviceType.__mul__ ```` ````{py:method} __ne__() :canonical: simvx.core.input.controls.DeviceType.__ne__ ```` ````{py:method} __reduce__() :canonical: simvx.core.input.controls.DeviceType.__reduce__ ```` ````{py:method} __reduce_ex__() :canonical: simvx.core.input.controls.DeviceType.__reduce_ex__ ```` ````{py:method} __repr__() :canonical: simvx.core.input.controls.DeviceType.__repr__ ```` ````{py:method} __rmod__() :canonical: simvx.core.input.controls.DeviceType.__rmod__ ```` ````{py:method} __rmul__() :canonical: simvx.core.input.controls.DeviceType.__rmul__ ```` ````{py:method} __setattr__() :canonical: simvx.core.input.controls.DeviceType.__setattr__ ```` ````{py:method} __sizeof__() :canonical: simvx.core.input.controls.DeviceType.__sizeof__ ```` ````{py:method} __str__() :canonical: simvx.core.input.controls.DeviceType.__str__ ```` ````{py:method} __subclasshook__() :canonical: simvx.core.input.controls.DeviceType.__subclasshook__ ```` ````{py:method} capitalize() :canonical: simvx.core.input.controls.DeviceType.capitalize ```` ````{py:method} casefold() :canonical: simvx.core.input.controls.DeviceType.casefold ```` ````{py:method} center() :canonical: simvx.core.input.controls.DeviceType.center ```` ````{py:method} count() :canonical: simvx.core.input.controls.DeviceType.count ```` ````{py:method} encode() :canonical: simvx.core.input.controls.DeviceType.encode ```` ````{py:method} endswith() :canonical: simvx.core.input.controls.DeviceType.endswith ```` ````{py:method} expandtabs() :canonical: simvx.core.input.controls.DeviceType.expandtabs ```` ````{py:method} find() :canonical: simvx.core.input.controls.DeviceType.find ```` ````{py:method} format() :canonical: simvx.core.input.controls.DeviceType.format ```` ````{py:method} format_map() :canonical: simvx.core.input.controls.DeviceType.format_map ```` ````{py:method} index() :canonical: simvx.core.input.controls.DeviceType.index ```` ````{py:method} isalnum() :canonical: simvx.core.input.controls.DeviceType.isalnum ```` ````{py:method} isalpha() :canonical: simvx.core.input.controls.DeviceType.isalpha ```` ````{py:method} isascii() :canonical: simvx.core.input.controls.DeviceType.isascii ```` ````{py:method} isdecimal() :canonical: simvx.core.input.controls.DeviceType.isdecimal ```` ````{py:method} isdigit() :canonical: simvx.core.input.controls.DeviceType.isdigit ```` ````{py:method} isidentifier() :canonical: simvx.core.input.controls.DeviceType.isidentifier ```` ````{py:method} islower() :canonical: simvx.core.input.controls.DeviceType.islower ```` ````{py:method} isnumeric() :canonical: simvx.core.input.controls.DeviceType.isnumeric ```` ````{py:method} isprintable() :canonical: simvx.core.input.controls.DeviceType.isprintable ```` ````{py:method} isspace() :canonical: simvx.core.input.controls.DeviceType.isspace ```` ````{py:method} istitle() :canonical: simvx.core.input.controls.DeviceType.istitle ```` ````{py:method} isupper() :canonical: simvx.core.input.controls.DeviceType.isupper ```` ````{py:method} join() :canonical: simvx.core.input.controls.DeviceType.join ```` ````{py:method} ljust() :canonical: simvx.core.input.controls.DeviceType.ljust ```` ````{py:method} lower() :canonical: simvx.core.input.controls.DeviceType.lower ```` ````{py:method} lstrip() :canonical: simvx.core.input.controls.DeviceType.lstrip ```` ````{py:method} partition() :canonical: simvx.core.input.controls.DeviceType.partition ```` ````{py:method} removeprefix() :canonical: simvx.core.input.controls.DeviceType.removeprefix ```` ````{py:method} removesuffix() :canonical: simvx.core.input.controls.DeviceType.removesuffix ```` ````{py:method} replace() :canonical: simvx.core.input.controls.DeviceType.replace ```` ````{py:method} rfind() :canonical: simvx.core.input.controls.DeviceType.rfind ```` ````{py:method} rindex() :canonical: simvx.core.input.controls.DeviceType.rindex ```` ````{py:method} rjust() :canonical: simvx.core.input.controls.DeviceType.rjust ```` ````{py:method} rpartition() :canonical: simvx.core.input.controls.DeviceType.rpartition ```` ````{py:method} rsplit() :canonical: simvx.core.input.controls.DeviceType.rsplit ```` ````{py:method} rstrip() :canonical: simvx.core.input.controls.DeviceType.rstrip ```` ````{py:method} split() :canonical: simvx.core.input.controls.DeviceType.split ```` ````{py:method} splitlines() :canonical: simvx.core.input.controls.DeviceType.splitlines ```` ````{py:method} startswith() :canonical: simvx.core.input.controls.DeviceType.startswith ```` ````{py:method} strip() :canonical: simvx.core.input.controls.DeviceType.strip ```` ````{py:method} swapcase() :canonical: simvx.core.input.controls.DeviceType.swapcase ```` ````{py:method} title() :canonical: simvx.core.input.controls.DeviceType.title ```` ````{py:method} translate() :canonical: simvx.core.input.controls.DeviceType.translate ```` ````{py:method} upper() :canonical: simvx.core.input.controls.DeviceType.upper ```` ````{py:method} zfill() :canonical: simvx.core.input.controls.DeviceType.zfill ```` ````{py:method} __deepcopy__(memo) :canonical: simvx.core.input.controls.DeviceType.__deepcopy__ ```` ````{py:method} __copy__() :canonical: simvx.core.input.controls.DeviceType.__copy__ ```` ````{py:method} name() :canonical: simvx.core.input.controls.DeviceType.name ```` ````{py:method} value() :canonical: simvx.core.input.controls.DeviceType.value ```` ````` `````{py:class} DeviceControl :canonical: simvx.core.input.controls.DeviceControl ```{autodoc2-docstring} simvx.core.input.controls.DeviceControl ``` ````{py:attribute} __slots__ :canonical: simvx.core.input.controls.DeviceControl.__slots__ :value: > ('device', 'index', 'name', 'unit') ```{autodoc2-docstring} simvx.core.input.controls.DeviceControl.__slots__ ``` ```` ````{py:attribute} device :canonical: simvx.core.input.controls.DeviceControl.device :type: simvx.core.input.controls.DeviceType :value: > None ```{autodoc2-docstring} simvx.core.input.controls.DeviceControl.device ``` ```` ````{py:attribute} name :canonical: simvx.core.input.controls.DeviceControl.name :type: str | None :value: > None ```{autodoc2-docstring} simvx.core.input.controls.DeviceControl.name ``` ```` ````{py:attribute} index :canonical: simvx.core.input.controls.DeviceControl.index :type: int | None :value: > None ```{autodoc2-docstring} simvx.core.input.controls.DeviceControl.index ``` ```` ````{py:attribute} unit :canonical: simvx.core.input.controls.DeviceControl.unit :type: int | None :value: > None ```{autodoc2-docstring} simvx.core.input.controls.DeviceControl.unit ``` ```` ````{py:method} __new__(device: simvx.core.input.controls.DeviceType | str, name: str | None = None, *, index: int | None = None, unit: int | None = None) -> typing.Self :canonical: simvx.core.input.controls.DeviceControl.__new__ ```{autodoc2-docstring} simvx.core.input.controls.DeviceControl.__new__ ``` ```` ````{py:method} __setattr__(name: str, value: object) -> None :canonical: simvx.core.input.controls.DeviceControl.__setattr__ ```` ````{py:method} __delattr__(name: str) -> None :canonical: simvx.core.input.controls.DeviceControl.__delattr__ ```` ````{py:method} __reduce__() -> tuple :canonical: simvx.core.input.controls.DeviceControl.__reduce__ ```` ````{py:method} __copy__() -> typing.Self :canonical: simvx.core.input.controls.DeviceControl.__copy__ ```{autodoc2-docstring} simvx.core.input.controls.DeviceControl.__copy__ ``` ```` ````{py:method} __deepcopy__(memo: dict) -> typing.Self :canonical: simvx.core.input.controls.DeviceControl.__deepcopy__ ```{autodoc2-docstring} simvx.core.input.controls.DeviceControl.__deepcopy__ ``` ```` ````{py:method} on(device: object) -> typing.Self :canonical: simvx.core.input.controls.DeviceControl.on ```{autodoc2-docstring} simvx.core.input.controls.DeviceControl.on ``` ```` ````{py:property} is_named :canonical: simvx.core.input.controls.DeviceControl.is_named :type: bool ```{autodoc2-docstring} simvx.core.input.controls.DeviceControl.is_named ``` ```` ````{py:method} __str__() -> str :canonical: simvx.core.input.controls.DeviceControl.__str__ ```{autodoc2-docstring} simvx.core.input.controls.DeviceControl.__str__ ``` ```` ````{py:method} __repr__() -> str :canonical: simvx.core.input.controls.DeviceControl.__repr__ ```` ````{py:method} parse(spelling: str) -> simvx.core.input.controls.DeviceControl :canonical: simvx.core.input.controls.DeviceControl.parse :staticmethod: ```{autodoc2-docstring} simvx.core.input.controls.DeviceControl.parse ``` ```` ````{py:method} __mul__(factor: float) -> typing.Any :canonical: simvx.core.input.controls.DeviceControl.__mul__ ```{autodoc2-docstring} simvx.core.input.controls.DeviceControl.__mul__ ``` ```` ````{py:attribute} __rmul__ :canonical: simvx.core.input.controls.DeviceControl.__rmul__ :value: > None ```{autodoc2-docstring} simvx.core.input.controls.DeviceControl.__rmul__ ``` ```` ````{py:method} per_second(rate: float) -> typing.Any :canonical: simvx.core.input.controls.DeviceControl.per_second ```{autodoc2-docstring} simvx.core.input.controls.DeviceControl.per_second ``` ```` ````` `````{py:class} DeviceButton :canonical: simvx.core.input.controls.DeviceButton Bases: {py:obj}`simvx.core.input.controls.DeviceControl` ```{autodoc2-docstring} simvx.core.input.controls.DeviceButton ``` ````{py:attribute} __slots__ :canonical: simvx.core.input.controls.DeviceButton.__slots__ :value: > () ```{autodoc2-docstring} simvx.core.input.controls.DeviceButton.__slots__ ``` ```` ````{py:method} __contains__(control: object) -> bool :canonical: simvx.core.input.controls.DeviceButton.__contains__ ```{autodoc2-docstring} simvx.core.input.controls.DeviceButton.__contains__ ``` ```` ````{py:property} is_role :canonical: simvx.core.input.controls.DeviceButton.is_role :type: bool ```{autodoc2-docstring} simvx.core.input.controls.DeviceButton.is_role ``` ```` ````{py:property} is_group :canonical: simvx.core.input.controls.DeviceButton.is_group :type: bool ```{autodoc2-docstring} simvx.core.input.controls.DeviceButton.is_group ``` ```` ````{py:property} members :canonical: simvx.core.input.controls.DeviceButton.members :type: frozenset[simvx.core.input.controls.DeviceButton] ```{autodoc2-docstring} simvx.core.input.controls.DeviceButton.members ``` ```` ````{py:method} __add__(other: simvx.core.input.controls.DeviceButton | simvx.core.input.controls.DeviceAxis) -> simvx.core.input.events.InputBinding :canonical: simvx.core.input.controls.DeviceButton.__add__ ```{autodoc2-docstring} simvx.core.input.controls.DeviceButton.__add__ ``` ```` ````{py:attribute} device :canonical: simvx.core.input.controls.DeviceButton.device :type: simvx.core.input.controls.DeviceType :value: > None ```` ````{py:attribute} name :canonical: simvx.core.input.controls.DeviceButton.name :type: str | None :value: > None ```` ````{py:attribute} index :canonical: simvx.core.input.controls.DeviceButton.index :type: int | None :value: > None ```` ````{py:attribute} unit :canonical: simvx.core.input.controls.DeviceButton.unit :type: int | None :value: > None ```` ````{py:method} __new__(device: simvx.core.input.controls.DeviceType | str, name: str | None = None, *, index: int | None = None, unit: int | None = None) -> typing.Self :canonical: simvx.core.input.controls.DeviceButton.__new__ ```` ````{py:method} __setattr__(name: str, value: object) -> None :canonical: simvx.core.input.controls.DeviceButton.__setattr__ ```` ````{py:method} __delattr__(name: str) -> None :canonical: simvx.core.input.controls.DeviceButton.__delattr__ ```` ````{py:method} __reduce__() -> tuple :canonical: simvx.core.input.controls.DeviceButton.__reduce__ ```` ````{py:method} __copy__() -> typing.Self :canonical: simvx.core.input.controls.DeviceButton.__copy__ ```` ````{py:method} __deepcopy__(memo: dict) -> typing.Self :canonical: simvx.core.input.controls.DeviceButton.__deepcopy__ ```` ````{py:method} on(device: object) -> typing.Self :canonical: simvx.core.input.controls.DeviceButton.on ```` ````{py:property} is_named :canonical: simvx.core.input.controls.DeviceButton.is_named :type: bool ```` ````{py:method} __str__() -> str :canonical: simvx.core.input.controls.DeviceButton.__str__ ```` ````{py:method} __repr__() -> str :canonical: simvx.core.input.controls.DeviceButton.__repr__ ```` ````{py:method} parse(spelling: str) -> simvx.core.input.controls.DeviceControl :canonical: simvx.core.input.controls.DeviceButton.parse :staticmethod: ```` ````{py:method} __mul__(factor: float) -> typing.Any :canonical: simvx.core.input.controls.DeviceButton.__mul__ ```` ````{py:attribute} __rmul__ :canonical: simvx.core.input.controls.DeviceButton.__rmul__ :value: > None ```` ````{py:method} per_second(rate: float) -> typing.Any :canonical: simvx.core.input.controls.DeviceButton.per_second ```` ````` `````{py:class} DeviceAxis :canonical: simvx.core.input.controls.DeviceAxis Bases: {py:obj}`simvx.core.input.controls.DeviceControl` ```{autodoc2-docstring} simvx.core.input.controls.DeviceAxis ``` ````{py:attribute} __slots__ :canonical: simvx.core.input.controls.DeviceAxis.__slots__ :value: > ('half', 'is_delta') ```{autodoc2-docstring} simvx.core.input.controls.DeviceAxis.__slots__ ``` ```` ````{py:attribute} half :canonical: simvx.core.input.controls.DeviceAxis.half :type: int :value: > None ```{autodoc2-docstring} simvx.core.input.controls.DeviceAxis.half ``` ```` ````{py:attribute} is_delta :canonical: simvx.core.input.controls.DeviceAxis.is_delta :type: bool :value: > None ```{autodoc2-docstring} simvx.core.input.controls.DeviceAxis.is_delta ``` ```` ````{py:method} __new__(device: simvx.core.input.controls.DeviceType | str, name: str | None = None, *, index: int | None = None, unit: int | None = None, half: int = 0, is_delta: bool = False) -> typing.Self :canonical: simvx.core.input.controls.DeviceAxis.__new__ ```{autodoc2-docstring} simvx.core.input.controls.DeviceAxis.__new__ ``` ```` ````{py:property} positive :canonical: simvx.core.input.controls.DeviceAxis.positive :type: simvx.core.input.controls.DeviceAxis ```{autodoc2-docstring} simvx.core.input.controls.DeviceAxis.positive ``` ```` ````{py:property} negative :canonical: simvx.core.input.controls.DeviceAxis.negative :type: simvx.core.input.controls.DeviceAxis ```{autodoc2-docstring} simvx.core.input.controls.DeviceAxis.negative ``` ```` ````{py:property} delta :canonical: simvx.core.input.controls.DeviceAxis.delta :type: simvx.core.input.controls.DeviceAxis ```{autodoc2-docstring} simvx.core.input.controls.DeviceAxis.delta ``` ```` ````{py:property} whole :canonical: simvx.core.input.controls.DeviceAxis.whole :type: simvx.core.input.controls.DeviceAxis ```{autodoc2-docstring} simvx.core.input.controls.DeviceAxis.whole ``` ```` ````{py:method} __repr__() -> str :canonical: simvx.core.input.controls.DeviceAxis.__repr__ ```` ````{py:attribute} device :canonical: simvx.core.input.controls.DeviceAxis.device :type: simvx.core.input.controls.DeviceType :value: > None ```` ````{py:attribute} name :canonical: simvx.core.input.controls.DeviceAxis.name :type: str | None :value: > None ```` ````{py:attribute} index :canonical: simvx.core.input.controls.DeviceAxis.index :type: int | None :value: > None ```` ````{py:attribute} unit :canonical: simvx.core.input.controls.DeviceAxis.unit :type: int | None :value: > None ```` ````{py:method} __setattr__(name: str, value: object) -> None :canonical: simvx.core.input.controls.DeviceAxis.__setattr__ ```` ````{py:method} __delattr__(name: str) -> None :canonical: simvx.core.input.controls.DeviceAxis.__delattr__ ```` ````{py:method} __reduce__() -> tuple :canonical: simvx.core.input.controls.DeviceAxis.__reduce__ ```` ````{py:method} __copy__() -> typing.Self :canonical: simvx.core.input.controls.DeviceAxis.__copy__ ```` ````{py:method} __deepcopy__(memo: dict) -> typing.Self :canonical: simvx.core.input.controls.DeviceAxis.__deepcopy__ ```` ````{py:method} on(device: object) -> typing.Self :canonical: simvx.core.input.controls.DeviceAxis.on ```` ````{py:property} is_named :canonical: simvx.core.input.controls.DeviceAxis.is_named :type: bool ```` ````{py:method} __str__() -> str :canonical: simvx.core.input.controls.DeviceAxis.__str__ ```` ````{py:method} parse(spelling: str) -> simvx.core.input.controls.DeviceControl :canonical: simvx.core.input.controls.DeviceAxis.parse :staticmethod: ```` ````{py:method} __mul__(factor: float) -> typing.Any :canonical: simvx.core.input.controls.DeviceAxis.__mul__ ```` ````{py:attribute} __rmul__ :canonical: simvx.core.input.controls.DeviceAxis.__rmul__ :value: > None ```` ````{py:method} per_second(rate: float) -> typing.Any :canonical: simvx.core.input.controls.DeviceAxis.per_second ```` ````` `````{py:class} DeviceStick :canonical: simvx.core.input.controls.DeviceStick Bases: {py:obj}`simvx.core.input.controls.DeviceControl` ```{autodoc2-docstring} simvx.core.input.controls.DeviceStick ``` ````{py:attribute} __slots__ :canonical: simvx.core.input.controls.DeviceStick.__slots__ :value: > () ```{autodoc2-docstring} simvx.core.input.controls.DeviceStick.__slots__ ``` ```` ````{py:property} x :canonical: simvx.core.input.controls.DeviceStick.x :type: simvx.core.input.controls.DeviceAxis ```{autodoc2-docstring} simvx.core.input.controls.DeviceStick.x ``` ```` ````{py:property} y :canonical: simvx.core.input.controls.DeviceStick.y :type: simvx.core.input.controls.DeviceAxis ```{autodoc2-docstring} simvx.core.input.controls.DeviceStick.y ``` ```` ````{py:property} up :canonical: simvx.core.input.controls.DeviceStick.up :type: simvx.core.input.controls.DeviceAxis ```{autodoc2-docstring} simvx.core.input.controls.DeviceStick.up ``` ```` ````{py:property} down :canonical: simvx.core.input.controls.DeviceStick.down :type: simvx.core.input.controls.DeviceAxis ```{autodoc2-docstring} simvx.core.input.controls.DeviceStick.down ``` ```` ````{py:property} left :canonical: simvx.core.input.controls.DeviceStick.left :type: simvx.core.input.controls.DeviceAxis ```{autodoc2-docstring} simvx.core.input.controls.DeviceStick.left ``` ```` ````{py:property} right :canonical: simvx.core.input.controls.DeviceStick.right :type: simvx.core.input.controls.DeviceAxis ```{autodoc2-docstring} simvx.core.input.controls.DeviceStick.right ``` ```` ````{py:attribute} device :canonical: simvx.core.input.controls.DeviceStick.device :type: simvx.core.input.controls.DeviceType :value: > None ```` ````{py:attribute} name :canonical: simvx.core.input.controls.DeviceStick.name :type: str | None :value: > None ```` ````{py:attribute} index :canonical: simvx.core.input.controls.DeviceStick.index :type: int | None :value: > None ```` ````{py:attribute} unit :canonical: simvx.core.input.controls.DeviceStick.unit :type: int | None :value: > None ```` ````{py:method} __new__(device: simvx.core.input.controls.DeviceType | str, name: str | None = None, *, index: int | None = None, unit: int | None = None) -> typing.Self :canonical: simvx.core.input.controls.DeviceStick.__new__ ```` ````{py:method} __setattr__(name: str, value: object) -> None :canonical: simvx.core.input.controls.DeviceStick.__setattr__ ```` ````{py:method} __delattr__(name: str) -> None :canonical: simvx.core.input.controls.DeviceStick.__delattr__ ```` ````{py:method} __reduce__() -> tuple :canonical: simvx.core.input.controls.DeviceStick.__reduce__ ```` ````{py:method} __copy__() -> typing.Self :canonical: simvx.core.input.controls.DeviceStick.__copy__ ```` ````{py:method} __deepcopy__(memo: dict) -> typing.Self :canonical: simvx.core.input.controls.DeviceStick.__deepcopy__ ```` ````{py:method} on(device: object) -> typing.Self :canonical: simvx.core.input.controls.DeviceStick.on ```` ````{py:property} is_named :canonical: simvx.core.input.controls.DeviceStick.is_named :type: bool ```` ````{py:method} __str__() -> str :canonical: simvx.core.input.controls.DeviceStick.__str__ ```` ````{py:method} __repr__() -> str :canonical: simvx.core.input.controls.DeviceStick.__repr__ ```` ````{py:method} parse(spelling: str) -> simvx.core.input.controls.DeviceControl :canonical: simvx.core.input.controls.DeviceStick.parse :staticmethod: ```` ````{py:method} __mul__(factor: float) -> typing.Any :canonical: simvx.core.input.controls.DeviceStick.__mul__ ```` ````{py:attribute} __rmul__ :canonical: simvx.core.input.controls.DeviceStick.__rmul__ :value: > None ```` ````{py:method} per_second(rate: float) -> typing.Any :canonical: simvx.core.input.controls.DeviceStick.per_second ```` ````` `````{py:class} DeviceControls :canonical: simvx.core.input.controls.DeviceControls ```{autodoc2-docstring} simvx.core.input.controls.DeviceControls ``` ````{py:attribute} device :canonical: simvx.core.input.controls.DeviceControls.device :type: typing.ClassVar[simvx.core.input.controls.DeviceType] :value: > None ```{autodoc2-docstring} simvx.core.input.controls.DeviceControls.device ``` ```` ````{py:method} __init_subclass__(*, device: simvx.core.input.controls.DeviceType, **kwargs: typing.Any) -> None :canonical: simvx.core.input.controls.DeviceControls.__init_subclass__ :classmethod: ```{autodoc2-docstring} simvx.core.input.controls.DeviceControls.__init_subclass__ ``` ```` ````{py:method} __new__(*args: object, **kwargs: object) -> simvx.core.input.controls.DeviceControls :canonical: simvx.core.input.controls.DeviceControls.__new__ ```{autodoc2-docstring} simvx.core.input.controls.DeviceControls.__new__ ``` ```` ````{py:method} button(index: int) -> simvx.core.input.controls.DeviceButton :canonical: simvx.core.input.controls.DeviceControls.button :classmethod: ```{autodoc2-docstring} simvx.core.input.controls.DeviceControls.button ``` ```` ````{py:method} axis(index: int) -> simvx.core.input.controls.DeviceAxis :canonical: simvx.core.input.controls.DeviceControls.axis :classmethod: ```{autodoc2-docstring} simvx.core.input.controls.DeviceControls.axis ``` ```` ````` `````{py:class} Key :canonical: simvx.core.input.controls.Key Bases: {py:obj}`simvx.core.input.controls.DeviceControls` ```{autodoc2-docstring} simvx.core.input.controls.Key ``` ````{py:attribute} SPACE :canonical: simvx.core.input.controls.Key.SPACE :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.SPACE ``` ```` ````{py:attribute} APOSTROPHE :canonical: simvx.core.input.controls.Key.APOSTROPHE :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.APOSTROPHE ``` ```` ````{py:attribute} COMMA :canonical: simvx.core.input.controls.Key.COMMA :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.COMMA ``` ```` ````{py:attribute} MINUS :canonical: simvx.core.input.controls.Key.MINUS :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.MINUS ``` ```` ````{py:attribute} PERIOD :canonical: simvx.core.input.controls.Key.PERIOD :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.PERIOD ``` ```` ````{py:attribute} SLASH :canonical: simvx.core.input.controls.Key.SLASH :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.SLASH ``` ```` ````{py:attribute} KEY_0 :canonical: simvx.core.input.controls.Key.KEY_0 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KEY_0 ``` ```` ````{py:attribute} KEY_1 :canonical: simvx.core.input.controls.Key.KEY_1 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KEY_1 ``` ```` ````{py:attribute} KEY_2 :canonical: simvx.core.input.controls.Key.KEY_2 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KEY_2 ``` ```` ````{py:attribute} KEY_3 :canonical: simvx.core.input.controls.Key.KEY_3 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KEY_3 ``` ```` ````{py:attribute} KEY_4 :canonical: simvx.core.input.controls.Key.KEY_4 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KEY_4 ``` ```` ````{py:attribute} KEY_5 :canonical: simvx.core.input.controls.Key.KEY_5 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KEY_5 ``` ```` ````{py:attribute} KEY_6 :canonical: simvx.core.input.controls.Key.KEY_6 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KEY_6 ``` ```` ````{py:attribute} KEY_7 :canonical: simvx.core.input.controls.Key.KEY_7 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KEY_7 ``` ```` ````{py:attribute} KEY_8 :canonical: simvx.core.input.controls.Key.KEY_8 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KEY_8 ``` ```` ````{py:attribute} KEY_9 :canonical: simvx.core.input.controls.Key.KEY_9 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KEY_9 ``` ```` ````{py:attribute} SEMICOLON :canonical: simvx.core.input.controls.Key.SEMICOLON :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.SEMICOLON ``` ```` ````{py:attribute} EQUAL :canonical: simvx.core.input.controls.Key.EQUAL :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.EQUAL ``` ```` ````{py:attribute} A :canonical: simvx.core.input.controls.Key.A :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.A ``` ```` ````{py:attribute} B :canonical: simvx.core.input.controls.Key.B :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.B ``` ```` ````{py:attribute} C :canonical: simvx.core.input.controls.Key.C :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.C ``` ```` ````{py:attribute} D :canonical: simvx.core.input.controls.Key.D :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.D ``` ```` ````{py:attribute} E :canonical: simvx.core.input.controls.Key.E :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.E ``` ```` ````{py:attribute} F :canonical: simvx.core.input.controls.Key.F :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.F ``` ```` ````{py:attribute} G :canonical: simvx.core.input.controls.Key.G :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.G ``` ```` ````{py:attribute} H :canonical: simvx.core.input.controls.Key.H :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.H ``` ```` ````{py:attribute} I :canonical: simvx.core.input.controls.Key.I :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.I ``` ```` ````{py:attribute} J :canonical: simvx.core.input.controls.Key.J :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.J ``` ```` ````{py:attribute} K :canonical: simvx.core.input.controls.Key.K :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.K ``` ```` ````{py:attribute} L :canonical: simvx.core.input.controls.Key.L :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.L ``` ```` ````{py:attribute} M :canonical: simvx.core.input.controls.Key.M :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.M ``` ```` ````{py:attribute} N :canonical: simvx.core.input.controls.Key.N :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.N ``` ```` ````{py:attribute} O :canonical: simvx.core.input.controls.Key.O :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.O ``` ```` ````{py:attribute} P :canonical: simvx.core.input.controls.Key.P :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.P ``` ```` ````{py:attribute} Q :canonical: simvx.core.input.controls.Key.Q :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.Q ``` ```` ````{py:attribute} R :canonical: simvx.core.input.controls.Key.R :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.R ``` ```` ````{py:attribute} S :canonical: simvx.core.input.controls.Key.S :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.S ``` ```` ````{py:attribute} T :canonical: simvx.core.input.controls.Key.T :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.T ``` ```` ````{py:attribute} U :canonical: simvx.core.input.controls.Key.U :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.U ``` ```` ````{py:attribute} V :canonical: simvx.core.input.controls.Key.V :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.V ``` ```` ````{py:attribute} W :canonical: simvx.core.input.controls.Key.W :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.W ``` ```` ````{py:attribute} X :canonical: simvx.core.input.controls.Key.X :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.X ``` ```` ````{py:attribute} Y :canonical: simvx.core.input.controls.Key.Y :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.Y ``` ```` ````{py:attribute} Z :canonical: simvx.core.input.controls.Key.Z :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.Z ``` ```` ````{py:attribute} LEFT_BRACKET :canonical: simvx.core.input.controls.Key.LEFT_BRACKET :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.LEFT_BRACKET ``` ```` ````{py:attribute} BACKSLASH :canonical: simvx.core.input.controls.Key.BACKSLASH :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.BACKSLASH ``` ```` ````{py:attribute} RIGHT_BRACKET :canonical: simvx.core.input.controls.Key.RIGHT_BRACKET :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.RIGHT_BRACKET ``` ```` ````{py:attribute} GRAVE_ACCENT :canonical: simvx.core.input.controls.Key.GRAVE_ACCENT :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.GRAVE_ACCENT ``` ```` ````{py:attribute} ESCAPE :canonical: simvx.core.input.controls.Key.ESCAPE :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.ESCAPE ``` ```` ````{py:attribute} ENTER :canonical: simvx.core.input.controls.Key.ENTER :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.ENTER ``` ```` ````{py:attribute} TAB :canonical: simvx.core.input.controls.Key.TAB :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.TAB ``` ```` ````{py:attribute} BACKSPACE :canonical: simvx.core.input.controls.Key.BACKSPACE :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.BACKSPACE ``` ```` ````{py:attribute} INSERT :canonical: simvx.core.input.controls.Key.INSERT :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.INSERT ``` ```` ````{py:attribute} DELETE :canonical: simvx.core.input.controls.Key.DELETE :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.DELETE ``` ```` ````{py:attribute} RIGHT :canonical: simvx.core.input.controls.Key.RIGHT :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.RIGHT ``` ```` ````{py:attribute} LEFT :canonical: simvx.core.input.controls.Key.LEFT :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.LEFT ``` ```` ````{py:attribute} DOWN :canonical: simvx.core.input.controls.Key.DOWN :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.DOWN ``` ```` ````{py:attribute} UP :canonical: simvx.core.input.controls.Key.UP :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.UP ``` ```` ````{py:attribute} PAGE_UP :canonical: simvx.core.input.controls.Key.PAGE_UP :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.PAGE_UP ``` ```` ````{py:attribute} PAGE_DOWN :canonical: simvx.core.input.controls.Key.PAGE_DOWN :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.PAGE_DOWN ``` ```` ````{py:attribute} HOME :canonical: simvx.core.input.controls.Key.HOME :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.HOME ``` ```` ````{py:attribute} END :canonical: simvx.core.input.controls.Key.END :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.END ``` ```` ````{py:attribute} CAPS_LOCK :canonical: simvx.core.input.controls.Key.CAPS_LOCK :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.CAPS_LOCK ``` ```` ````{py:attribute} SCROLL_LOCK :canonical: simvx.core.input.controls.Key.SCROLL_LOCK :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.SCROLL_LOCK ``` ```` ````{py:attribute} NUM_LOCK :canonical: simvx.core.input.controls.Key.NUM_LOCK :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.NUM_LOCK ``` ```` ````{py:attribute} PRINT_SCREEN :canonical: simvx.core.input.controls.Key.PRINT_SCREEN :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.PRINT_SCREEN ``` ```` ````{py:attribute} PAUSE :canonical: simvx.core.input.controls.Key.PAUSE :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.PAUSE ``` ```` ````{py:attribute} F1 :canonical: simvx.core.input.controls.Key.F1 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.F1 ``` ```` ````{py:attribute} F2 :canonical: simvx.core.input.controls.Key.F2 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.F2 ``` ```` ````{py:attribute} F3 :canonical: simvx.core.input.controls.Key.F3 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.F3 ``` ```` ````{py:attribute} F4 :canonical: simvx.core.input.controls.Key.F4 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.F4 ``` ```` ````{py:attribute} F5 :canonical: simvx.core.input.controls.Key.F5 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.F5 ``` ```` ````{py:attribute} F6 :canonical: simvx.core.input.controls.Key.F6 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.F6 ``` ```` ````{py:attribute} F7 :canonical: simvx.core.input.controls.Key.F7 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.F7 ``` ```` ````{py:attribute} F8 :canonical: simvx.core.input.controls.Key.F8 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.F8 ``` ```` ````{py:attribute} F9 :canonical: simvx.core.input.controls.Key.F9 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.F9 ``` ```` ````{py:attribute} F10 :canonical: simvx.core.input.controls.Key.F10 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.F10 ``` ```` ````{py:attribute} F11 :canonical: simvx.core.input.controls.Key.F11 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.F11 ``` ```` ````{py:attribute} F12 :canonical: simvx.core.input.controls.Key.F12 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.F12 ``` ```` ````{py:attribute} KP_0 :canonical: simvx.core.input.controls.Key.KP_0 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KP_0 ``` ```` ````{py:attribute} KP_1 :canonical: simvx.core.input.controls.Key.KP_1 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KP_1 ``` ```` ````{py:attribute} KP_2 :canonical: simvx.core.input.controls.Key.KP_2 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KP_2 ``` ```` ````{py:attribute} KP_3 :canonical: simvx.core.input.controls.Key.KP_3 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KP_3 ``` ```` ````{py:attribute} KP_4 :canonical: simvx.core.input.controls.Key.KP_4 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KP_4 ``` ```` ````{py:attribute} KP_5 :canonical: simvx.core.input.controls.Key.KP_5 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KP_5 ``` ```` ````{py:attribute} KP_6 :canonical: simvx.core.input.controls.Key.KP_6 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KP_6 ``` ```` ````{py:attribute} KP_7 :canonical: simvx.core.input.controls.Key.KP_7 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KP_7 ``` ```` ````{py:attribute} KP_8 :canonical: simvx.core.input.controls.Key.KP_8 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KP_8 ``` ```` ````{py:attribute} KP_9 :canonical: simvx.core.input.controls.Key.KP_9 :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KP_9 ``` ```` ````{py:attribute} KP_DECIMAL :canonical: simvx.core.input.controls.Key.KP_DECIMAL :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KP_DECIMAL ``` ```` ````{py:attribute} KP_DIVIDE :canonical: simvx.core.input.controls.Key.KP_DIVIDE :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KP_DIVIDE ``` ```` ````{py:attribute} KP_MULTIPLY :canonical: simvx.core.input.controls.Key.KP_MULTIPLY :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KP_MULTIPLY ``` ```` ````{py:attribute} KP_SUBTRACT :canonical: simvx.core.input.controls.Key.KP_SUBTRACT :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KP_SUBTRACT ``` ```` ````{py:attribute} KP_ADD :canonical: simvx.core.input.controls.Key.KP_ADD :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KP_ADD ``` ```` ````{py:attribute} KP_ENTER :canonical: simvx.core.input.controls.Key.KP_ENTER :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.KP_ENTER ``` ```` ````{py:attribute} LEFT_SHIFT :canonical: simvx.core.input.controls.Key.LEFT_SHIFT :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.LEFT_SHIFT ``` ```` ````{py:attribute} LEFT_CONTROL :canonical: simvx.core.input.controls.Key.LEFT_CONTROL :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.LEFT_CONTROL ``` ```` ````{py:attribute} LEFT_ALT :canonical: simvx.core.input.controls.Key.LEFT_ALT :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.LEFT_ALT ``` ```` ````{py:attribute} LEFT_SUPER :canonical: simvx.core.input.controls.Key.LEFT_SUPER :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.LEFT_SUPER ``` ```` ````{py:attribute} RIGHT_SHIFT :canonical: simvx.core.input.controls.Key.RIGHT_SHIFT :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.RIGHT_SHIFT ``` ```` ````{py:attribute} RIGHT_CONTROL :canonical: simvx.core.input.controls.Key.RIGHT_CONTROL :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.RIGHT_CONTROL ``` ```` ````{py:attribute} RIGHT_ALT :canonical: simvx.core.input.controls.Key.RIGHT_ALT :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.RIGHT_ALT ``` ```` ````{py:attribute} RIGHT_SUPER :canonical: simvx.core.input.controls.Key.RIGHT_SUPER :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.RIGHT_SUPER ``` ```` ````{py:attribute} MENU :canonical: simvx.core.input.controls.Key.MENU :value: > '_key(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.MENU ``` ```` ````{py:attribute} CTRL :canonical: simvx.core.input.controls.Key.CTRL :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.CTRL ``` ```` ````{py:attribute} SHIFT :canonical: simvx.core.input.controls.Key.SHIFT :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.SHIFT ``` ```` ````{py:attribute} ALT :canonical: simvx.core.input.controls.Key.ALT :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.ALT ``` ```` ````{py:attribute} META :canonical: simvx.core.input.controls.Key.META :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Key.META ``` ```` ````{py:method} axis(index: int) -> simvx.core.input.controls.DeviceAxis :canonical: simvx.core.input.controls.Key.axis :classmethod: ```` ````{py:attribute} device :canonical: simvx.core.input.controls.Key.device :type: typing.ClassVar[simvx.core.input.controls.DeviceType] :value: > None ```` ````{py:method} __init_subclass__(*, device: simvx.core.input.controls.DeviceType, **kwargs: typing.Any) -> None :canonical: simvx.core.input.controls.Key.__init_subclass__ :classmethod: ```` ````{py:method} __new__(*args: object, **kwargs: object) -> simvx.core.input.controls.DeviceControls :canonical: simvx.core.input.controls.Key.__new__ ```` ````{py:method} button(index: int) -> simvx.core.input.controls.DeviceButton :canonical: simvx.core.input.controls.Key.button :classmethod: ```` ````` `````{py:class} Mouse :canonical: simvx.core.input.controls.Mouse Bases: {py:obj}`simvx.core.input.controls.DeviceControls` ```{autodoc2-docstring} simvx.core.input.controls.Mouse ``` ````{py:attribute} LEFT :canonical: simvx.core.input.controls.Mouse.LEFT :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Mouse.LEFT ``` ```` ````{py:attribute} RIGHT :canonical: simvx.core.input.controls.Mouse.RIGHT :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Mouse.RIGHT ``` ```` ````{py:attribute} MIDDLE :canonical: simvx.core.input.controls.Mouse.MIDDLE :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Mouse.MIDDLE ``` ```` ````{py:attribute} BACK :canonical: simvx.core.input.controls.Mouse.BACK :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Mouse.BACK ``` ```` ````{py:attribute} FORWARD :canonical: simvx.core.input.controls.Mouse.FORWARD :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Mouse.FORWARD ``` ```` ````{py:attribute} WHEEL :canonical: simvx.core.input.controls.Mouse.WHEEL :value: > 'DeviceAxis(...)' ```{autodoc2-docstring} simvx.core.input.controls.Mouse.WHEEL ``` ```` ````{py:attribute} device :canonical: simvx.core.input.controls.Mouse.device :type: typing.ClassVar[simvx.core.input.controls.DeviceType] :value: > None ```` ````{py:method} __init_subclass__(*, device: simvx.core.input.controls.DeviceType, **kwargs: typing.Any) -> None :canonical: simvx.core.input.controls.Mouse.__init_subclass__ :classmethod: ```` ````{py:method} __new__(*args: object, **kwargs: object) -> simvx.core.input.controls.DeviceControls :canonical: simvx.core.input.controls.Mouse.__new__ ```` ````{py:method} button(index: int) -> simvx.core.input.controls.DeviceButton :canonical: simvx.core.input.controls.Mouse.button :classmethod: ```` ````{py:method} axis(index: int) -> simvx.core.input.controls.DeviceAxis :canonical: simvx.core.input.controls.Mouse.axis :classmethod: ```` ````` `````{py:class} Touch :canonical: simvx.core.input.controls.Touch Bases: {py:obj}`simvx.core.input.controls.DeviceControls` ```{autodoc2-docstring} simvx.core.input.controls.Touch ``` ````{py:attribute} CONTACT :canonical: simvx.core.input.controls.Touch.CONTACT :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Touch.CONTACT ``` ```` ````{py:attribute} LONG_PRESS :canonical: simvx.core.input.controls.Touch.LONG_PRESS :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Touch.LONG_PRESS ``` ```` ````{py:attribute} TWO_FINGER_TAP :canonical: simvx.core.input.controls.Touch.TWO_FINGER_TAP :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Touch.TWO_FINGER_TAP ``` ```` ````{py:attribute} PINCH :canonical: simvx.core.input.controls.Touch.PINCH :value: > 'DeviceAxis(...)' ```{autodoc2-docstring} simvx.core.input.controls.Touch.PINCH ``` ```` ````{py:attribute} ROTATE :canonical: simvx.core.input.controls.Touch.ROTATE :value: > 'DeviceAxis(...)' ```{autodoc2-docstring} simvx.core.input.controls.Touch.ROTATE ``` ```` ````{py:attribute} PAN_X :canonical: simvx.core.input.controls.Touch.PAN_X :value: > 'DeviceAxis(...)' ```{autodoc2-docstring} simvx.core.input.controls.Touch.PAN_X ``` ```` ````{py:attribute} PAN_Y :canonical: simvx.core.input.controls.Touch.PAN_Y :value: > 'DeviceAxis(...)' ```{autodoc2-docstring} simvx.core.input.controls.Touch.PAN_Y ``` ```` ````{py:attribute} PAN :canonical: simvx.core.input.controls.Touch.PAN :value: > 'DeviceStick(...)' ```{autodoc2-docstring} simvx.core.input.controls.Touch.PAN ``` ```` ````{py:attribute} device :canonical: simvx.core.input.controls.Touch.device :type: typing.ClassVar[simvx.core.input.controls.DeviceType] :value: > None ```` ````{py:method} __init_subclass__(*, device: simvx.core.input.controls.DeviceType, **kwargs: typing.Any) -> None :canonical: simvx.core.input.controls.Touch.__init_subclass__ :classmethod: ```` ````{py:method} __new__(*args: object, **kwargs: object) -> simvx.core.input.controls.DeviceControls :canonical: simvx.core.input.controls.Touch.__new__ ```` ````{py:method} button(index: int) -> simvx.core.input.controls.DeviceButton :canonical: simvx.core.input.controls.Touch.button :classmethod: ```` ````{py:method} axis(index: int) -> simvx.core.input.controls.DeviceAxis :canonical: simvx.core.input.controls.Touch.axis :classmethod: ```` ````` `````{py:class} Pen :canonical: simvx.core.input.controls.Pen Bases: {py:obj}`simvx.core.input.controls.DeviceControls` ```{autodoc2-docstring} simvx.core.input.controls.Pen ``` ````{py:attribute} TIP :canonical: simvx.core.input.controls.Pen.TIP :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Pen.TIP ``` ```` ````{py:attribute} BARREL_1 :canonical: simvx.core.input.controls.Pen.BARREL_1 :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Pen.BARREL_1 ``` ```` ````{py:attribute} BARREL_2 :canonical: simvx.core.input.controls.Pen.BARREL_2 :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Pen.BARREL_2 ``` ```` ````{py:attribute} BARREL_3 :canonical: simvx.core.input.controls.Pen.BARREL_3 :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Pen.BARREL_3 ``` ```` ````{py:attribute} device :canonical: simvx.core.input.controls.Pen.device :type: typing.ClassVar[simvx.core.input.controls.DeviceType] :value: > None ```` ````{py:method} __init_subclass__(*, device: simvx.core.input.controls.DeviceType, **kwargs: typing.Any) -> None :canonical: simvx.core.input.controls.Pen.__init_subclass__ :classmethod: ```` ````{py:method} __new__(*args: object, **kwargs: object) -> simvx.core.input.controls.DeviceControls :canonical: simvx.core.input.controls.Pen.__new__ ```` ````{py:method} button(index: int) -> simvx.core.input.controls.DeviceButton :canonical: simvx.core.input.controls.Pen.button :classmethod: ```` ````{py:method} axis(index: int) -> simvx.core.input.controls.DeviceAxis :canonical: simvx.core.input.controls.Pen.axis :classmethod: ```` ````` `````{py:class} Tablet :canonical: simvx.core.input.controls.Tablet Bases: {py:obj}`simvx.core.input.controls.DeviceControls` ```{autodoc2-docstring} simvx.core.input.controls.Tablet ``` ````{py:attribute} RING :canonical: simvx.core.input.controls.Tablet.RING :value: > 'DeviceAxis(...)' ```{autodoc2-docstring} simvx.core.input.controls.Tablet.RING ``` ```` ````{py:attribute} RING_2 :canonical: simvx.core.input.controls.Tablet.RING_2 :value: > 'DeviceAxis(...)' ```{autodoc2-docstring} simvx.core.input.controls.Tablet.RING_2 ``` ```` ````{py:attribute} STRIP :canonical: simvx.core.input.controls.Tablet.STRIP :value: > 'DeviceAxis(...)' ```{autodoc2-docstring} simvx.core.input.controls.Tablet.STRIP ``` ```` ````{py:attribute} STRIP_2 :canonical: simvx.core.input.controls.Tablet.STRIP_2 :value: > 'DeviceAxis(...)' ```{autodoc2-docstring} simvx.core.input.controls.Tablet.STRIP_2 ``` ```` ````{py:attribute} device :canonical: simvx.core.input.controls.Tablet.device :type: typing.ClassVar[simvx.core.input.controls.DeviceType] :value: > None ```` ````{py:method} __init_subclass__(*, device: simvx.core.input.controls.DeviceType, **kwargs: typing.Any) -> None :canonical: simvx.core.input.controls.Tablet.__init_subclass__ :classmethod: ```` ````{py:method} __new__(*args: object, **kwargs: object) -> simvx.core.input.controls.DeviceControls :canonical: simvx.core.input.controls.Tablet.__new__ ```` ````{py:method} button(index: int) -> simvx.core.input.controls.DeviceButton :canonical: simvx.core.input.controls.Tablet.button :classmethod: ```` ````{py:method} axis(index: int) -> simvx.core.input.controls.DeviceAxis :canonical: simvx.core.input.controls.Tablet.axis :classmethod: ```` ````` `````{py:class} Controller :canonical: simvx.core.input.controls.Controller Bases: {py:obj}`simvx.core.input.controls.DeviceControls` ```{autodoc2-docstring} simvx.core.input.controls.Controller ``` ````{py:attribute} A :canonical: simvx.core.input.controls.Controller.A :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.A ``` ```` ````{py:attribute} B :canonical: simvx.core.input.controls.Controller.B :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.B ``` ```` ````{py:attribute} X :canonical: simvx.core.input.controls.Controller.X :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.X ``` ```` ````{py:attribute} Y :canonical: simvx.core.input.controls.Controller.Y :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.Y ``` ```` ````{py:attribute} LEFT_BUMPER :canonical: simvx.core.input.controls.Controller.LEFT_BUMPER :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.LEFT_BUMPER ``` ```` ````{py:attribute} RIGHT_BUMPER :canonical: simvx.core.input.controls.Controller.RIGHT_BUMPER :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.RIGHT_BUMPER ``` ```` ````{py:attribute} BACK :canonical: simvx.core.input.controls.Controller.BACK :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.BACK ``` ```` ````{py:attribute} START :canonical: simvx.core.input.controls.Controller.START :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.START ``` ```` ````{py:attribute} GUIDE :canonical: simvx.core.input.controls.Controller.GUIDE :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.GUIDE ``` ```` ````{py:attribute} LEFT_THUMB :canonical: simvx.core.input.controls.Controller.LEFT_THUMB :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.LEFT_THUMB ``` ```` ````{py:attribute} RIGHT_THUMB :canonical: simvx.core.input.controls.Controller.RIGHT_THUMB :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.RIGHT_THUMB ``` ```` ````{py:attribute} DPAD_UP :canonical: simvx.core.input.controls.Controller.DPAD_UP :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.DPAD_UP ``` ```` ````{py:attribute} DPAD_RIGHT :canonical: simvx.core.input.controls.Controller.DPAD_RIGHT :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.DPAD_RIGHT ``` ```` ````{py:attribute} DPAD_DOWN :canonical: simvx.core.input.controls.Controller.DPAD_DOWN :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.DPAD_DOWN ``` ```` ````{py:attribute} DPAD_LEFT :canonical: simvx.core.input.controls.Controller.DPAD_LEFT :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.DPAD_LEFT ``` ```` ````{py:attribute} LEFT_X :canonical: simvx.core.input.controls.Controller.LEFT_X :value: > 'DeviceAxis(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.LEFT_X ``` ```` ````{py:attribute} LEFT_Y :canonical: simvx.core.input.controls.Controller.LEFT_Y :value: > 'DeviceAxis(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.LEFT_Y ``` ```` ````{py:attribute} RIGHT_X :canonical: simvx.core.input.controls.Controller.RIGHT_X :value: > 'DeviceAxis(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.RIGHT_X ``` ```` ````{py:attribute} RIGHT_Y :canonical: simvx.core.input.controls.Controller.RIGHT_Y :value: > 'DeviceAxis(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.RIGHT_Y ``` ```` ````{py:attribute} LEFT_TRIGGER :canonical: simvx.core.input.controls.Controller.LEFT_TRIGGER :value: > 'DeviceAxis(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.LEFT_TRIGGER ``` ```` ````{py:attribute} RIGHT_TRIGGER :canonical: simvx.core.input.controls.Controller.RIGHT_TRIGGER :value: > 'DeviceAxis(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.RIGHT_TRIGGER ``` ```` ````{py:attribute} LEFT_STICK :canonical: simvx.core.input.controls.Controller.LEFT_STICK :value: > 'DeviceStick(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.LEFT_STICK ``` ```` ````{py:attribute} RIGHT_STICK :canonical: simvx.core.input.controls.Controller.RIGHT_STICK :value: > 'DeviceStick(...)' ```{autodoc2-docstring} simvx.core.input.controls.Controller.RIGHT_STICK ``` ```` ````{py:attribute} device :canonical: simvx.core.input.controls.Controller.device :type: typing.ClassVar[simvx.core.input.controls.DeviceType] :value: > None ```` ````{py:method} __init_subclass__(*, device: simvx.core.input.controls.DeviceType, **kwargs: typing.Any) -> None :canonical: simvx.core.input.controls.Controller.__init_subclass__ :classmethod: ```` ````{py:method} __new__(*args: object, **kwargs: object) -> simvx.core.input.controls.DeviceControls :canonical: simvx.core.input.controls.Controller.__new__ ```` ````{py:method} button(index: int) -> simvx.core.input.controls.DeviceButton :canonical: simvx.core.input.controls.Controller.button :classmethod: ```` ````{py:method} axis(index: int) -> simvx.core.input.controls.DeviceAxis :canonical: simvx.core.input.controls.Controller.axis :classmethod: ```` ````` `````{py:class} Pointer :canonical: simvx.core.input.controls.Pointer Bases: {py:obj}`simvx.core.input.controls.DeviceControls` ```{autodoc2-docstring} simvx.core.input.controls.Pointer ``` ````{py:attribute} PRIMARY :canonical: simvx.core.input.controls.Pointer.PRIMARY :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Pointer.PRIMARY ``` ```` ````{py:attribute} SECONDARY :canonical: simvx.core.input.controls.Pointer.SECONDARY :value: > 'DeviceButton(...)' ```{autodoc2-docstring} simvx.core.input.controls.Pointer.SECONDARY ``` ```` ````{py:method} button(index: int) -> simvx.core.input.controls.DeviceButton :canonical: simvx.core.input.controls.Pointer.button :classmethod: ```` ````{py:method} axis(index: int) -> simvx.core.input.controls.DeviceAxis :canonical: simvx.core.input.controls.Pointer.axis :classmethod: ```` ````{py:attribute} device :canonical: simvx.core.input.controls.Pointer.device :type: typing.ClassVar[simvx.core.input.controls.DeviceType] :value: > None ```` ````{py:method} __init_subclass__(*, device: simvx.core.input.controls.DeviceType, **kwargs: typing.Any) -> None :canonical: simvx.core.input.controls.Pointer.__init_subclass__ :classmethod: ```` ````{py:method} __new__(*args: object, **kwargs: object) -> simvx.core.input.controls.DeviceControls :canonical: simvx.core.input.controls.Pointer.__new__ ```` ````` ````{py:data} MODIFIER_SIDES :canonical: simvx.core.input.controls.MODIFIER_SIDES :type: collections.abc.Mapping[simvx.core.input.controls.DeviceButton, frozenset[simvx.core.input.controls.DeviceButton]] :value: > 'MappingProxyType(...)' ```{autodoc2-docstring} simvx.core.input.controls.MODIFIER_SIDES ``` ```` ````{py:data} MODIFIER_OF :canonical: simvx.core.input.controls.MODIFIER_OF :type: collections.abc.Mapping[simvx.core.input.controls.DeviceButton, simvx.core.input.controls.DeviceButton] :value: > 'MappingProxyType(...)' ```{autodoc2-docstring} simvx.core.input.controls.MODIFIER_OF ``` ```` ````{py:data} ROLE_MEMBER :canonical: simvx.core.input.controls.ROLE_MEMBER :type: collections.abc.Mapping[tuple[simvx.core.input.controls.DeviceButton, simvx.core.input.controls.DeviceType], simvx.core.input.controls.DeviceButton] :value: > 'MappingProxyType(...)' ```{autodoc2-docstring} simvx.core.input.controls.ROLE_MEMBER ``` ```` ````{py:function} roles_of(control: simvx.core.input.controls.DeviceControl) -> tuple[simvx.core.input.controls.DeviceButton, ...] :canonical: simvx.core.input.controls.roles_of ```{autodoc2-docstring} simvx.core.input.controls.roles_of ``` ```` ````{py:function} key_code(key: simvx.core.input.controls.DeviceControl) -> int | None :canonical: simvx.core.input.controls.key_code ```{autodoc2-docstring} simvx.core.input.controls.key_code ``` ```` ````{py:function} key_for_code(code: int) -> simvx.core.input.controls.DeviceButton :canonical: simvx.core.input.controls.key_for_code ```{autodoc2-docstring} simvx.core.input.controls.key_for_code ``` ```` ````{py:data} SELF_MODIFIER :canonical: simvx.core.input.controls.SELF_MODIFIER :type: dict[int, int] :value: > None ```{autodoc2-docstring} simvx.core.input.controls.SELF_MODIFIER ``` ```` ````{py:function} key_to_name(key: simvx.core.input.controls.DeviceButton) -> str :canonical: simvx.core.input.controls.key_to_name ```{autodoc2-docstring} simvx.core.input.controls.key_to_name ``` ```` ````{py:function} name_to_keys(name: str) -> list[simvx.core.input.controls.DeviceButton] :canonical: simvx.core.input.controls.name_to_keys ```{autodoc2-docstring} simvx.core.input.controls.name_to_keys ``` ````