Locked menu item fixes

This commit is contained in:
Willy-JL
2023-03-20 21:09:51 +00:00
parent f68cffef8d
commit 19625a5016
2 changed files with 26 additions and 28 deletions

View File

@@ -142,20 +142,20 @@ static void submenu_view_draw_callback(Canvas* canvas, void* _model) {
elements_scrollbar(canvas, model->position, SubmenuItemArray_size(model->items)); elements_scrollbar(canvas, model->position, SubmenuItemArray_size(model->items));
if(model->locked_message_visible) { if(model->locked_message_visible) {
canvas_set_font(canvas, FontSecondary);
canvas_set_color(canvas, ColorWhite); canvas_set_color(canvas, ColorWhite);
canvas_draw_box(canvas, 8, 10, 110, 48); canvas_draw_box(canvas, 8, 10, 110, 48);
canvas_set_color(canvas, ColorBlack); canvas_set_color(canvas, ColorBlack);
canvas_draw_icon(canvas, 10, 14, &I_WarningDolphin_45x42); canvas_draw_icon(canvas, 10, 14, &I_WarningDolphin_45x42);
canvas_draw_rframe(canvas, 8, 8, 112, 50, 3); canvas_draw_rframe(canvas, 8, 8, 112, 50, 3);
canvas_draw_rframe(canvas, 9, 9, 110, 48, 2); canvas_draw_rframe(canvas, 9, 9, 110, 48, 2);
elements_multiline_text( elements_multiline_text_aligned(
canvas, canvas,
62, 84,
20, 32,
AlignCenter,
AlignCenter,
furi_string_get_cstr( furi_string_get_cstr(
SubmenuItemArray_get(model->items, model->position)->locked_message)); SubmenuItemArray_get(model->items, model->position)->locked_message));
canvas_set_font(canvas, FontKeyboard);
} }
} }
@@ -222,7 +222,7 @@ Submenu* submenu_alloc() {
view_set_draw_callback(submenu->view, submenu_view_draw_callback); view_set_draw_callback(submenu->view, submenu_view_draw_callback);
view_set_input_callback(submenu->view, submenu_view_input_callback); view_set_input_callback(submenu->view, submenu_view_input_callback);
submenu->timer = furi_timer_alloc(submenu_timer_callback, FuriTimerTypeOnce, submenu); submenu->locked_timer = furi_timer_alloc(submenu_timer_callback, FuriTimerTypeOnce, submenu);
with_view_model( with_view_model(
submenu->view, submenu->view,
@@ -249,8 +249,8 @@ void submenu_free(Submenu* submenu) {
SubmenuItemArray_clear(model->items); SubmenuItemArray_clear(model->items);
}, },
true); true);
furi_timer_stop(submenu->timer); furi_timer_stop(submenu->locked_timer);
furi_timer_free(submenu->timer); furi_timer_free(submenu->locked_timer);
view_free(submenu->view); view_free(submenu->view);
free(submenu); free(submenu);
} }
@@ -416,7 +416,7 @@ void submenu_process_ok(Submenu* submenu) {
} }
if(item && item->locked) { if(item && item->locked) {
model->locked_message_visible = true; model->locked_message_visible = true;
furi_timer_start(submenu->timer, furi_kernel_get_tick_frequency() * 4); furi_timer_start(submenu->locked_timer, furi_kernel_get_tick_frequency() * 4);
} }
}, },
true); true);

View File

@@ -167,7 +167,19 @@ static bool variable_item_list_input_callback(InputEvent* event, void* context)
furi_assert(variable_item_list); furi_assert(variable_item_list);
bool consumed = false; bool consumed = false;
if(event->type == InputTypeShort) { bool locked_message_visible = false;
with_view_model(
variable_item_list->view,
VariableItemListModel * model,
{ locked_message_visible = model->locked_message_visible; },
false);
if((!(event->type == InputTypePress) && !(event->type == InputTypeRelease)) &&
locked_message_visible) {
with_view_model(
variable_item_list->view, VariableItemListModel * model, { model->locked_message_visible = false; }, true);
consumed = true;
} else if(event->type == InputTypeShort) {
switch(event->key) { switch(event->key) {
case InputKeyUp: case InputKeyUp:
consumed = true; consumed = true;
@@ -222,9 +234,6 @@ void variable_item_list_process_up(VariableItemList* variable_item_list) {
variable_item_list->view, variable_item_list->view,
VariableItemListModel * model, VariableItemListModel * model,
{ {
if(model->locked_message_visible) {
model->locked_message_visible = false;
}
uint8_t items_on_screen = 4; uint8_t items_on_screen = 4;
if(model->position > 0) { if(model->position > 0) {
model->position--; model->position--;
@@ -248,9 +257,6 @@ void variable_item_list_process_down(VariableItemList* variable_item_list) {
variable_item_list->view, variable_item_list->view,
VariableItemListModel * model, VariableItemListModel * model,
{ {
if(model->locked_message_visible) {
model->locked_message_visible = false;
}
uint8_t items_on_screen = 4; uint8_t items_on_screen = 4;
if(model->position < (VariableItemArray_size(model->items) - 1)) { if(model->position < (VariableItemArray_size(model->items) - 1)) {
model->position++; model->position++;
@@ -293,9 +299,7 @@ void variable_item_list_process_left(VariableItemList* variable_item_list) {
VariableItemListModel * model, VariableItemListModel * model,
{ {
VariableItem* item = variable_item_list_get_selected_item(model); VariableItem* item = variable_item_list_get_selected_item(model);
if(model->locked_message_visible) { if(item->locked) {
model->locked_message_visible = false;
} else if(item->locked) {
model->locked_message_visible = true; model->locked_message_visible = true;
furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3); furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3);
} else if(item->current_value_index > 0) { } else if(item->current_value_index > 0) {
@@ -315,9 +319,7 @@ void variable_item_list_process_right(VariableItemList* variable_item_list) {
VariableItemListModel * model, VariableItemListModel * model,
{ {
VariableItem* item = variable_item_list_get_selected_item(model); VariableItem* item = variable_item_list_get_selected_item(model);
if(model->locked_message_visible) { if(item->locked) {
model->locked_message_visible = false;
} else if(item->locked) {
model->locked_message_visible = true; model->locked_message_visible = true;
furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3); furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3);
} else if(item->current_value_index < (item->values_count - 1)) { } else if(item->current_value_index < (item->values_count - 1)) {
@@ -332,23 +334,19 @@ void variable_item_list_process_right(VariableItemList* variable_item_list) {
} }
void variable_item_list_process_ok(VariableItemList* variable_item_list) { void variable_item_list_process_ok(VariableItemList* variable_item_list) {
bool update = false;
with_view_model( with_view_model(
variable_item_list->view, variable_item_list->view,
VariableItemListModel * model, VariableItemListModel * model,
{ {
VariableItem* item = variable_item_list_get_selected_item(model); VariableItem* item = variable_item_list_get_selected_item(model);
if(model->locked_message_visible) { if(item->locked) {
model->locked_message_visible = false;
update = true;
} else if(item->locked) {
model->locked_message_visible = true; model->locked_message_visible = true;
furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3); furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3);
} else if(variable_item_list->callback) { } else if(variable_item_list->callback) {
variable_item_list->callback(variable_item_list->context, model->position); variable_item_list->callback(variable_item_list->context, model->position);
} }
}, },
update); true);
} }
static void variable_item_list_scroll_timer_callback(void* context) { static void variable_item_list_scroll_timer_callback(void* context) {