Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Apps/System/tests/menu_simple_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -84,12 +84,12 @@ static void _menu_select_callback(ClickRecognizerRef recognizer, void *context)

static void _menu_next_callback(ClickRecognizerRef recognizer, void *context)
{
menu_layer_set_selected_next(s_menu_layer, false, s_row_align, true);
menu_layer_set_selected_next(s_menu_layer, recognizer, false, s_row_align, true);
}

static void _menu_prev_callback(ClickRecognizerRef recognizer, void *context)
{
menu_layer_set_selected_next(s_menu_layer, true, s_row_align, true);
menu_layer_set_selected_next(s_menu_layer, recognizer, true, s_row_align, true);
}

static void _menu_exit_callback(ClickRecognizerRef recognizer, void* context)
Expand Down
4 changes: 2 additions & 2 deletions rwatch/ui/action_menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -219,14 +219,14 @@ static void _action_menu_select_prev(ClickRecognizerRef recognizer, void *contex
{
ActionMenu *action_menu = (ActionMenu*)context;
if (!action_menu->is_frozen)
menu_layer_set_selected_next(action_menu->menu_layer, true, MenuRowAlignCenter, true);
menu_layer_set_selected_next(action_menu->menu_layer, recognizer, true, MenuRowAlignCenter, true);
}

static void _action_menu_select_next(ClickRecognizerRef recognizer, void *context)
{
ActionMenu *action_menu = (ActionMenu*)context;
if (!action_menu->is_frozen)
menu_layer_set_selected_next(action_menu->menu_layer, false, MenuRowAlignCenter, true);
menu_layer_set_selected_next(action_menu->menu_layer, recognizer, false, MenuRowAlignCenter, true);
}

static void _action_menu_activate_item(ClickRecognizerRef recognizer, void *context)
Expand Down
27 changes: 21 additions & 6 deletions rwatch/ui/layer/menu_layer.c
Original file line number Diff line number Diff line change
Expand Up @@ -102,13 +102,28 @@ static bool has_next_index(const MenuLayer *menu_layer, const MenuIndex *index,
|| (!up && (index->section < menu_layer->end_index.section || index->row < menu_layer->end_index.row - 1));
}

static MenuIndex get_next_index(MenuLayer *menu_layer, bool up)
static MenuIndex get_next_index(MenuLayer *menu_layer, ClickRecognizerRef ref, bool up)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Architectural nit: I would probably make this a bool do_wrap that gets passed through to this layer (similar to the bool up), rather than passing the ClickRecognizerRef through.

{
MenuIndex index = menu_layer->selected;

if (!has_next_index(menu_layer, &index, up))
{
if (click_recognizer_is_repeating(ref))
{
return index;
}
if(index.row == 0)
{
index.row = get_num_rows(menu_layer, index.section) - (uint16_t) 1;
return index;
}
if(index.row == get_num_rows(menu_layer, index.section) - (uint16_t) 1)
{
index.row = 0;
return index;
}
return index;

}
if (up && index.row == 0)
{
--index.section;
Expand All @@ -124,9 +139,9 @@ static MenuIndex get_next_index(MenuLayer *menu_layer, bool up)
return index;
}

void menu_layer_set_selected_next(MenuLayer *menu_layer, bool up, MenuRowAlign scroll_align, bool animated)
void menu_layer_set_selected_next(MenuLayer *menu_layer, ClickRecognizerRef ref, bool up, MenuRowAlign scroll_align, bool animated)
{
menu_layer_set_selected_index(menu_layer, get_next_index(menu_layer, up), scroll_align, animated);
menu_layer_set_selected_index(menu_layer, get_next_index(menu_layer, ref, up), scroll_align, animated);
}

static MenuCellSpan *_get_cell_span(MenuLayer *menu_layer, const MenuIndex *index)
Expand Down Expand Up @@ -360,11 +375,11 @@ static void scroll_click_handler(ClickRecognizerRef ref, MenuLayer *menu_layer)
{
bool up = click_recognizer_get_button_id(ref) == BUTTON_ID_UP;
if (!click_recognizer_is_repeating(ref)) {
menu_layer_set_selected_next(menu_layer, up, MenuRowAlignCenter, ANIMATE_ON_CLICK);
menu_layer_set_selected_next(menu_layer, ref, up, MenuRowAlignCenter, ANIMATE_ON_CLICK);
menu_layer_scroll_repeat_prepare(menu_layer);
} else {
if (menu_layer_scroll_repeat(menu_layer))
menu_layer_set_selected_next(menu_layer, up, MenuRowAlignCenter, ANIMATE_ON_CLICK);
menu_layer_set_selected_next(menu_layer, ref, up, MenuRowAlignCenter, ANIMATE_ON_CLICK);
}
}

Expand Down
2 changes: 1 addition & 1 deletion rwatch/ui/layer/menu_layer.h
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ typedef enum
MenuRowAlignBottom,
} MenuRowAlign;

void menu_layer_set_selected_next(MenuLayer *menu_layer, bool up, MenuRowAlign scroll_align,
void menu_layer_set_selected_next(MenuLayer *menu_layer,ClickRecognizerRef ref, bool up, MenuRowAlign scroll_align,
bool animated);

void menu_layer_set_selected_index(MenuLayer *menu_layer, MenuIndex index,
Expand Down