FlippyPass/project/ui/scenes/mainmenu.c

89 lines
No EOL
2.2 KiB
C

// Header file
#include "mainmenu.h"
// Structures
typedef enum {
FP_Scene_MainMenu_Event_View,
FP_Scene_MainMenu_Event_Create,
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,
"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_About:
scene_manager_next_scene(app->scene_manager, FP_Scene_About);
break;
default:
break;
}
} else {
consumed = false;
}
// Return result
return consumed;
}