[FL-1465] Archive application bug fixes. Gui: update TextInput API. (#530)
* Update MLib to latest master. * Archive: update string_t usage, add unsafe usage TODO, change model type to blocking and fix invalid usage. * Gui: update text_input API and it's usage. * fix blocking model issues * fix unsafe string_t usage Co-authored-by: Igor Baranov <bedtimeposts@gmail.com> Co-authored-by: its your bedtime <23366927+itsyourbedtime@users.noreply.github.com>
This commit is contained in:
		| @@ -14,8 +14,8 @@ typedef struct { | ||||
|  | ||||
| typedef struct { | ||||
|     const char* header; | ||||
|     char* text; | ||||
|     uint8_t max_text_length; | ||||
|     char* text_buffer; | ||||
|     size_t text_buffer_size; | ||||
|  | ||||
|     TextInputCallback callback; | ||||
|     void* callback_context; | ||||
| @@ -128,19 +128,19 @@ static const char char_to_uppercase(const char letter) { | ||||
| } | ||||
|  | ||||
| static void text_input_backspace_cb(TextInputModel* model) { | ||||
|     uint8_t text_length = strlen(model->text); | ||||
|     uint8_t text_length = strlen(model->text_buffer); | ||||
|     if(text_length > 0) { | ||||
|         model->text[text_length - 1] = 0; | ||||
|         model->text_buffer[text_length - 1] = 0; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void text_input_view_draw_callback(Canvas* canvas, void* _model) { | ||||
|     TextInputModel* model = _model; | ||||
|     uint8_t text_length = strlen(model->text); | ||||
|     uint8_t text_length = strlen(model->text_buffer); | ||||
|     uint8_t needed_string_width = canvas_width(canvas) - 8; | ||||
|     uint8_t start_pos = 4; | ||||
|  | ||||
|     char* text = model->text; | ||||
|     const char* text = model->text_buffer; | ||||
|  | ||||
|     canvas_clear(canvas); | ||||
|     canvas_set_color(canvas, ColorBlack); | ||||
| @@ -286,20 +286,20 @@ static void text_input_handle_ok(TextInput* text_input) { | ||||
|     with_view_model( | ||||
|         text_input->view, (TextInputModel * model) { | ||||
|             char selected = get_selected_char(model); | ||||
|             uint8_t text_length = strlen(model->text); | ||||
|             uint8_t text_length = strlen(model->text_buffer); | ||||
|  | ||||
|             if(selected == ENTER_KEY) { | ||||
|                 if(model->callback != 0 && text_length > 0) { | ||||
|                     model->callback(model->callback_context, model->text); | ||||
|                     model->callback(model->callback_context); | ||||
|                 } | ||||
|             } else if(selected == BACKSPACE_KEY) { | ||||
|                 text_input_backspace_cb(model); | ||||
|             } else if(text_length < model->max_text_length) { | ||||
|             } else if(text_length < (model->text_buffer_size - 1)) { | ||||
|                 if(text_length == 0 && char_is_lowercase(selected)) { | ||||
|                     selected = char_to_uppercase(selected); | ||||
|                 } | ||||
|                 model->text[text_length] = selected; | ||||
|                 model->text[text_length + 1] = 0; | ||||
|                 model->text_buffer[text_length] = selected; | ||||
|                 model->text_buffer[text_length + 1] = 0; | ||||
|             } | ||||
|             return true; | ||||
|         }); | ||||
| @@ -361,7 +361,7 @@ TextInput* text_input_alloc() { | ||||
|  | ||||
|     with_view_model( | ||||
|         text_input->view, (TextInputModel * model) { | ||||
|             model->max_text_length = 0; | ||||
|             model->text_buffer_size = 0; | ||||
|             model->header = ""; | ||||
|             model->selected_row = 0; | ||||
|             model->selected_column = 0; | ||||
| @@ -386,14 +386,14 @@ void text_input_set_result_callback( | ||||
|     TextInput* text_input, | ||||
|     TextInputCallback callback, | ||||
|     void* callback_context, | ||||
|     char* text, | ||||
|     uint8_t max_text_length) { | ||||
|     char* text_buffer, | ||||
|     size_t text_buffer_size) { | ||||
|     with_view_model( | ||||
|         text_input->view, (TextInputModel * model) { | ||||
|             model->callback = callback; | ||||
|             model->callback_context = callback_context; | ||||
|             model->text = text; | ||||
|             model->max_text_length = max_text_length; | ||||
|             model->text_buffer = text_buffer; | ||||
|             model->text_buffer_size = text_buffer_size; | ||||
|             return true; | ||||
|         }); | ||||
| } | ||||
|   | ||||
| @@ -7,7 +7,7 @@ extern "C" { | ||||
|  | ||||
| /* Text input anonymous structure */ | ||||
| typedef struct TextInput TextInput; | ||||
| typedef void (*TextInputCallback)(void* context, char* text); | ||||
| typedef void (*TextInputCallback)(void* context); | ||||
|  | ||||
| /**  | ||||
|  * @brief Allocate and initialize text input | ||||
| @@ -37,15 +37,15 @@ View* text_input_get_view(TextInput* text_input); | ||||
|  * @param text_input - Text input instance | ||||
|  * @param callback - callback fn | ||||
|  * @param callback_context - callback context | ||||
|  * @param text - text buffer to use | ||||
|  * @param max_text_length - text buffer length | ||||
|  * @param text_buffer - pointer to YOUR text buffer, that we going to modify | ||||
|  * @param text_buffer_size - YOUR text buffer size in bytes. Max string length will be text_buffer_size - 1. | ||||
|  */ | ||||
| void text_input_set_result_callback( | ||||
|     TextInput* text_input, | ||||
|     TextInputCallback callback, | ||||
|     void* callback_context, | ||||
|     char* text, | ||||
|     uint8_t max_text_length); | ||||
|     char* text_buffer, | ||||
|     size_t text_buffer_size); | ||||
|  | ||||
| /**  | ||||
|  * @brief Set text input header text | ||||
|   | ||||
		Reference in New Issue
	
	Block a user