From 9e20f2d253c995e436d827227f6fda0bd848a76c Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Mon, 24 Jul 2023 23:55:04 +0200 Subject: [PATCH] Rework menu style to be a enum (more future menus) --- .../xtreme_app_scene_interface_mainmenu.c | 23 +++-- applications/services/gui/modules/menu.c | 85 +++++++++++++------ lib/xtreme/settings.c | 9 +- lib/xtreme/xtreme.h | 8 +- 4 files changed, 84 insertions(+), 41 deletions(-) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c index 86aa94544..fc2d81bfa 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c @@ -14,11 +14,15 @@ void xtreme_app_scene_interface_mainmenu_var_item_list_callback(void* context, u view_dispatcher_send_custom_event(app->view_dispatcher, index); } -static void xtreme_app_scene_interface_mainmenu_wii_menu_changed(VariableItem* item) { +const char* const menu_style_names[MenuStyleCount] = { + "List", + "Wii", +}; +static void xtreme_app_scene_interface_mainmenu_menu_style_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); - bool value = variable_item_get_current_value_index(item); - variable_item_set_current_value_text(item, value ? "Wii Grid" : "App List"); - XTREME_SETTINGS()->wii_menu = value; + uint8_t index = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, menu_style_names[index]); + XTREME_SETTINGS()->menu_style = index; app->save_settings = true; } @@ -62,10 +66,13 @@ void xtreme_app_scene_interface_mainmenu_on_enter(void* context) { VariableItem* item; item = variable_item_list_add( - var_item_list, "Menu Style", 2, xtreme_app_scene_interface_mainmenu_wii_menu_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->wii_menu); - variable_item_set_current_value_text( - item, xtreme_settings->wii_menu ? "Wii Grid" : "App List"); + var_item_list, + "Menu Style", + MenuStyleCount, + xtreme_app_scene_interface_mainmenu_menu_style_changed, + app); + variable_item_set_current_value_index(item, xtreme_settings->menu_style); + variable_item_set_current_value_text(item, menu_style_names[xtreme_settings->menu_style]); variable_item_list_add(var_item_list, "Reset Menu", 0, NULL, app); diff --git a/applications/services/gui/modules/menu.c b/applications/services/gui/modules/menu.c index 5dba503ca..43f818d7b 100644 --- a/applications/services/gui/modules/menu.c +++ b/applications/services/gui/modules/menu.c @@ -48,7 +48,8 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { if(items_count) { MenuItem* item; size_t shift_position; - if(XTREME_SETTINGS()->wii_menu) { + switch(XTREME_SETTINGS()->menu_style) { + case MenuStyleWii: { FuriString* name = furi_string_alloc(); if(items_count > 6 && position >= 4) { if(position >= items_count - 2 + (items_count % 2)) { @@ -102,7 +103,9 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { } } furi_string_free(name); - } else { + break; + } + case MenuStyleList: { // First line canvas_set_font(canvas, FontSecondary); shift_position = (0 + position + items_count - 1) % items_count; @@ -149,6 +152,10 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { // Frame and scrollbar elements_frame(canvas, 0, 21, 128 - 5, 21); elements_scrollbar(canvas, position, items_count); + break; + } + default: + break; } } else { canvas_draw_str(canvas, 2, 32, "Empty"); @@ -354,19 +361,24 @@ static void menu_process_up(Menu* menu) { icon_animation_stop(item->icon); } - if(XTREME_SETTINGS()->wii_menu) { + switch(XTREME_SETTINGS()->menu_style) { + case MenuStyleWii: if(model->position % 2 || (model->position == count - 1 && count % 2)) { model->position--; } else { model->position++; } model->scroll_counter = 0; - } else { + break; + case MenuStyleList: if(model->position > 0) { model->position--; } else { model->position = count - 1; } + break; + default: + break; } item = MenuItemArray_get(model->items, model->position); @@ -388,19 +400,24 @@ static void menu_process_down(Menu* menu) { icon_animation_stop(item->icon); } - if(XTREME_SETTINGS()->wii_menu) { + switch(XTREME_SETTINGS()->menu_style) { + case MenuStyleWii: if(model->position % 2 || (model->position == count - 1 && count % 2)) { model->position--; } else { model->position++; } model->scroll_counter = 0; - } else { + break; + case MenuStyleList: if(model->position < count - 1) { model->position++; } else { model->position = 0; } + break; + default: + break; } item = MenuItemArray_get(model->items, model->position); @@ -412,27 +429,33 @@ static void menu_process_down(Menu* menu) { } static void menu_process_left(Menu* menu) { - if(!XTREME_SETTINGS()->wii_menu) return; + if(XTREME_SETTINGS()->menu_style == MenuStyleList) return; with_view_model( menu->view, MenuModel * model, { + size_t count = MenuItemArray_size(model->items); MenuItem* item = MenuItemArray_get(model->items, model->position); if(item && item->icon) { icon_animation_stop(item->icon); } - size_t count = MenuItemArray_size(model->items); - if(model->position < 2) { - if(count % 2) { - model->position = count - 1; + switch(XTREME_SETTINGS()->menu_style) { + case MenuStyleWii: + if(model->position < 2) { + if(count % 2) { + model->position = count - 1; + } else { + model->position = count - 2 + model->position % 2; + } } else { - model->position = count - 2 + model->position % 2; + model->position -= 2; } - } else { - model->position -= 2; + model->scroll_counter = 0; + break; + default: + break; } - model->scroll_counter = 0; item = MenuItemArray_get(model->items, model->position); if(item && item->icon) { @@ -443,32 +466,38 @@ static void menu_process_left(Menu* menu) { } static void menu_process_right(Menu* menu) { - if(!XTREME_SETTINGS()->wii_menu) return; + if(XTREME_SETTINGS()->menu_style == MenuStyleList) return; with_view_model( menu->view, MenuModel * model, { + size_t count = MenuItemArray_size(model->items); MenuItem* item = MenuItemArray_get(model->items, model->position); if(item && item->icon) { icon_animation_stop(item->icon); } - size_t count = MenuItemArray_size(model->items); - if(count % 2) { - if(model->position == count - 1) { - model->position = 0; - } else if(model->position == count - 2) { - model->position = count - 1; + switch(XTREME_SETTINGS()->menu_style) { + case MenuStyleWii: + if(count % 2) { + if(model->position == count - 1) { + model->position = 0; + } else if(model->position == count - 2) { + model->position = count - 1; + } else { + model->position += 2; + } } else { model->position += 2; + if(model->position >= count) { + model->position = model->position % 2; + } } - } else { - model->position += 2; - if(model->position >= count) { - model->position = model->position % 2; - } + model->scroll_counter = 0; + break; + default: + break; } - model->scroll_counter = 0; item = MenuItemArray_get(model->items, model->position); if(item && item->icon) { diff --git a/lib/xtreme/settings.c b/lib/xtreme/settings.c index 4e6080639..b5eb99204 100644 --- a/lib/xtreme/settings.c +++ b/lib/xtreme/settings.c @@ -10,7 +10,7 @@ XtremeSettings xtreme_settings = { .cycle_anims = 0, // Meta.txt .unlock_anims = false, // OFF .fallback_anim = true, // ON - .wii_menu = true, // ON + .menu_style = MenuStyleWii, // Wii .lock_on_boot = false, // OFF .bad_pins_format = false, // OFF .allow_locked_rpc_commands = false, // OFF @@ -68,8 +68,8 @@ void XTREME_SETTINGS_LOAD() { x->fallback_anim = b; } flipper_format_rewind(file); - if(flipper_format_read_bool(file, "wii_menu", &b, 1)) { - x->wii_menu = b; + if(flipper_format_read_uint32(file, "menu_style", &u, 1)) { + x->menu_style = CLAMP(u, MenuStyleCount - 1U, 0U); } flipper_format_rewind(file); if(flipper_format_read_bool(file, "bad_pins_format", &b, 1)) { @@ -181,7 +181,8 @@ void XTREME_SETTINGS_SAVE() { flipper_format_write_int32(file, "cycle_anims", &x->cycle_anims, 1); flipper_format_write_bool(file, "unlock_anims", &x->unlock_anims, 1); flipper_format_write_bool(file, "fallback_anim", &x->fallback_anim, 1); - flipper_format_write_bool(file, "wii_menu", &x->wii_menu, 1); + e = x->menu_style; + flipper_format_write_uint32(file, "menu_style", &e, 1); flipper_format_write_bool(file, "bad_pins_format", &x->bad_pins_format, 1); flipper_format_write_bool(file, "allow_locked_rpc_commands", &x->allow_locked_rpc_commands, 1); flipper_format_write_bool(file, "lock_on_boot", &x->lock_on_boot, 1); diff --git a/lib/xtreme/xtreme.h b/lib/xtreme/xtreme.h index 23fc48adc..6fec84786 100644 --- a/lib/xtreme/xtreme.h +++ b/lib/xtreme/xtreme.h @@ -24,6 +24,12 @@ typedef enum { BatteryIconCount, } BatteryIcon; +typedef enum { + MenuStyleList, + MenuStyleWii, + MenuStyleCount, +} MenuStyle; + typedef struct { bool is_nsfw; // TODO: replace with packs text support @@ -32,7 +38,7 @@ typedef struct { int32_t cycle_anims; bool unlock_anims; bool fallback_anim; - bool wii_menu; + MenuStyle menu_style; bool lock_on_boot; bool bad_pins_format; bool allow_locked_rpc_commands;