infrared_scene_edit_button_select.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include "../infrared_i.h"
  2. static void infrared_scene_edit_button_select_submenu_callback(void* context, uint32_t index) {
  3. Infrared* infrared = context;
  4. view_dispatcher_send_custom_event(infrared->view_dispatcher, index);
  5. }
  6. void infrared_scene_edit_button_select_on_enter(void* context) {
  7. Infrared* infrared = context;
  8. Submenu* submenu = infrared->submenu;
  9. InfraredRemote* remote = infrared->remote;
  10. InfraredAppState* app_state = &infrared->app_state;
  11. const char* header = infrared->app_state.edit_mode == InfraredEditModeRename ?
  12. "Rename Button:" :
  13. "Delete Button:";
  14. submenu_set_header(submenu, header);
  15. const size_t button_count = infrared_remote_get_button_count(remote);
  16. for(size_t i = 0; i < button_count; ++i) {
  17. InfraredRemoteButton* button = infrared_remote_get_button(remote, i);
  18. submenu_add_item(
  19. submenu,
  20. infrared_remote_button_get_name(button),
  21. i,
  22. infrared_scene_edit_button_select_submenu_callback,
  23. context);
  24. }
  25. if(button_count && app_state->current_button_index != InfraredButtonIndexNone) {
  26. submenu_set_selected_item(submenu, app_state->current_button_index);
  27. app_state->current_button_index = InfraredButtonIndexNone;
  28. }
  29. view_dispatcher_switch_to_view(infrared->view_dispatcher, InfraredViewSubmenu);
  30. }
  31. bool infrared_scene_edit_button_select_on_event(void* context, SceneManagerEvent event) {
  32. Infrared* infrared = context;
  33. InfraredAppState* app_state = &infrared->app_state;
  34. SceneManager* scene_manager = infrared->scene_manager;
  35. bool consumed = false;
  36. if(event.type == SceneManagerEventTypeCustom) {
  37. app_state->current_button_index = event.event;
  38. const InfraredEditMode edit_mode = app_state->edit_mode;
  39. if(edit_mode == InfraredEditModeRename) {
  40. scene_manager_next_scene(scene_manager, InfraredSceneEditRename);
  41. } else if(edit_mode == InfraredEditModeDelete) {
  42. scene_manager_next_scene(scene_manager, InfraredSceneEditDelete);
  43. } else {
  44. furi_assert(0);
  45. }
  46. consumed = true;
  47. }
  48. return consumed;
  49. }
  50. void infrared_scene_edit_button_select_on_exit(void* context) {
  51. Infrared* infrared = context;
  52. submenu_reset(infrared->submenu);
  53. }