ibutton_scene_read_key_menu.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include "../ibutton_i.h"
  2. typedef enum {
  3. SubmenuIndexSave,
  4. SubmenuIndexEmulate,
  5. SubmenuIndexWrite,
  6. } SubmenuIndex;
  7. void ibutton_scene_read_key_menu_submenu_callback(void* context, uint32_t index) {
  8. iButton* ibutton = context;
  9. view_dispatcher_send_custom_event(ibutton->view_dispatcher, index);
  10. }
  11. void ibutton_scene_read_key_menu_on_enter(void* context) {
  12. iButton* ibutton = context;
  13. Submenu* submenu = ibutton->submenu;
  14. submenu_add_item(
  15. submenu, "Save", SubmenuIndexSave, ibutton_scene_read_key_menu_submenu_callback, ibutton);
  16. submenu_add_item(
  17. submenu,
  18. "Emulate",
  19. SubmenuIndexEmulate,
  20. ibutton_scene_read_key_menu_submenu_callback,
  21. ibutton);
  22. if(ibutton_key_get_type(ibutton->key) == iButtonKeyDS1990) {
  23. submenu_add_item(
  24. submenu,
  25. "Write",
  26. SubmenuIndexWrite,
  27. ibutton_scene_read_key_menu_submenu_callback,
  28. ibutton);
  29. }
  30. submenu_set_selected_item(
  31. submenu, scene_manager_get_scene_state(ibutton->scene_manager, iButtonSceneReadKeyMenu));
  32. view_dispatcher_switch_to_view(ibutton->view_dispatcher, iButtonViewSubmenu);
  33. }
  34. bool ibutton_scene_read_key_menu_on_event(void* context, SceneManagerEvent event) {
  35. iButton* ibutton = context;
  36. bool consumed = false;
  37. if(event.type == SceneManagerEventTypeCustom) {
  38. scene_manager_set_scene_state(
  39. ibutton->scene_manager, iButtonSceneReadKeyMenu, event.event);
  40. consumed = true;
  41. if(event.event == SubmenuIndexSave) {
  42. scene_manager_next_scene(ibutton->scene_manager, iButtonSceneSaveName);
  43. } else if(event.event == SubmenuIndexEmulate) {
  44. scene_manager_next_scene(ibutton->scene_manager, iButtonSceneEmulate);
  45. } else if(event.event == SubmenuIndexWrite) {
  46. scene_manager_next_scene(ibutton->scene_manager, iButtonSceneWrite);
  47. }
  48. }
  49. return consumed;
  50. }
  51. void ibutton_scene_read_key_menu_on_exit(void* context) {
  52. iButton* ibutton = context;
  53. submenu_reset(ibutton->submenu);
  54. }