mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-07-27 01:58:09 -07:00
Add back loader_show_settings
This commit is contained in:
@@ -12,16 +12,18 @@
|
||||
|
||||
struct LoaderMenu {
|
||||
FuriThread* thread;
|
||||
bool settings;
|
||||
void (*closed_cb)(void*);
|
||||
void* context;
|
||||
};
|
||||
|
||||
static int32_t loader_menu_thread(void* p);
|
||||
|
||||
LoaderMenu* loader_menu_alloc(void (*closed_cb)(void*), void* context) {
|
||||
LoaderMenu* loader_menu_alloc(void (*closed_cb)(void*), void* context, bool settings) {
|
||||
LoaderMenu* loader_menu = malloc(sizeof(LoaderMenu));
|
||||
loader_menu->closed_cb = closed_cb;
|
||||
loader_menu->context = context;
|
||||
loader_menu->settings = settings;
|
||||
loader_menu->thread = furi_thread_alloc_ex(TAG, 1024, loader_menu_thread, loader_menu);
|
||||
furi_thread_start(loader_menu->thread);
|
||||
return loader_menu;
|
||||
@@ -44,6 +46,7 @@ typedef struct {
|
||||
ViewDispatcher* view_dispatcher;
|
||||
Menu* primary_menu;
|
||||
Submenu* settings_menu;
|
||||
bool settings;
|
||||
} LoaderMenuApp;
|
||||
|
||||
static void loader_menu_start(const char* name) {
|
||||
@@ -123,37 +126,42 @@ static LoaderMenuApp* loader_menu_app_alloc(LoaderMenu* loader_menu) {
|
||||
LoaderMenuApp* app = malloc(sizeof(LoaderMenuApp));
|
||||
app->gui = furi_record_open(RECORD_GUI);
|
||||
app->view_dispatcher = view_dispatcher_alloc();
|
||||
app->primary_menu = menu_alloc();
|
||||
app->settings_menu = submenu_alloc();
|
||||
|
||||
loader_menu_build_menu(app, loader_menu);
|
||||
loader_menu_build_submenu(app, loader_menu);
|
||||
app->settings = loader_menu->settings;
|
||||
|
||||
// Primary menu
|
||||
View* primary_view = menu_get_view(app->primary_menu);
|
||||
view_set_context(primary_view, app->primary_menu);
|
||||
view_set_previous_callback(primary_view, loader_menu_exit);
|
||||
view_dispatcher_add_view(app->view_dispatcher, LoaderMenuViewPrimary, primary_view);
|
||||
if(!app->settings) {
|
||||
app->primary_menu = menu_alloc();
|
||||
loader_menu_build_menu(app, loader_menu);
|
||||
View* primary_view = menu_get_view(app->primary_menu);
|
||||
view_set_context(primary_view, app->primary_menu);
|
||||
view_set_previous_callback(primary_view, loader_menu_exit);
|
||||
view_dispatcher_add_view(app->view_dispatcher, LoaderMenuViewPrimary, primary_view);
|
||||
}
|
||||
|
||||
// Settings menu
|
||||
app->settings_menu = submenu_alloc();
|
||||
loader_menu_build_submenu(app, loader_menu);
|
||||
View* settings_view = submenu_get_view(app->settings_menu);
|
||||
view_set_context(settings_view, app->settings_menu);
|
||||
view_set_previous_callback(settings_view, loader_menu_switch_to_primary);
|
||||
view_set_previous_callback(settings_view, app->settings ? loader_menu_exit : loader_menu_switch_to_primary);
|
||||
view_dispatcher_add_view(app->view_dispatcher, LoaderMenuViewSettings, settings_view);
|
||||
|
||||
view_dispatcher_enable_queue(app->view_dispatcher);
|
||||
view_dispatcher_switch_to_view(app->view_dispatcher, LoaderMenuViewPrimary);
|
||||
view_dispatcher_switch_to_view(app->view_dispatcher, app->settings ? LoaderMenuViewSettings : LoaderMenuViewPrimary);
|
||||
|
||||
return app;
|
||||
}
|
||||
|
||||
static void loader_menu_app_free(LoaderMenuApp* app) {
|
||||
view_dispatcher_remove_view(app->view_dispatcher, LoaderMenuViewPrimary);
|
||||
if(!app->settings) {
|
||||
view_dispatcher_remove_view(app->view_dispatcher, LoaderMenuViewPrimary);
|
||||
menu_free(app->primary_menu);
|
||||
}
|
||||
view_dispatcher_remove_view(app->view_dispatcher, LoaderMenuViewSettings);
|
||||
submenu_free(app->settings_menu);
|
||||
|
||||
view_dispatcher_free(app->view_dispatcher);
|
||||
|
||||
menu_free(app->primary_menu);
|
||||
submenu_free(app->settings_menu);
|
||||
furi_record_close(RECORD_GUI);
|
||||
free(app);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user