Rework menu style to be a enum (more future menus)

This commit is contained in:
Willy-JL
2023-07-24 23:55:04 +02:00
parent 0b6e971318
commit 9e20f2d253
4 changed files with 84 additions and 41 deletions

View File

@@ -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); 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); XtremeApp* app = variable_item_get_context(item);
bool value = variable_item_get_current_value_index(item); uint8_t index = variable_item_get_current_value_index(item);
variable_item_set_current_value_text(item, value ? "Wii Grid" : "App List"); variable_item_set_current_value_text(item, menu_style_names[index]);
XTREME_SETTINGS()->wii_menu = value; XTREME_SETTINGS()->menu_style = index;
app->save_settings = true; app->save_settings = true;
} }
@@ -62,10 +66,13 @@ void xtreme_app_scene_interface_mainmenu_on_enter(void* context) {
VariableItem* item; VariableItem* item;
item = variable_item_list_add( item = variable_item_list_add(
var_item_list, "Menu Style", 2, xtreme_app_scene_interface_mainmenu_wii_menu_changed, app); var_item_list,
variable_item_set_current_value_index(item, xtreme_settings->wii_menu); "Menu Style",
variable_item_set_current_value_text( MenuStyleCount,
item, xtreme_settings->wii_menu ? "Wii Grid" : "App List"); 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); variable_item_list_add(var_item_list, "Reset Menu", 0, NULL, app);

View File

@@ -48,7 +48,8 @@ static void menu_draw_callback(Canvas* canvas, void* _model) {
if(items_count) { if(items_count) {
MenuItem* item; MenuItem* item;
size_t shift_position; size_t shift_position;
if(XTREME_SETTINGS()->wii_menu) { switch(XTREME_SETTINGS()->menu_style) {
case MenuStyleWii: {
FuriString* name = furi_string_alloc(); FuriString* name = furi_string_alloc();
if(items_count > 6 && position >= 4) { if(items_count > 6 && position >= 4) {
if(position >= items_count - 2 + (items_count % 2)) { 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); furi_string_free(name);
} else { break;
}
case MenuStyleList: {
// First line // First line
canvas_set_font(canvas, FontSecondary); canvas_set_font(canvas, FontSecondary);
shift_position = (0 + position + items_count - 1) % items_count; 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 // Frame and scrollbar
elements_frame(canvas, 0, 21, 128 - 5, 21); elements_frame(canvas, 0, 21, 128 - 5, 21);
elements_scrollbar(canvas, position, items_count); elements_scrollbar(canvas, position, items_count);
break;
}
default:
break;
} }
} else { } else {
canvas_draw_str(canvas, 2, 32, "Empty"); canvas_draw_str(canvas, 2, 32, "Empty");
@@ -354,19 +361,24 @@ static void menu_process_up(Menu* menu) {
icon_animation_stop(item->icon); 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)) { if(model->position % 2 || (model->position == count - 1 && count % 2)) {
model->position--; model->position--;
} else { } else {
model->position++; model->position++;
} }
model->scroll_counter = 0; model->scroll_counter = 0;
} else { break;
case MenuStyleList:
if(model->position > 0) { if(model->position > 0) {
model->position--; model->position--;
} else { } else {
model->position = count - 1; model->position = count - 1;
} }
break;
default:
break;
} }
item = MenuItemArray_get(model->items, model->position); item = MenuItemArray_get(model->items, model->position);
@@ -388,19 +400,24 @@ static void menu_process_down(Menu* menu) {
icon_animation_stop(item->icon); 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)) { if(model->position % 2 || (model->position == count - 1 && count % 2)) {
model->position--; model->position--;
} else { } else {
model->position++; model->position++;
} }
model->scroll_counter = 0; model->scroll_counter = 0;
} else { break;
case MenuStyleList:
if(model->position < count - 1) { if(model->position < count - 1) {
model->position++; model->position++;
} else { } else {
model->position = 0; model->position = 0;
} }
break;
default:
break;
} }
item = MenuItemArray_get(model->items, model->position); 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) { static void menu_process_left(Menu* menu) {
if(!XTREME_SETTINGS()->wii_menu) return; if(XTREME_SETTINGS()->menu_style == MenuStyleList) return;
with_view_model( with_view_model(
menu->view, menu->view,
MenuModel * model, MenuModel * model,
{ {
size_t count = MenuItemArray_size(model->items);
MenuItem* item = MenuItemArray_get(model->items, model->position); MenuItem* item = MenuItemArray_get(model->items, model->position);
if(item && item->icon) { if(item && item->icon) {
icon_animation_stop(item->icon); icon_animation_stop(item->icon);
} }
size_t count = MenuItemArray_size(model->items); switch(XTREME_SETTINGS()->menu_style) {
if(model->position < 2) { case MenuStyleWii:
if(count % 2) { if(model->position < 2) {
model->position = count - 1; if(count % 2) {
model->position = count - 1;
} else {
model->position = count - 2 + model->position % 2;
}
} else { } else {
model->position = count - 2 + model->position % 2; model->position -= 2;
} }
} else { model->scroll_counter = 0;
model->position -= 2; break;
default:
break;
} }
model->scroll_counter = 0;
item = MenuItemArray_get(model->items, model->position); item = MenuItemArray_get(model->items, model->position);
if(item && item->icon) { if(item && item->icon) {
@@ -443,32 +466,38 @@ static void menu_process_left(Menu* menu) {
} }
static void menu_process_right(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( with_view_model(
menu->view, menu->view,
MenuModel * model, MenuModel * model,
{ {
size_t count = MenuItemArray_size(model->items);
MenuItem* item = MenuItemArray_get(model->items, model->position); MenuItem* item = MenuItemArray_get(model->items, model->position);
if(item && item->icon) { if(item && item->icon) {
icon_animation_stop(item->icon); icon_animation_stop(item->icon);
} }
size_t count = MenuItemArray_size(model->items); switch(XTREME_SETTINGS()->menu_style) {
if(count % 2) { case MenuStyleWii:
if(model->position == count - 1) { if(count % 2) {
model->position = 0; if(model->position == count - 1) {
} else if(model->position == count - 2) { model->position = 0;
model->position = count - 1; } else if(model->position == count - 2) {
model->position = count - 1;
} else {
model->position += 2;
}
} else { } else {
model->position += 2; model->position += 2;
if(model->position >= count) {
model->position = model->position % 2;
}
} }
} else { model->scroll_counter = 0;
model->position += 2; break;
if(model->position >= count) { default:
model->position = model->position % 2; break;
}
} }
model->scroll_counter = 0;
item = MenuItemArray_get(model->items, model->position); item = MenuItemArray_get(model->items, model->position);
if(item && item->icon) { if(item && item->icon) {

View File

@@ -10,7 +10,7 @@ XtremeSettings xtreme_settings = {
.cycle_anims = 0, // Meta.txt .cycle_anims = 0, // Meta.txt
.unlock_anims = false, // OFF .unlock_anims = false, // OFF
.fallback_anim = true, // ON .fallback_anim = true, // ON
.wii_menu = true, // ON .menu_style = MenuStyleWii, // Wii
.lock_on_boot = false, // OFF .lock_on_boot = false, // OFF
.bad_pins_format = false, // OFF .bad_pins_format = false, // OFF
.allow_locked_rpc_commands = false, // OFF .allow_locked_rpc_commands = false, // OFF
@@ -68,8 +68,8 @@ void XTREME_SETTINGS_LOAD() {
x->fallback_anim = b; x->fallback_anim = b;
} }
flipper_format_rewind(file); flipper_format_rewind(file);
if(flipper_format_read_bool(file, "wii_menu", &b, 1)) { if(flipper_format_read_uint32(file, "menu_style", &u, 1)) {
x->wii_menu = b; x->menu_style = CLAMP(u, MenuStyleCount - 1U, 0U);
} }
flipper_format_rewind(file); flipper_format_rewind(file);
if(flipper_format_read_bool(file, "bad_pins_format", &b, 1)) { 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_int32(file, "cycle_anims", &x->cycle_anims, 1);
flipper_format_write_bool(file, "unlock_anims", &x->unlock_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, "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, "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, "allow_locked_rpc_commands", &x->allow_locked_rpc_commands, 1);
flipper_format_write_bool(file, "lock_on_boot", &x->lock_on_boot, 1); flipper_format_write_bool(file, "lock_on_boot", &x->lock_on_boot, 1);

View File

@@ -24,6 +24,12 @@ typedef enum {
BatteryIconCount, BatteryIconCount,
} BatteryIcon; } BatteryIcon;
typedef enum {
MenuStyleList,
MenuStyleWii,
MenuStyleCount,
} MenuStyle;
typedef struct { typedef struct {
bool is_nsfw; // TODO: replace with packs text support bool is_nsfw; // TODO: replace with packs text support
@@ -32,7 +38,7 @@ typedef struct {
int32_t cycle_anims; int32_t cycle_anims;
bool unlock_anims; bool unlock_anims;
bool fallback_anim; bool fallback_anim;
bool wii_menu; MenuStyle menu_style;
bool lock_on_boot; bool lock_on_boot;
bool bad_pins_format; bool bad_pins_format;
bool allow_locked_rpc_commands; bool allow_locked_rpc_commands;