mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-13 14:48:35 -07:00
Add headers to submenu
This commit is contained in:
@@ -21,8 +21,10 @@ void nfc_scene_felica_info_select_on_enter(void* context) {
|
|||||||
submenu_add_item(submenu, "[Actions]", 0, nfc_scene_felica_info_select_submenu_callback, nfc);
|
submenu_add_item(submenu, "[Actions]", 0, nfc_scene_felica_info_select_submenu_callback, nfc);
|
||||||
uint8_t i = 1;
|
uint8_t i = 1;
|
||||||
if(state->selected_system == NULL) {
|
if(state->selected_system == NULL) {
|
||||||
|
submenu_set_header(submenu, "Systems");
|
||||||
FelicaSystemList_it_t it;
|
FelicaSystemList_it_t it;
|
||||||
for(FelicaSystemList_it(it, data->systems); !FelicaSystemList_end_p(it); FelicaSystemList_next(it)) {
|
for(FelicaSystemList_it(it, data->systems); !FelicaSystemList_end_p(it);
|
||||||
|
FelicaSystemList_next(it)) {
|
||||||
FelicaSystem* current_system = *FelicaSystemList_ref(it);
|
FelicaSystem* current_system = *FelicaSystemList_ref(it);
|
||||||
FuriString* system_name = felica_get_system_name(current_system);
|
FuriString* system_name = felica_get_system_name(current_system);
|
||||||
submenu_add_item(
|
submenu_add_item(
|
||||||
@@ -33,21 +35,48 @@ void nfc_scene_felica_info_select_on_enter(void* context) {
|
|||||||
nfc);
|
nfc);
|
||||||
FuriStringStack_push_back(state->strings, system_name);
|
FuriStringStack_push_back(state->strings, system_name);
|
||||||
}
|
}
|
||||||
} else if(FelicaAreaPath_size(state->selected_areas) == 0) {
|
} else {
|
||||||
FelicaArea* area_0 = &state->selected_system->root_area;
|
FelicaSystem* system = state->selected_system;
|
||||||
|
FuriString* header = furi_string_alloc_printf("%04X/", system->code);
|
||||||
|
|
||||||
|
FelicaArea* area = &system->root_area;
|
||||||
|
if(FelicaAreaPath_size(state->selected_areas) > 0) {
|
||||||
|
FelicaAreaPath_it_t it;
|
||||||
|
for(FelicaAreaPath_it(it, state->selected_areas); !FelicaAreaPath_end_p(it);
|
||||||
|
FelicaAreaPath_next(it)) {
|
||||||
|
FelicaArea* ancestor = *FelicaAreaPath_ref(it);
|
||||||
|
furi_string_cat_printf(header, "%d/", ancestor->number);
|
||||||
|
}
|
||||||
|
area = *FelicaAreaPath_back(state->selected_areas);
|
||||||
|
}
|
||||||
|
furi_string_cat(header, "Areas");
|
||||||
|
|
||||||
|
submenu_set_header(submenu, furi_string_get_cstr(header));
|
||||||
|
FuriStringStack_push_back(state->strings, header);
|
||||||
|
|
||||||
FelicaNodeList_it_t it;
|
FelicaNodeList_it_t it;
|
||||||
for(FelicaNodeList_it(it, area_0->nodes); !FelicaNodeList_end_p(it); FelicaNodeList_next(it)) {
|
for(FelicaNodeList_it(it, area->nodes); !FelicaNodeList_end_p(it);
|
||||||
|
FelicaNodeList_next(it)) {
|
||||||
FelicaNode* node = *FelicaNodeList_ref(it);
|
FelicaNode* node = *FelicaNodeList_ref(it);
|
||||||
if(node->type == FelicaNodeTypeArea) {
|
if(node->type == FelicaNodeTypeArea) {
|
||||||
FuriString* area_name = furi_string_alloc_printf("Area %d", node->ptr.area->number);
|
FuriString* area_name =
|
||||||
|
furi_string_alloc_printf("Area %d", node->ptr.area->number);
|
||||||
submenu_add_item(
|
submenu_add_item(
|
||||||
submenu, furi_string_get_cstr(area_name), i++, nfc_scene_felica_info_select_submenu_callback, nfc);
|
submenu,
|
||||||
|
furi_string_get_cstr(area_name),
|
||||||
|
i++,
|
||||||
|
nfc_scene_felica_info_select_submenu_callback,
|
||||||
|
nfc);
|
||||||
FuriStringStack_push_back(state->strings, area_name);
|
FuriStringStack_push_back(state->strings, area_name);
|
||||||
} else {
|
} else {
|
||||||
uint16_t service_code = node->ptr.service->number << 6;
|
uint16_t service_code = node->ptr.service->number << 6;
|
||||||
FuriString* service_name = furi_string_alloc_printf("Service %04X", service_code);
|
FuriString* service_name = furi_string_alloc_printf("Service %04X", service_code);
|
||||||
submenu_add_item(
|
submenu_add_item(
|
||||||
submenu, furi_string_get_cstr(service_name), i++, nfc_scene_felica_info_select_submenu_callback, nfc);
|
submenu,
|
||||||
|
furi_string_get_cstr(service_name),
|
||||||
|
i++,
|
||||||
|
nfc_scene_felica_info_select_submenu_callback,
|
||||||
|
nfc);
|
||||||
FuriStringStack_push_back(state->strings, service_name);
|
FuriStringStack_push_back(state->strings, service_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -82,7 +111,8 @@ bool nfc_scene_felica_info_select_on_event(void* context, SceneManagerEvent even
|
|||||||
} else {
|
} else {
|
||||||
FelicaNode* selected_node = NULL;
|
FelicaNode* selected_node = NULL;
|
||||||
if(FelicaAreaPath_size(state->selected_areas) == 0) {
|
if(FelicaAreaPath_size(state->selected_areas) == 0) {
|
||||||
selected_node = *FelicaNodeList_get(state->selected_system->root_area.nodes, index);
|
selected_node =
|
||||||
|
*FelicaNodeList_get(state->selected_system->root_area.nodes, index);
|
||||||
} else {
|
} else {
|
||||||
FelicaArea* current_area = *FelicaAreaPath_back(state->selected_areas);
|
FelicaArea* current_area = *FelicaAreaPath_back(state->selected_areas);
|
||||||
selected_node = *FelicaNodeList_get(current_area->nodes, index);
|
selected_node = *FelicaNodeList_get(current_area->nodes, index);
|
||||||
@@ -117,7 +147,8 @@ void nfc_scene_felica_info_select_on_exit(void* context) {
|
|||||||
// Clear view
|
// Clear view
|
||||||
FelicaAreaPath_clear(nfc->felica_select.selected_areas);
|
FelicaAreaPath_clear(nfc->felica_select.selected_areas);
|
||||||
FuriStringStack_it_t it;
|
FuriStringStack_it_t it;
|
||||||
for(FuriStringStack_it(it, nfc->felica_select.strings); !FuriStringStack_end_p(it); FuriStringStack_next(it)) {
|
for(FuriStringStack_it(it, nfc->felica_select.strings); !FuriStringStack_end_p(it);
|
||||||
|
FuriStringStack_next(it)) {
|
||||||
furi_string_free(*FuriStringStack_ref(it));
|
furi_string_free(*FuriStringStack_ref(it));
|
||||||
}
|
}
|
||||||
submenu_reset(nfc->submenu);
|
submenu_reset(nfc->submenu);
|
||||||
|
|||||||
Reference in New Issue
Block a user