uhf_scene_start.c 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include "../uhf_app_i.h"
  2. enum SubmenuIndex {
  3. SubmenuIndexRead,
  4. SubmenuIndexSaved,
  5. SubmenuIndexSettings
  6. };
  7. void uhf_scene_start_submenu_callback(void* ctx, uint32_t index) {
  8. UHFApp* uhf_app = ctx;
  9. view_dispatcher_send_custom_event(uhf_app->view_dispatcher, index);
  10. }
  11. void uhf_scene_start_on_enter(void* ctx) {
  12. UHFApp* uhf_app = ctx;
  13. Submenu* submenu = uhf_app->submenu;
  14. submenu_add_item(
  15. submenu, "Read Tag", SubmenuIndexRead, uhf_scene_start_submenu_callback, uhf_app);
  16. submenu_add_item(
  17. submenu, "Saved", SubmenuIndexSaved, uhf_scene_start_submenu_callback, uhf_app);
  18. submenu_add_item(
  19. submenu, "Settings", SubmenuIndexSettings, uhf_scene_start_submenu_callback, uhf_app);
  20. submenu_set_selected_item(
  21. submenu, scene_manager_get_scene_state(uhf_app->scene_manager, UHFSceneStart));
  22. view_dispatcher_switch_to_view(uhf_app->view_dispatcher, UHFViewMenu);
  23. }
  24. bool uhf_scene_start_on_event(void* ctx, SceneManagerEvent event) {
  25. UHFApp* uhf_app = ctx;
  26. bool consumed = false;
  27. if(event.type == SceneManagerEventTypeCustom) {
  28. if(event.event == SubmenuIndexRead) {
  29. scene_manager_set_scene_state(uhf_app->scene_manager, UHFSceneStart, SubmenuIndexRead);
  30. scene_manager_next_scene(uhf_app->scene_manager, UHFSceneReadTag);
  31. consumed = true;
  32. } else if(event.event == SubmenuIndexSaved) {
  33. // Explicitly save state so that the correct item is
  34. // reselected if the user cancels loading a file.
  35. scene_manager_set_scene_state(
  36. uhf_app->scene_manager, UHFSceneStart, SubmenuIndexSaved);
  37. scene_manager_next_scene(uhf_app->scene_manager, UHFSceneFileSelect);
  38. consumed = true;
  39. } else if(event.event == SubmenuIndexSettings) {
  40. scene_manager_set_scene_state(
  41. uhf_app->scene_manager, UHFSceneStart, SubmenuIndexSettings);
  42. scene_manager_next_scene(uhf_app->scene_manager, UHFSceneSettings);
  43. consumed = true;
  44. }
  45. }
  46. return consumed;
  47. }
  48. void uhf_scene_start_on_exit(void* ctx) {
  49. UHFApp* uhf_app = ctx;
  50. submenu_reset(uhf_app->submenu);
  51. }