infrared_scene_universal.c 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include "../infrared_i.h"
  2. typedef enum {
  3. SubmenuIndexUniversalTV,
  4. SubmenuIndexUniversalAC,
  5. SubmenuIndexUniversalAudio,
  6. SubmenuIndexUniversalProjector,
  7. } SubmenuIndex;
  8. static void infrared_scene_universal_submenu_callback(void* context, uint32_t index) {
  9. Infrared* infrared = context;
  10. view_dispatcher_send_custom_event(infrared->view_dispatcher, index);
  11. }
  12. void infrared_scene_universal_on_enter(void* context) {
  13. Infrared* infrared = context;
  14. Submenu* submenu = infrared->submenu;
  15. submenu_add_item(
  16. submenu,
  17. "TVs",
  18. SubmenuIndexUniversalTV,
  19. infrared_scene_universal_submenu_callback,
  20. context);
  21. submenu_add_item(
  22. submenu,
  23. "Audio Players",
  24. SubmenuIndexUniversalAudio,
  25. infrared_scene_universal_submenu_callback,
  26. context);
  27. submenu_add_item(
  28. submenu,
  29. "Projectors",
  30. SubmenuIndexUniversalProjector,
  31. infrared_scene_universal_submenu_callback,
  32. context);
  33. submenu_add_item(
  34. submenu,
  35. "Air Conditioners",
  36. SubmenuIndexUniversalAC,
  37. infrared_scene_universal_submenu_callback,
  38. context);
  39. submenu_set_selected_item(
  40. submenu, scene_manager_get_scene_state(infrared->scene_manager, InfraredSceneUniversal));
  41. view_dispatcher_switch_to_view(infrared->view_dispatcher, InfraredViewSubmenu);
  42. }
  43. bool infrared_scene_universal_on_event(void* context, SceneManagerEvent event) {
  44. Infrared* infrared = context;
  45. SceneManager* scene_manager = infrared->scene_manager;
  46. bool consumed = false;
  47. if(event.type == SceneManagerEventTypeCustom) {
  48. if(event.event == SubmenuIndexUniversalTV) {
  49. scene_manager_next_scene(scene_manager, InfraredSceneUniversalTV);
  50. consumed = true;
  51. } else if(event.event == SubmenuIndexUniversalAC) {
  52. scene_manager_next_scene(scene_manager, InfraredSceneUniversalAC);
  53. consumed = true;
  54. } else if(event.event == SubmenuIndexUniversalAudio) {
  55. scene_manager_next_scene(scene_manager, InfraredSceneUniversalAudio);
  56. consumed = true;
  57. } else if(event.event == SubmenuIndexUniversalProjector) {
  58. scene_manager_next_scene(scene_manager, InfraredSceneUniversalProjector);
  59. consumed = true;
  60. }
  61. scene_manager_set_scene_state(scene_manager, InfraredSceneUniversal, event.event);
  62. }
  63. return consumed;
  64. }
  65. void infrared_scene_universal_on_exit(void* context) {
  66. Infrared* infrared = context;
  67. submenu_reset(infrared->submenu);
  68. }