mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-04-26 03:39:58 -07:00
GUI: Menu fix set_selected_item(), add get_selected_item()
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user