GUI: Menu fix set_selected_item(), add get_selected_item()

This commit is contained in:
Willy-JL
2024-07-12 23:35:27 +01:00
parent e4db9ec84e
commit ebca3024d9
4 changed files with 72 additions and 14 deletions

View File

@@ -615,6 +615,47 @@ void menu_reset(Menu* menu) {
true);
}
static void menu_set_position(Menu* menu, uint32_t position) {
furi_check(menu);
with_view_model(
menu->view,
MenuModel * model,
{
if(position < MenuItemArray_size(model->items) && position != model->position) {
model->scroll_counter = 0;
MenuItem* item = MenuItemArray_get(model->items, model->position);
icon_animation_stop(item->icon);
item = MenuItemArray_get(model->items, position);
icon_animation_start(item->icon);
model->position = position;
}
},
true);
}
uint32_t menu_get_selected_item(Menu* menu) {
furi_check(menu);
uint32_t selected_item_index = 0;
with_view_model(
menu->view,
MenuModel * model,
{
if(model->position < MenuItemArray_size(model->items)) {
const MenuItem* item = MenuItemArray_cget(model->items, model->position);
selected_item_index = item->index;
}
},
false);
return selected_item_index;
}
void menu_set_selected_item(Menu* menu, uint32_t index) {
furi_check(menu);
@@ -622,17 +663,23 @@ void menu_set_selected_item(Menu* menu, uint32_t index) {
menu->view,
MenuModel * model,
{
if(index < MenuItemArray_size(model->items) && index != model->position) {
model->scroll_counter = 0;
MenuItem* item = MenuItemArray_get(model->items, model->position);
icon_animation_stop(item->icon);
item = MenuItemArray_get(model->items, index);
icon_animation_start(item->icon);
model->position = index;
size_t position = 0;
MenuItemArray_it_t it;
for(MenuItemArray_it(it, model->items); !MenuItemArray_end_p(it);
MenuItemArray_next(it)) {
if(index == MenuItemArray_cref(it)->index) {
break;
}
position++;
}
const size_t items_size = MenuItemArray_size(model->items);
if(position >= items_size) {
position = 0;
}
model->position = position;
},
true);
}
@@ -676,7 +723,7 @@ static void menu_process_up(Menu* menu) {
}
},
false);
menu_set_selected_item(menu, position);
menu_set_position(menu, position);
}
static void menu_process_down(Menu* menu) {
@@ -718,7 +765,7 @@ static void menu_process_down(Menu* menu) {
}
},
false);
menu_set_selected_item(menu, position);
menu_set_position(menu, position);
}
static void menu_process_left(Menu* menu) {
@@ -777,7 +824,7 @@ static void menu_process_left(Menu* menu) {
}
},
false);
menu_set_selected_item(menu, position);
menu_set_position(menu, position);
}
static void menu_process_right(Menu* menu) {
@@ -841,7 +888,7 @@ static void menu_process_right(Menu* menu) {
}
},
false);
menu_set_selected_item(menu, position);
menu_set_position(menu, position);
}
static void menu_process_ok(Menu* menu) {

View File

@@ -61,6 +61,14 @@ void menu_add_item(
*/
void menu_reset(Menu* menu);
/** Get current menu item
*
* @param menu Menu instance
*
* @return Index of the selected item
*/
uint32_t menu_get_selected_item(Menu* menu);
/** Set current menu item
*
* @param menu Menu instance