// Header file #include "mainmenu.h" // Structures typedef enum { FP_Scene_MainMenu_Event_View, FP_Scene_MainMenu_Event_Create, FP_Scene_MainMenu_Event_Archive, FP_Scene_MainMenu_Event_About } FP_Scene_MainMenu_Event; // Functions void FP_Scene_Callback_MainMenu(void* context, uint32_t index) { // Setting context FP_App* app = context; // Sending it to the scene manager scene_manager_handle_custom_event(app->scene_manager, index); } void FP_Scene_Enter_MainMenu(void* context) { // Setting context FP_App* app = context; // Reset menu for next draw submenu_reset(app->submenu); // Adding items to menu submenu_add_item( app->submenu, "View Passwords", FP_Scene_MainMenu_Event_View, FP_Scene_Callback_MainMenu, app ); submenu_add_item( app->submenu, "Create Password", FP_Scene_MainMenu_Event_Create, FP_Scene_Callback_MainMenu, app ); submenu_add_item( app->submenu, "Archive Actions", FP_Scene_MainMenu_Event_Archive, FP_Scene_Callback_MainMenu, app ); submenu_add_item( app->submenu, "About", FP_Scene_MainMenu_Event_About, FP_Scene_Callback_MainMenu, app ); // Switching to current view view_dispatcher_switch_to_view(app->view_dispatcher, FP_View_Submenu); } void FP_Scene_Exit_MainMenu(void* context) { // Setting context FP_App* app = context; // Reset menu submenu_reset(app->submenu); } bool FP_Scene_Event_MainMenu(void* context, SceneManagerEvent event) { // Setting context FP_App* app = context; bool consumed = false; // Switching based on event if (event.type == SceneManagerEventTypeCustom) { // We consumed it consumed = true; // What to do? switch (event.event) { case FP_Scene_MainMenu_Event_View: scene_manager_next_scene(app->scene_manager, FP_Scene_Overview); break; case FP_Scene_MainMenu_Event_Create: scene_manager_next_scene(app->scene_manager, FP_Scene_Create); break; case FP_Scene_MainMenu_Event_Archive: scene_manager_next_scene(app->scene_manager, FP_Scene_Archive); break; case FP_Scene_MainMenu_Event_About: scene_manager_next_scene(app->scene_manager, FP_Scene_About); break; default: break; } } else { consumed = false; } // Return result return consumed; }