infrared_scene_edit.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #include "../infrared_i.h"
  2. typedef enum {
  3. SubmenuIndexAddButton,
  4. SubmenuIndexRenameButton,
  5. SubmenuIndexDeleteButton,
  6. SubmenuIndexRenameRemote,
  7. SubmenuIndexDeleteRemote,
  8. } SubmenuIndex;
  9. static void infrared_scene_edit_submenu_callback(void* context, uint32_t index) {
  10. Infrared* infrared = context;
  11. view_dispatcher_send_custom_event(infrared->view_dispatcher, index);
  12. }
  13. void infrared_scene_edit_on_enter(void* context) {
  14. Infrared* infrared = context;
  15. Submenu* submenu = infrared->submenu;
  16. SceneManager* scene_manager = infrared->scene_manager;
  17. submenu_add_item(
  18. submenu,
  19. "Add Button",
  20. SubmenuIndexAddButton,
  21. infrared_scene_edit_submenu_callback,
  22. context);
  23. submenu_add_item(
  24. submenu,
  25. "Rename Button",
  26. SubmenuIndexRenameButton,
  27. infrared_scene_edit_submenu_callback,
  28. context);
  29. submenu_add_item(
  30. submenu,
  31. "Delete Button",
  32. SubmenuIndexDeleteButton,
  33. infrared_scene_edit_submenu_callback,
  34. context);
  35. submenu_add_item(
  36. submenu,
  37. "Rename Remote",
  38. SubmenuIndexRenameRemote,
  39. infrared_scene_edit_submenu_callback,
  40. context);
  41. submenu_add_item(
  42. submenu,
  43. "Delete Remote",
  44. SubmenuIndexDeleteRemote,
  45. infrared_scene_edit_submenu_callback,
  46. context);
  47. const uint32_t submenu_index = scene_manager_get_scene_state(scene_manager, InfraredSceneEdit);
  48. submenu_set_selected_item(submenu, submenu_index);
  49. scene_manager_set_scene_state(scene_manager, InfraredSceneEdit, SubmenuIndexAddButton);
  50. view_dispatcher_switch_to_view(infrared->view_dispatcher, InfraredViewSubmenu);
  51. }
  52. bool infrared_scene_edit_on_event(void* context, SceneManagerEvent event) {
  53. Infrared* infrared = context;
  54. SceneManager* scene_manager = infrared->scene_manager;
  55. bool consumed = false;
  56. if(event.type == SceneManagerEventTypeCustom) {
  57. const uint32_t submenu_index = event.event;
  58. scene_manager_set_scene_state(scene_manager, InfraredSceneEdit, submenu_index);
  59. if(submenu_index == SubmenuIndexAddButton) {
  60. infrared->app_state.is_learning_new_remote = false;
  61. scene_manager_next_scene(scene_manager, InfraredSceneLearn);
  62. consumed = true;
  63. } else if(submenu_index == SubmenuIndexRenameButton) {
  64. infrared->app_state.edit_target = InfraredEditTargetButton;
  65. infrared->app_state.edit_mode = InfraredEditModeRename;
  66. scene_manager_next_scene(scene_manager, InfraredSceneEditButtonSelect);
  67. consumed = true;
  68. } else if(submenu_index == SubmenuIndexDeleteButton) {
  69. infrared->app_state.edit_target = InfraredEditTargetButton;
  70. infrared->app_state.edit_mode = InfraredEditModeDelete;
  71. scene_manager_next_scene(scene_manager, InfraredSceneEditButtonSelect);
  72. consumed = true;
  73. } else if(submenu_index == SubmenuIndexRenameRemote) {
  74. infrared->app_state.edit_target = InfraredEditTargetRemote;
  75. infrared->app_state.edit_mode = InfraredEditModeRename;
  76. scene_manager_next_scene(scene_manager, InfraredSceneEditRename);
  77. consumed = true;
  78. } else if(submenu_index == SubmenuIndexDeleteRemote) {
  79. infrared->app_state.edit_target = InfraredEditTargetRemote;
  80. infrared->app_state.edit_mode = InfraredEditModeDelete;
  81. scene_manager_next_scene(scene_manager, InfraredSceneEditDelete);
  82. consumed = true;
  83. }
  84. }
  85. return consumed;
  86. }
  87. void infrared_scene_edit_on_exit(void* context) {
  88. Infrared* infrared = context;
  89. submenu_reset(infrared->submenu);
  90. }