diff --git a/applications/services/gui/modules/variable_item_list.c b/applications/services/gui/modules/variable_item_list.c index 423ab3179..9b22ac2f0 100644 --- a/applications/services/gui/modules/variable_item_list.c +++ b/applications/services/gui/modules/variable_item_list.c @@ -7,7 +7,7 @@ #include struct VariableItem { - const char* label; + FuriString* label; uint8_t current_value_index; FuriString* current_value_text; uint8_t values_count; @@ -81,9 +81,9 @@ static void variable_item_list_draw_callback(Canvas* canvas, void* _model) { if(item->current_value_index == 0 && furi_string_empty(item->current_value_text)) { // Only left text, no right text - canvas_draw_str(canvas, 6, item_text_y, item->label); + canvas_draw_str(canvas, 6, item_text_y, furi_string_get_cstr(item->label)); } else { - elements_scrollable_text_line_str( + elements_scrollable_text_line_centered( canvas, 6, item_text_y, 66, item->label, scroll_counter, false, false); } @@ -420,6 +420,7 @@ void variable_item_list_free(VariableItemList* variable_item_list) { VariableItemArray_it_t it; for(VariableItemArray_it(it, model->items); !VariableItemArray_end_p(it); VariableItemArray_next(it)) { + furi_string_free(VariableItemArray_ref(it)->label); furi_string_free(VariableItemArray_ref(it)->current_value_text); furi_string_free(VariableItemArray_ref(it)->locked_message); } @@ -444,6 +445,7 @@ void variable_item_list_reset(VariableItemList* variable_item_list) { VariableItemArray_it_t it; for(VariableItemArray_it(it, model->items); !VariableItemArray_end_p(it); VariableItemArray_next(it)) { + furi_string_free(VariableItemArray_ref(it)->label); furi_string_free(VariableItemArray_ref(it)->current_value_text); furi_string_free(VariableItemArray_ref(it)->locked_message); } @@ -472,7 +474,7 @@ VariableItem* variable_item_list_add( VariableItemListModel * model, { item = VariableItemArray_push_new(model->items); - item->label = label; + item->label = furi_string_alloc_set(label); item->values_count = values_count; item->change_callback = change_callback; item->context = context; @@ -510,6 +512,10 @@ void variable_item_set_values_count(VariableItem* item, uint8_t values_count) { item->values_count = values_count; } +void variable_item_set_item_label(VariableItem* item, const char* label) { + furi_string_set(item->label, label); +} + void variable_item_set_current_value_text(VariableItem* item, const char* current_value_text) { furi_string_set(item->current_value_text, current_value_text); } diff --git a/applications/services/gui/modules/variable_item_list.h b/applications/services/gui/modules/variable_item_list.h index db8b1788f..b12fb856f 100644 --- a/applications/services/gui/modules/variable_item_list.h +++ b/applications/services/gui/modules/variable_item_list.h @@ -88,6 +88,13 @@ void variable_item_set_current_value_index(VariableItem* item, uint8_t current_v */ void variable_item_set_values_count(VariableItem* item, uint8_t values_count); +/** Set number of values for item + * + * @param item VariableItem* instance + * @param label The new label text + */ +void variable_item_set_item_label(VariableItem* item, const char* label); + /** Set item current selected text * * @param item VariableItem* instance diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 7f2e709e8..71df46e11 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -3135,6 +3135,7 @@ Function,+,variable_item_list_set_enter_callback,void,"VariableItemList*, Variab Function,+,variable_item_list_set_selected_item,void,"VariableItemList*, uint8_t" Function,+,variable_item_set_current_value_index,void,"VariableItem*, uint8_t" Function,+,variable_item_set_current_value_text,void,"VariableItem*, const char*" +Function,+,variable_item_set_item_label,void,"VariableItem*, const char*" Function,+,variable_item_set_locked,void,"VariableItem*, _Bool, const char*" Function,+,variable_item_set_values_count,void,"VariableItem*, uint8_t" Function,-,vasiprintf,int,"char**, const char*, __gnuc_va_list"