fix(table): mark clicks as 'Invalid' when clicking on empty spaces (#7153)

This commit is contained in:
Carlos Diaz
2024-12-18 04:31:38 -06:00
committed by GitHub
parent bdb4d944de
commit fcbcdf823d
3 changed files with 24 additions and 5 deletions

View File

@@ -521,6 +521,8 @@ static void lv_table_constructor(const lv_obj_class_t * class_p, lv_obj_t * obj)
table->row_h[0] = LV_DPI_DEF;
table->cell_data = lv_realloc(table->cell_data, table->row_cnt * table->col_cnt * sizeof(lv_table_cell_t *));
table->cell_data[0] = NULL;
table->row_act = LV_TABLE_CELL_NONE;
table->col_act = LV_TABLE_CELL_NONE;
LV_TRACE_OBJ_CREATE("finished");
}
@@ -998,6 +1000,9 @@ static lv_result_t get_pressed_cell(lv_obj_t * obj, uint32_t * row, uint32_t * c
lv_indev_get_point(lv_indev_active(), &p);
int32_t tmp;
bool is_click_on_valid_column = false;
bool is_click_on_valid_row = false;
if(col) {
int32_t x = p.x + lv_obj_get_scroll_x(obj);
@@ -1013,7 +1018,10 @@ static lv_result_t get_pressed_cell(lv_obj_t * obj, uint32_t * row, uint32_t * c
tmp = 0;
for(*col = 0; *col < table->col_cnt; (*col)++) {
tmp += table->col_w[*col];
if(x < tmp) break;
if(x < tmp) {
is_click_on_valid_column = true;
break;
}
}
}
@@ -1027,11 +1035,20 @@ static lv_result_t get_pressed_cell(lv_obj_t * obj, uint32_t * row, uint32_t * c
for(*row = 0; *row < table->row_cnt; (*row)++) {
tmp += table->row_h[*row];
if(y < tmp) break;
if(y < tmp) {
is_click_on_valid_row = true;
break;
}
}
}
return LV_RESULT_OK;
/* If the click was on valid column AND row then return valid result, return invalid otherwise */
lv_result_t result = LV_RESULT_INVALID;
if((is_click_on_valid_column) && (is_click_on_valid_row)) {
result = LV_RESULT_OK;
}
return result;
}
/* Returns number of bytes to allocate based on chars configuration */

View File

@@ -51,6 +51,8 @@ void test_file_explorer_read_dir(void)
}
}
/* Since the default table->col_act = LV_TABLE_CELL_NONE, it is necessary to specify file_table->col_act = 0 */
file_table->col_act = 0;
file_table->row_act = dev_row;
lv_obj_send_event(file_explorer->file_table, LV_EVENT_VALUE_CHANGED, NULL);
TEST_ASSERT_EQUAL_STRING("A:src/test_files/test_file_explorer_folder/dev/",

View File

@@ -309,8 +309,8 @@ void test_table_cell_select_should_not_allow_set_on_table_with_no_rows(void)
lv_table_get_selected_cell(table, &selected_row, &selected_column);
TEST_ASSERT_EQUAL_UINT32(0, selected_row);
TEST_ASSERT_EQUAL_UINT32(0, selected_column);
TEST_ASSERT_EQUAL_UINT32(LV_TABLE_CELL_NONE, selected_row);
TEST_ASSERT_EQUAL_UINT32(LV_TABLE_CELL_NONE, selected_column);
}
#endif