starting_scene.c 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #include <gui/modules/menu.h>
  2. #include <gui/modules/popup.h>
  3. #include "starting_scene.h"
  4. #include "../app_context.h"
  5. #include "../tone_gen.h"
  6. #include "../utils/linked_list.h"
  7. // Icons to include
  8. #include "tone_gen_icons.h"
  9. /** indices for menu items */
  10. typedef enum {
  11. ToneGenAppMenuSelection_Play,
  12. ToneGenAppMenuSelection_Adjust
  13. } ToneGenAppMenuSelection;
  14. /** main menu callback - sends a custom event to the scene manager based on the menu selection */
  15. void menu_callback_starting_scene(void* context, uint32_t index) {
  16. FURI_LOG_I(TAG, "menu_callback_starting_scene");
  17. UNUSED(context);
  18. struct AppContext_t* app = context;
  19. switch(index) {
  20. case ToneGenAppMenuSelection_Play:
  21. scene_manager_handle_custom_event(app->scene_manager, ToneGenAppMenuSelection_Play);
  22. break;
  23. case ToneGenAppMenuSelection_Adjust:
  24. scene_manager_handle_custom_event(app->scene_manager, ToneGenAppMenuSelection_Adjust);
  25. break;
  26. }
  27. }
  28. /** resets the menu, gives it content, callbacks and selection enums */
  29. void scene_on_enter_starting_scene(void* context) {
  30. FURI_LOG_I(TAG, "scene_on_enter_starting_scene");
  31. struct AppContext_t* app = (struct AppContext_t*)context;
  32. struct View_t* menuView = app->activeViews[ToneGenAppView_SharedMenu];
  33. // Set the currently active view
  34. menu_reset(menuView->viewData);
  35. // NB. icons are specified as NULL below, because:
  36. // * icons are _always_ animated by the menu
  37. // * the icons provided (&I_one, &I_two) are generated by the build process
  38. // * these icons do not have a framerate (resulting in a division by zero)
  39. menu_add_item(
  40. menuView->viewData,
  41. "Play Tone",
  42. &A_play_button,
  43. ToneGenAppMenuSelection_Play,
  44. menu_callback_starting_scene,
  45. app);
  46. menu_add_item(
  47. menuView->viewData,
  48. "Adjust Tone",
  49. &A_settings_button,
  50. ToneGenAppMenuSelection_Adjust,
  51. menu_callback_starting_scene,
  52. app);
  53. view_dispatcher_switch_to_view(app->view_dispatcher, ToneGenAppView_SharedMenu);
  54. }
  55. /** main menu event handler - switches scene based on the event */
  56. bool scene_on_event_starting_scene(void* context, SceneManagerEvent event) {
  57. FURI_LOG_I(TAG, "scene_on_event_starting_scene");
  58. UNUSED(context);
  59. struct AppContext_t* app = context;
  60. bool consumed = false;
  61. switch(event.type) {
  62. case SceneManagerEventTypeCustom:
  63. switch(event.event) {
  64. case ToneGenAppMenuSelection_Play:
  65. scene_manager_next_scene(app->scene_manager, ToneGenAppScene_Playback);
  66. consumed = true;
  67. break;
  68. case ToneGenAppMenuSelection_Adjust:
  69. scene_manager_next_scene(app->scene_manager, ToneGenAppScene_Settings);
  70. consumed = true;
  71. break;
  72. }
  73. break;
  74. default: // eg. SceneManagerEventTypeBack, SceneManagerEventTypeTick
  75. consumed = false;
  76. break;
  77. }
  78. return consumed;
  79. }
  80. void scene_on_exit_starting_scene(void* context) {
  81. FURI_LOG_I(TAG, "scene_on_exit_starting_scene");
  82. UNUSED(context);
  83. }