scene_main_menu.c 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include "flipper.h"
  2. #include "app_state.h"
  3. #include "scenes.h"
  4. #include "scene_main_menu.h"
  5. /* main menu scene */
  6. /** main menu callback - sends custom events to the scene manager based on the selection */
  7. void resistors_menu_callback(void* context, uint32_t index) {
  8. App* app = context;
  9. switch(index) {
  10. case ResistorsMainMenuSelectionR3:
  11. scene_manager_handle_custom_event(
  12. app->scene_manager, ResistorsMainMenuSceneSelectionEventR3);
  13. break;
  14. case ResistorsMainMenuSelectionR4:
  15. scene_manager_handle_custom_event(
  16. app->scene_manager, ResistorsMainMenuSceneSelectionEventR4);
  17. break;
  18. case ResistorsMainMenuSelectionR5:
  19. scene_manager_handle_custom_event(
  20. app->scene_manager, ResistorsMainMenuSceneSelectionEventR5);
  21. break;
  22. case ResistorsMainMenuSelectionR6:
  23. scene_manager_handle_custom_event(
  24. app->scene_manager, ResistorsMainMenuSceneSelectionEventR6);
  25. break;
  26. }
  27. }
  28. /** main menu scene - resets the submenu, and gives it content, callbacks and selection enums */
  29. void resistors_main_menu_scene_on_enter(void* context) {
  30. App* app = context;
  31. submenu_reset(app->submenu);
  32. submenu_set_header(app->submenu, "Resistors");
  33. submenu_add_item(
  34. app->submenu, "3-bar resistor", ResistorsMainMenuSelectionR3, resistors_menu_callback, app);
  35. submenu_add_item(
  36. app->submenu, "4-bar resistor", ResistorsMainMenuSelectionR4, resistors_menu_callback, app);
  37. submenu_add_item(
  38. app->submenu, "5-bar resistor", ResistorsMainMenuSelectionR5, resistors_menu_callback, app);
  39. submenu_add_item(
  40. app->submenu, "6-bar resistor", ResistorsMainMenuSelectionR6, resistors_menu_callback, app);
  41. view_dispatcher_switch_to_view(app->view_dispatcher, ResistorsSubmenuView);
  42. }
  43. /** main menu event handler - switches scene based on the event */
  44. bool resistors_main_menu_scene_on_event(void* context, SceneManagerEvent event) {
  45. App* app = context;
  46. bool consumed = false;
  47. switch(event.type) {
  48. case SceneManagerEventTypeCustom:
  49. switch(event.event) {
  50. case ResistorsMainMenuSceneSelectionEventR3:
  51. app_init_resistor(app, R3);
  52. scene_manager_next_scene(app->scene_manager, ResistorsEditScene);
  53. consumed = true;
  54. break;
  55. case ResistorsMainMenuSceneSelectionEventR4:
  56. app_init_resistor(app, R4);
  57. scene_manager_next_scene(app->scene_manager, ResistorsEditScene);
  58. consumed = true;
  59. break;
  60. case ResistorsMainMenuSceneSelectionEventR5:
  61. app_init_resistor(app, R5);
  62. scene_manager_next_scene(app->scene_manager, ResistorsEditScene);
  63. consumed = true;
  64. break;
  65. case ResistorsMainMenuSceneSelectionEventR6:
  66. app_init_resistor(app, R6);
  67. scene_manager_next_scene(app->scene_manager, ResistorsEditScene);
  68. consumed = true;
  69. break;
  70. }
  71. break;
  72. default: // eg. SceneManagerEventTypeBack, SceneManagerEventTypeTick
  73. consumed = false;
  74. break;
  75. }
  76. return consumed;
  77. }
  78. void resistors_main_menu_scene_on_exit(void* context) {
  79. App* app = context;
  80. submenu_reset(app->submenu);
  81. }