scene_main_menu.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #include "flipper.h"
  2. #include "protocols.h"
  3. #include "app_state.h"
  4. #include "scenes.h"
  5. #include "scene_main_menu.h"
  6. /* main menu scene */
  7. static LWCMainMenuEvent protocol_event[] = {LWCMainMenuSelectDCF77, LWCMainMenuSelectMSF};
  8. /** main menu callback - sends custom events to the scene manager based on the selection */
  9. void lwc_menu_callback(void* context, uint32_t index) {
  10. App* app = context;
  11. switch(index) {
  12. case LWCMainMenuDCF77:
  13. scene_manager_handle_custom_event(app->scene_manager, LWCMainMenuSelectDCF77);
  14. break;
  15. case LWCMainMenuMSF:
  16. scene_manager_handle_custom_event(app->scene_manager, LWCMainMenuSelectMSF);
  17. break;
  18. case LWCMainMenuInfo:
  19. scene_manager_handle_custom_event(app->scene_manager, LWCMainMenuSelectInfo);
  20. break;
  21. case LWCMainMenuAbout:
  22. scene_manager_handle_custom_event(app->scene_manager, LWCMainMenuSelectAbout);
  23. break;
  24. }
  25. }
  26. /** main menu scene - resets the submenu, and gives it content, callbacks and selection enums */
  27. void lwc_main_menu_scene_on_enter(void* context) {
  28. App* app = context;
  29. if(submenu_get_selected_item(app->main_menu) == 0) {
  30. for(uint8_t i = 0; i < __lwc_number_of_protocols; i++) {
  31. submenu_add_item(
  32. app->main_menu,
  33. get_protocol_name((LWCType)(i)),
  34. protocol_event[i],
  35. lwc_menu_callback,
  36. app);
  37. }
  38. submenu_add_item(
  39. app->main_menu, "General infos", LWCMainMenuSelectInfo, lwc_menu_callback, app);
  40. submenu_add_item(app->main_menu, "About", LWCMainMenuSelectAbout, lwc_menu_callback, app);
  41. }
  42. view_dispatcher_switch_to_view(app->view_dispatcher, LWCMainMenuView);
  43. }
  44. /** main menu event handler - switches scene based on the event */
  45. bool lwc_main_menu_scene_on_event(void* context, SceneManagerEvent event) {
  46. App* app = context;
  47. bool consumed = false;
  48. switch(event.type) {
  49. case SceneManagerEventTypeCustom:
  50. switch(event.event) {
  51. case LWCMainMenuSelectDCF77:
  52. app_init_lwc(app, DCF77);
  53. scene_manager_next_scene(app->scene_manager, LWCSubMenuScene);
  54. consumed = true;
  55. break;
  56. case LWCMainMenuSelectMSF:
  57. app_init_lwc(app, MSF);
  58. scene_manager_next_scene(app->scene_manager, LWCSubMenuScene);
  59. consumed = true;
  60. break;
  61. case LWCMainMenuSelectInfo:
  62. scene_manager_next_scene(app->scene_manager, LWCInfoScene);
  63. consumed = true;
  64. break;
  65. case LWCMainMenuSelectAbout:
  66. scene_manager_next_scene(app->scene_manager, LWCAboutScene);
  67. consumed = true;
  68. break;
  69. }
  70. break;
  71. default:
  72. consumed = false;
  73. break;
  74. }
  75. return consumed;
  76. }
  77. void lwc_main_menu_scene_on_exit(void* context) {
  78. App* app = context;
  79. if(submenu_get_selected_item(app->main_menu) == 0) {
  80. submenu_reset(app->main_menu);
  81. }
  82. }