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));
if(model->locked_message_visible) {
canvas_set_font(canvas, FontSecondary);
canvas_set_color(canvas, ColorWhite);
canvas_draw_box(canvas, 8, 10, 110, 48);
canvas_set_color(canvas, ColorBlack);
canvas_draw_icon(canvas, 10, 14, &I_WarningDolphin_45x42);
canvas_draw_rframe(canvas, 8, 8, 112, 50, 3);
canvas_draw_rframe(canvas, 9, 9, 110, 48, 2);
elements_multiline_text(
elements_multiline_text_aligned(
canvas,
62,
20,
84,
32,
AlignCenter,
AlignCenter,
furi_string_get_cstr(
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_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(
submenu->view,
@@ -249,8 +249,8 @@ void submenu_free(Submenu* submenu) {
SubmenuItemArray_clear(model->items);
},
true);
furi_timer_stop(submenu->timer);
furi_timer_free(submenu->timer);
furi_timer_stop(submenu->locked_timer);
furi_timer_free(submenu->locked_timer);
view_free(submenu->view);
free(submenu);
}
@@ -416,7 +416,7 @@ void submenu_process_ok(Submenu* submenu) {
}
if(item && item->locked) {
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);

View File

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