97 lines
2.9 KiB
C
97 lines
2.9 KiB
C
#include "genie_submenu.h"
|
|
|
|
#include <gui/view_dispatcher.h>
|
|
#include "genie_app.h"
|
|
|
|
#include "genie_config.h"
|
|
|
|
typedef struct GenieApp GenieApp;
|
|
|
|
struct GenieSubmenu {
|
|
Submenu* submenu;
|
|
};
|
|
|
|
typedef enum {
|
|
GenieSubmenuIndexSend,
|
|
GenieSubmenuIndexConfig,
|
|
GenieSubmenuIndexLearn,
|
|
GenieSubmenuIndexAbout,
|
|
} GenieSubmenuIndex;
|
|
|
|
typedef enum {
|
|
GenieViewSubmenu,
|
|
GenieViewSend,
|
|
GenieViewConfig,
|
|
GenieViewLearn,
|
|
GenieViewAbout,
|
|
} GenieView;
|
|
|
|
/**
|
|
* @brief Callback for navigation events
|
|
* @details This function is called when user press back button. We return VIEW_NONE to
|
|
* indicate that we want to exit the application.
|
|
* @param context The context
|
|
* @return next view id
|
|
*/
|
|
uint32_t genie_navigation_submenu_callback(void* context) {
|
|
UNUSED(context);
|
|
return GenieViewSubmenu;
|
|
}
|
|
|
|
/**
|
|
* @brief Callback for navigation events
|
|
* @details This function is called when user press back button. We return VIEW_NONE to
|
|
* indicate that we want to exit the application.
|
|
* @param context The context
|
|
* @return next view id
|
|
*/
|
|
static uint32_t genie_navigation_exit_callback(void* context) {
|
|
UNUSED(context);
|
|
return VIEW_NONE;
|
|
}
|
|
|
|
static void genie_submenu_callback(void* context, uint32_t index) {
|
|
GenieApp* app = (GenieApp*)context;
|
|
ViewDispatcher* view_dispatcher = genie_app_get_view_dispatcher(app);
|
|
switch(index) {
|
|
case GenieSubmenuIndexSend:
|
|
view_dispatcher_switch_to_view(view_dispatcher, GenieViewSend);
|
|
break;
|
|
case GenieSubmenuIndexConfig: {
|
|
view_dispatcher_switch_to_view(view_dispatcher, GenieViewConfig);
|
|
break;
|
|
}
|
|
case GenieSubmenuIndexLearn:
|
|
view_dispatcher_switch_to_view(view_dispatcher, GenieViewLearn);
|
|
break;
|
|
case GenieSubmenuIndexAbout:
|
|
view_dispatcher_switch_to_view(view_dispatcher, GenieViewAbout);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
GenieSubmenu* genie_submenu_alloc(GenieApp* app) {
|
|
GenieSubmenu* genie_submenu = malloc(sizeof(GenieSubmenu));
|
|
Submenu* submenu = submenu_alloc();
|
|
genie_submenu->submenu = submenu;
|
|
submenu_add_item(submenu, "Send", GenieSubmenuIndexSend, genie_submenu_callback, app);
|
|
submenu_add_item(submenu, "Config", GenieSubmenuIndexConfig, genie_submenu_callback, app);
|
|
submenu_add_item(submenu, "Learn", GenieSubmenuIndexLearn, genie_submenu_callback, app);
|
|
submenu_add_item(submenu, "About", GenieSubmenuIndexAbout, genie_submenu_callback, app);
|
|
view_set_previous_callback(submenu_get_view(submenu), genie_navigation_exit_callback);
|
|
return genie_submenu;
|
|
}
|
|
|
|
View* genie_submenu_get_view(GenieSubmenu* genie_submenu) {
|
|
furi_assert(genie_submenu);
|
|
furi_assert(genie_submenu->submenu);
|
|
return submenu_get_view(genie_submenu->submenu);
|
|
}
|
|
|
|
void genie_submenu_free(GenieSubmenu* genie_submenu) {
|
|
submenu_free(genie_submenu->submenu);
|
|
genie_submenu->submenu = NULL;
|
|
free(genie_submenu);
|
|
} |