From fe7fb27e31e928b03f75bb1e1b4f5410ef18f196 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Fri, 21 Jul 2023 00:03:14 +0100 Subject: [PATCH] Rework mainmenu editor and allow moving apps --- .../xtreme_app_scene_interface_mainmenu.c | 51 +++++++++++++++---- 1 file changed, 42 insertions(+), 9 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 6855bef01..345dd93fb 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 @@ -2,9 +2,10 @@ enum VarItemListIndex { VarItemListIndexMenuStyle, - VarItemListIndexApp, - VarItemListIndexRemoveApp, + VarItemListIndexMenuApp, VarItemListIndexAddApp, + VarItemListIndexMoveApp, + VarItemListIndexRemoveApp, }; void xtreme_app_scene_interface_mainmenu_var_item_list_callback(void* context, uint32_t index) { @@ -20,13 +21,35 @@ static void xtreme_app_scene_interface_mainmenu_wii_menu_changed(VariableItem* i app->save_settings = true; } -static void xtreme_app_scene_interface_mainmenu_app_changed(VariableItem* item) { +static void xtreme_app_scene_interface_mainmenu_menu_app_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); app->mainmenu_app_index = variable_item_get_current_value_index(item); variable_item_set_current_value_text( item, *CharList_get(app->mainmenu_app_labels, app->mainmenu_app_index)); } +static void xtreme_app_scene_interface_mainmenu_move_app_changed(VariableItem* item) { + XtremeApp* app = variable_item_get_context(item); + uint8_t idx = app->mainmenu_app_index; + size_t size = CharList_size(app->mainmenu_app_labels); + uint8_t dir = variable_item_get_current_value_index(item); + if(size >= 2) { + if(dir == 2 && idx != size - 1) { + // Right + CharList_swap_at(app->mainmenu_app_labels, idx, idx + 1); + CharList_swap_at(app->mainmenu_app_exes, idx, idx + 1); + app->mainmenu_app_index++; + } else if(dir == 0 && idx != 0) { + // Left + CharList_swap_at(app->mainmenu_app_labels, idx, idx - 1); + CharList_swap_at(app->mainmenu_app_exes, idx, idx - 1); + app->mainmenu_app_index--; + } + view_dispatcher_send_custom_event(app->view_dispatcher, VarItemListIndexMoveApp); + } + variable_item_set_current_value_index(item, 1); +} + void xtreme_app_scene_interface_mainmenu_on_enter(void* context) { XtremeApp* app = context; XtremeSettings* xtreme_settings = XTREME_SETTINGS(); @@ -41,23 +64,30 @@ void xtreme_app_scene_interface_mainmenu_on_enter(void* context) { item = variable_item_list_add( var_item_list, - "App", + "Menu App", CharList_size(app->mainmenu_app_labels), - xtreme_app_scene_interface_mainmenu_app_changed, + xtreme_app_scene_interface_mainmenu_menu_app_changed, app); - app->mainmenu_app_index = 0; - variable_item_set_current_value_index(item, app->mainmenu_app_index); if(CharList_size(app->mainmenu_app_labels)) { + app->mainmenu_app_index = + CLAMP(app->mainmenu_app_index, CharList_size(app->mainmenu_app_labels) - 1, 0U); variable_item_set_current_value_text( item, *CharList_get(app->mainmenu_app_labels, app->mainmenu_app_index)); } else { + app->mainmenu_app_index = 0; variable_item_set_current_value_text(item, "None"); } - - variable_item_list_add(var_item_list, "Remove App", 0, NULL, app); + variable_item_set_current_value_index(item, app->mainmenu_app_index); variable_item_list_add(var_item_list, "Add App", 0, NULL, app); + item = variable_item_list_add( + var_item_list, "Move App", 3, xtreme_app_scene_interface_mainmenu_move_app_changed, app); + variable_item_set_current_value_text(item, ""); + variable_item_set_current_value_index(item, 1); + + variable_item_list_add(var_item_list, "Remove App", 0, NULL, app); + variable_item_list_set_enter_callback( var_item_list, xtreme_app_scene_interface_mainmenu_var_item_list_callback, app); @@ -84,6 +114,9 @@ bool xtreme_app_scene_interface_mainmenu_on_event(void* context, SceneManagerEve app->mainmenu_app_labels, app->mainmenu_app_index, app->mainmenu_app_index + 1); CharList_remove_v( app->mainmenu_app_exes, app->mainmenu_app_index, app->mainmenu_app_index + 1); + app->mainmenu_app_index--; + /* fall through */ + case VarItemListIndexMoveApp: app->save_mainmenu_apps = true; app->require_reboot = true; scene_manager_previous_scene(app->scene_manager);