feat(menu): submenú Controls i bloqueig de polling amb menú obert
This commit is contained in:
1 parent
350625dec0
commit
fb40d0effb
8 files changed
+229
-7
No files matched your search
@@ -72,6 +72,7 @@ class ServiceMenu {
|
||||
INT_RANGE, // L/R descent/ascent per step, clamp a [min,max]
|
||||
SUBMENU, // RETURN/R: push la pàgina construïda per `pushSub`
|
||||
ACTION, // RETURN: dispara `action`
|
||||
KEY_BIND, // Mostra el nom d'una tecla; RETURN captura-ne de nova.
|
||||
};
|
||||
Kind kind{Kind::TOGGLE};
|
||||
// Per a tots els Kind menys LABEL, `label_key` és una clau de Locale.
|
||||
@@ -97,6 +98,12 @@ class ServiceMenu {
|
||||
std::function<void()> push_sub;
|
||||
std::function<void()> action;
|
||||
|
||||
// Per a KEY_BIND: getter que retorna l'scancode actual i setter
|
||||
// opcional que el muta. Si `set_scancode` és buit, l'item es veu
|
||||
// però la captura queda deshabilitada (placeholder).
|
||||
std::function<SDL_Scancode()> get_scancode;
|
||||
std::function<void(SDL_Scancode)> set_scancode;
|
||||
|
||||
// Si està buit, l'item sempre és visible. Si retorna false, l'item
|
||||
// es salta tant al render com a la navegació (cursor salta).
|
||||
std::function<bool()> visible;
|
||||
@@ -166,6 +173,15 @@ class ServiceMenu {
|
||||
std::string text,
|
||||
std::function<bool()> visible = {}) -> Item;
|
||||
|
||||
// Item de vinculació de tecla. Mostra el nom de l'scancode al costat
|
||||
// dret. Si `setter` és buit, l'item surt com a informatiu (no captura).
|
||||
// Quan el setter sigui operatiu, RETURN entrarà en mode captura i la
|
||||
// pròxima tecla que es premi sobreescriurà la vinculació.
|
||||
[[nodiscard]] static auto makeKeyBind(
|
||||
std::string label_key,
|
||||
std::function<SDL_Scancode()> getter,
|
||||
std::function<void(SDL_Scancode)> setter = {}) -> Item;
|
||||
|
||||
// --- Navegació i estat ---
|
||||
void pushPage(Page page);
|
||||
void popPage();
|
||||
@@ -184,6 +200,9 @@ class ServiceMenu {
|
||||
[[nodiscard]] static auto buildRoot() -> Page;
|
||||
[[nodiscard]] static auto buildVideo() -> Page;
|
||||
[[nodiscard]] static auto buildAudio() -> Page;
|
||||
[[nodiscard]] static auto buildControls() -> Page;
|
||||
[[nodiscard]] static auto buildKeyboardControls() -> Page;
|
||||
[[nodiscard]] static auto buildGamepadControls() -> Page;
|
||||
[[nodiscard]] static auto buildSystem() -> Page;
|
||||
|
||||
// Helpers privats d'items de vídeo: aïllen la lògica de
|
||||
|
||||
Reference in new issue
Block a user