Gui: change data ownership model in submenu, own text by default (#2217)
* GUI: Refactor submenu to internally use FuriStrings * NFC: Rework DESFIRE dynamic info submenu * GUI: don't mutate label when drawing submenu * Get rid of submenu_add_item_cstr * increase api version * Get rid of submenu_set_header_cstr * rollback api version * Documentation * RFID: use new submenu api Co-authored-by: Sergey Gavrilov <who.just.the.doctor@gmail.com>
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
#include "../lfrfid_i.h"
|
||||
|
||||
typedef struct {
|
||||
FuriString* menu_item_name[LFRFIDProtocolMax];
|
||||
uint32_t line_sel;
|
||||
} SaveTypeCtx;
|
||||
|
||||
@@ -16,25 +15,27 @@ void lfrfid_scene_save_type_on_enter(void* context) {
|
||||
Submenu* submenu = app->submenu;
|
||||
|
||||
SaveTypeCtx* state = malloc(sizeof(SaveTypeCtx));
|
||||
FuriString* protocol_string = furi_string_alloc();
|
||||
for(uint8_t i = 0; i < LFRFIDProtocolMax; i++) {
|
||||
if(strcmp(
|
||||
protocol_dict_get_manufacturer(app->dict, i),
|
||||
protocol_dict_get_name(app->dict, i)) != 0) {
|
||||
state->menu_item_name[i] = furi_string_alloc_printf(
|
||||
furi_string_printf(
|
||||
protocol_string,
|
||||
"%s %s",
|
||||
protocol_dict_get_manufacturer(app->dict, i),
|
||||
protocol_dict_get_name(app->dict, i));
|
||||
} else {
|
||||
state->menu_item_name[i] =
|
||||
furi_string_alloc_printf("%s", protocol_dict_get_name(app->dict, i));
|
||||
furi_string_printf(protocol_string, "%s", protocol_dict_get_name(app->dict, i));
|
||||
}
|
||||
submenu_add_item(
|
||||
submenu,
|
||||
furi_string_get_cstr(state->menu_item_name[i]),
|
||||
furi_string_get_cstr(protocol_string),
|
||||
i,
|
||||
lfrfid_scene_save_type_submenu_callback,
|
||||
app);
|
||||
}
|
||||
furi_string_free(protocol_string);
|
||||
|
||||
submenu_set_selected_item(
|
||||
submenu, scene_manager_get_scene_state(app->scene_manager, LfRfidSceneSaveType));
|
||||
@@ -73,13 +74,7 @@ void lfrfid_scene_save_type_on_exit(void* context) {
|
||||
|
||||
submenu_reset(app->submenu);
|
||||
|
||||
for(uint8_t i = 0; i < LFRFIDProtocolMax; i++) {
|
||||
furi_string_free(state->menu_item_name[i]);
|
||||
}
|
||||
|
||||
uint32_t line_sel = state->line_sel;
|
||||
|
||||
free(state);
|
||||
|
||||
scene_manager_set_scene_state(app->scene_manager, LfRfidSceneSaveType, line_sel);
|
||||
}
|
||||
|
Reference in New Issue
Block a user