mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-04-24 03:29:57 -07:00
GUI: Menu fix set_selected_item(), add get_selected_item()
This commit is contained in:
@@ -25,6 +25,7 @@
|
||||
- Added ADC (analog voltage) support to gpio library (by @jamisonderek)
|
||||
- Support `subghz` custom modulation, support `transmitFile(path, repeats)`, new `end()` function (by @Willy-JL)
|
||||
- FBT: New `SKIP_EXTERNAL` toggle and `EXTRA_EXT_APPS` config option (by @Willy-JL)
|
||||
- GUI: Additional `menu_get_selected_item()` API (by @Willy-JL)
|
||||
- Desktop:
|
||||
- Added TV animation from OFW which was missing (internal on OFW)
|
||||
- OFW: New Intruder animation (by @Astrrra)
|
||||
@@ -106,6 +107,7 @@
|
||||
- Infrared: Correct Samsung.ir CH+ command (by @skyhawkillusions)
|
||||
- FBT: Consistent version/branch info, fix gitorigin (by @Willy-JL)
|
||||
- AssetPacker: Pack pre-compiled icons and fonts too (by @Willy-JL)
|
||||
- GUI: Return user-provided index from `menu_set_selected_item()` like `submenu` equivalent (by @Willy-JL)
|
||||
- JS:
|
||||
- Fix `subghz` RAW files, fix memory leaks, deinit correctly, better error handling (by @Willy-JL)
|
||||
- OFW: Disable logging in mjs +2k free flash (by @hedger)
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -2573,6 +2573,7 @@ Function,+,memset,void*,"void*, int, size_t"
|
||||
Function,+,menu_add_item,void,"Menu*, const char*, const Icon*, uint32_t, MenuItemCallback, void*"
|
||||
Function,+,menu_alloc,Menu*,
|
||||
Function,+,menu_free,void,Menu*
|
||||
Function,+,menu_get_selected_item,uint32_t,Menu*
|
||||
Function,+,menu_get_view,View*,Menu*
|
||||
Function,+,menu_reset,void,Menu*
|
||||
Function,+,menu_set_selected_item,void,"Menu*, uint32_t"
|
||||
|
||||
|
Reference in New Issue
Block a user