Rework mainmenu editor and allow moving apps

This commit is contained in:
Willy-JL
2023-07-21 00:03:14 +01:00
parent b63839865a
commit fe7fb27e31

View File

@@ -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);