Description
I plan to use tileview with swiping disabled and a rotary encoder.
I want button click to move to the appropriate tile
When i call lv_tileview_set_tile_act in my event handler i get an error, if I call it within my BuildGUI function then it works just fine.
Note - hope you don’t mine me posting these newbie Qs here but i think that if these are things i am coming up against many others will benefit from the solutions being documented
What MCU/Processor/Board and compiler are you using?
Esp32 Arduino 1.8.9 IDE
What do you want to achieve?
See description
What have you tried so far?
Adding tileview to global lv_obj_t
Code to reproduce
BuildGUI
static void BuildGUI(void)
{
static lv_point_t valid_pos[] = {{0,0}, {0, 1}, {1,1}};
lv_obj_t *tileview;
tileview = lv_tileview_create(lv_scr_act(), NULL);
lv_tileview_set_valid_positions(tileview, valid_pos, 3);
lv_tileview_set_edge_flash(tileview, true);
lv_obj_t * tile1 = lv_obj_create(tileview, NULL);
lv_obj_set_size(tile1, LV_HOR_RES, LV_VER_RES);
lv_obj_set_style(tile1, &lv_style_pretty);
lv_tileview_add_element(tileview, tile1);
/*Tile1: just a label*/
lv_obj_t * label = lv_label_create(tile1, NULL);
lv_label_set_text(label, "Tile 1");
lv_obj_align(label, NULL, LV_ALIGN_CENTER, 0, 0);
//and button
lv_obj_t * btn1 = lv_btn_create(lv_scr_act(), NULL);
lv_obj_set_event_cb(btn1, event_handler);
lv_obj_align(btn1, NULL, LV_ALIGN_IN_TOP_RIGHT, 0, 45);
lv_btn_set_fit2(btn1, LV_FIT_TIGHT, LV_FIT_TIGHT);
label = lv_label_create(btn1, NULL);
lv_label_set_text(label, "Button");
lv_group_add_obj(g, btn1);
/*Tile2: a list*/
lv_obj_t * list = lv_list_create(tileview, NULL);
lv_obj_set_size(list, LV_HOR_RES, LV_VER_RES);
lv_obj_set_pos(list, 0, LV_VER_RES);
lv_list_set_scroll_propagation(list, true);
lv_list_set_sb_mode(list, LV_SB_MODE_OFF);
lv_tileview_add_element(list, list);
lv_obj_t * list_btn;
list_btn = lv_list_add_btn(list, NULL, "One");
lv_tileview_add_element(tileview, list_btn);
list_btn = lv_list_add_btn(list, NULL, "Two");
lv_tileview_add_element(tileview, list_btn);
list_btn = lv_list_add_btn(list, NULL, "Three");
lv_tileview_add_element(tileview, list_btn);
list_btn = lv_list_add_btn(list, NULL, "Four");
lv_tileview_add_element(tileview, list_btn);
list_btn = lv_list_add_btn(list, NULL, "Five");
lv_tileview_add_element(tileview, list_btn);
list_btn = lv_list_add_btn(list, NULL, "Six");
lv_tileview_add_element(tileview, list_btn);
list_btn = lv_list_add_btn(list, NULL, "Seven");
lv_tileview_add_element(tileview, list_btn);
list_btn = lv_list_add_btn(list, NULL, "Eight");
lv_tileview_add_element(tileview, list_btn);
/*Tile3: a button*/
lv_obj_t * tile3 = lv_obj_create(tileview, tile1);
lv_obj_set_pos(tile3, LV_HOR_RES, LV_VER_RES);
lv_tileview_add_element(tileview, tile3);
lv_obj_t * btn = lv_btn_create(tile3, NULL);
lv_obj_align(btn, NULL, LV_ALIGN_CENTER, 0, 0);
label = lv_label_create(btn, NULL);
lv_label_set_text(label, "Button");
// THIS CALL WORKS HERE BUT I NEED ON BUTTON EVENT NOT ON GUI BUILD
// lv_tileview_set_tile_act(tileview,0 , 1, LV_ANIM_ON);
Event handler…
static void event_handler(lv_obj_t * obj, lv_event_t event)
{
if (event == LV_EVENT_CLICKED) { //buttons clicked
String runcode = lv_list_get_btn_text(obj);
if (runcode == "Button")
lv_tileview_set_tile_act(tileview,0 , 1, LV_ANIM_ON);
// THIS ERRORS
}
errors with cannot convert ‘lv_obj_t {aka _lv_obj_t}’ to ‘lv_obj_t* {aka _lv_obj_t*}’ for argument ‘1’ to ‘void lv_tileview_set_tile_act(lv_obj_t*, lv_coord_t, lv_coord_t, lv_anim_enable_t)’