#include "../infrared_i.h" enum SubmenuIndex { SubmenuIndexUniversalRemotes, SubmenuIndexLearnNewRemote, SubmenuIndexSavedRemotes, SubmenuIndexDebug }; static void infrared_scene_start_submenu_callback(void* context, uint32_t index) { Infrared* infrared = context; view_dispatcher_send_custom_event(infrared->view_dispatcher, index); } void infrared_scene_start_on_enter(void* context) { Infrared* infrared = context; Submenu* submenu = infrared->submenu; SceneManager* scene_manager = infrared->scene_manager; submenu_add_item( submenu, "Universal Remotes", SubmenuIndexUniversalRemotes, infrared_scene_start_submenu_callback, infrared); submenu_add_item( submenu, "Learn New Remote", SubmenuIndexLearnNewRemote, infrared_scene_start_submenu_callback, infrared); submenu_add_item( submenu, "Saved Remotes", SubmenuIndexSavedRemotes, infrared_scene_start_submenu_callback, infrared); if(infrared->app_state.is_debug_enabled) { submenu_add_item( submenu, "Debug", SubmenuIndexDebug, infrared_scene_start_submenu_callback, infrared); } const uint32_t submenu_index = scene_manager_get_scene_state(scene_manager, InfraredSceneStart); submenu_set_selected_item(submenu, submenu_index); scene_manager_set_scene_state(scene_manager, InfraredSceneStart, SubmenuIndexUniversalRemotes); view_dispatcher_switch_to_view(infrared->view_dispatcher, InfraredViewSubmenu); } bool infrared_scene_start_on_event(void* context, SceneManagerEvent event) { Infrared* infrared = context; SceneManager* scene_manager = infrared->scene_manager; bool consumed = false; if(event.type == SceneManagerEventTypeCustom) { const uint32_t submenu_index = event.event; scene_manager_set_scene_state(scene_manager, InfraredSceneStart, submenu_index); if(submenu_index == SubmenuIndexUniversalRemotes) { scene_manager_next_scene(scene_manager, InfraredSceneUniversal); consumed = true; } else if(submenu_index == SubmenuIndexLearnNewRemote) { infrared->app_state.is_learning_new_remote = true; scene_manager_next_scene(scene_manager, InfraredSceneLearn); consumed = true; } else if(submenu_index == SubmenuIndexSavedRemotes) { scene_manager_next_scene(scene_manager, InfraredSceneRemoteList); consumed = true; } else if(submenu_index == SubmenuIndexDebug) { scene_manager_next_scene(scene_manager, InfraredSceneDebug); consumed = true; } } return consumed; } void infrared_scene_start_on_exit(void* context) { Infrared* infrared = context; submenu_reset(infrared->submenu); }