KEYPAD, ENCODER: not send ENTER (process it in RELEASE signals)

This commit is contained in:
Gabor Kiss-Vamosi
2019-03-12 19:20:23 +01:00
parent 6967a8e52f
commit 89d56e5723
9 changed files with 180 additions and 146 deletions

View File

@@ -402,7 +402,6 @@ static void indev_keypad_proc(lv_indev_t * i, lv_indev_data_t * data)
if(i->proc.reset_query) return; /*The object might be deleted*/ if(i->proc.reset_query) return; /*The object might be deleted*/
lv_obj_send_event(focused, LV_EVENT_PRESSED); lv_obj_send_event(focused, LV_EVENT_PRESSED);
if(i->proc.reset_query) return; /*The object might be deleted*/ if(i->proc.reset_query) return; /*The object might be deleted*/
lv_group_send_data(g, LV_GROUP_KEY_ENTER);
} }
/*Move the focus on NEXT*/ /*Move the focus on NEXT*/
else if(data->key == LV_GROUP_KEY_NEXT) { else if(data->key == LV_GROUP_KEY_NEXT) {
@@ -587,7 +586,6 @@ static void indev_encoder_proc(lv_indev_t * i, lv_indev_data_t * data)
/*The button was released on a non-editable object. Just send enter*/ /*The button was released on a non-editable object. Just send enter*/
if(editable == false) { if(editable == false) {
lv_group_send_data(g, LV_GROUP_KEY_ENTER);
focused->signal_cb(focused, LV_SIGNAL_RELEASED, NULL); focused->signal_cb(focused, LV_SIGNAL_RELEASED, NULL);
if(i->proc.reset_query) return; /*The object might be deleted*/ if(i->proc.reset_query) return; /*The object might be deleted*/

View File

@@ -340,8 +340,7 @@ static lv_res_t lv_cb_signal(lv_obj_t * cb, lv_signal_t sign, void * param)
} else if(sign == LV_SIGNAL_CONTROLL) { } else if(sign == LV_SIGNAL_CONTROLL) {
char c = *((char *)param); char c = *((char *)param);
if(c == LV_GROUP_KEY_RIGHT || c == LV_GROUP_KEY_DOWN || if(c == LV_GROUP_KEY_RIGHT || c == LV_GROUP_KEY_DOWN ||
c == LV_GROUP_KEY_LEFT || c == LV_GROUP_KEY_UP || c == LV_GROUP_KEY_LEFT || c == LV_GROUP_KEY_UP) {
c == LV_GROUP_KEY_ENTER) {
lv_btn_set_state(ext->bullet, lv_btn_get_state(cb)); lv_btn_set_state(ext->bullet, lv_btn_get_state(cb));
} }
} else if(sign == LV_SIGNAL_GET_TYPE) { } else if(sign == LV_SIGNAL_GET_TYPE) {

View File

@@ -687,14 +687,6 @@ static lv_res_t lv_ddlist_signal(lv_obj_t * ddlist, lv_signal_t sign, void * par
lv_ddlist_pos_current_option(ddlist); lv_ddlist_pos_current_option(ddlist);
lv_obj_invalidate(ddlist); lv_obj_invalidate(ddlist);
} }
} else if(c == LV_GROUP_KEY_ENTER) {
lv_indev_t * indev = lv_indev_get_act();
if(lv_indev_get_type(indev) == LV_INDEV_TYPE_ENCODER) {
lv_group_t * g = lv_obj_get_group(ddlist);
if(lv_group_get_editing(g)) {
lv_group_set_editing(g, false);
}
}
} else if(c == LV_GROUP_KEY_ESC) { } else if(c == LV_GROUP_KEY_ESC) {
if(ext->opened) { if(ext->opened) {
ext->opened = 0; ext->opened = 0;
@@ -767,8 +759,16 @@ static lv_res_t release_handler(lv_obj_t * ddlist)
lv_ddlist_refr_size(ddlist, true); lv_ddlist_refr_size(ddlist, true);
} else { } else {
/*Search the clicked option (For KEYPAD and ENCODER the new value should be already set)*/ /*Leave edit mode once a new item is selected*/
lv_indev_t * indev = lv_indev_get_act(); lv_indev_t * indev = lv_indev_get_act();
if(lv_indev_get_type(indev) == LV_INDEV_TYPE_ENCODER) {
lv_group_t * g = lv_obj_get_group(ddlist);
if(lv_group_get_editing(g)) {
lv_group_set_editing(g, false);
}
}
/*Search the clicked option (For KEYPAD and ENCODER the new value should be already set)*/
if(lv_indev_get_type(indev) == LV_INDEV_TYPE_POINTER || lv_indev_get_type(indev) == LV_INDEV_TYPE_BUTTON) { if(lv_indev_get_type(indev) == LV_INDEV_TYPE_POINTER || lv_indev_get_type(indev) == LV_INDEV_TYPE_BUTTON) {
lv_point_t p; lv_point_t p;
lv_indev_get_point(indev, &p); lv_indev_get_point(indev, &p);

View File

@@ -345,40 +345,40 @@ void lv_list_set_style(lv_obj_t * list, lv_list_style_t type, lv_style_t * style
lv_obj_t * btn; lv_obj_t * btn;
switch(type) { switch(type) {
case LV_LIST_STYLE_BG: case LV_LIST_STYLE_BG:
lv_page_set_style(list, LV_PAGE_STYLE_BG, style); lv_page_set_style(list, LV_PAGE_STYLE_BG, style);
/*style change signal will call 'refr_btn_width' */ /*style change signal will call 'refr_btn_width' */
break; break;
case LV_LIST_STYLE_SCRL: case LV_LIST_STYLE_SCRL:
lv_page_set_style(list, LV_PAGE_STYLE_SCRL, style); lv_page_set_style(list, LV_PAGE_STYLE_SCRL, style);
refr_btn_width(list); refr_btn_width(list);
break; break;
case LV_LIST_STYLE_SB: case LV_LIST_STYLE_SB:
lv_page_set_style(list, LV_PAGE_STYLE_SB, style); lv_page_set_style(list, LV_PAGE_STYLE_SB, style);
break; break;
case LV_LIST_STYLE_EDGE_FLASH: case LV_LIST_STYLE_EDGE_FLASH:
lv_page_set_style(list, LV_PAGE_STYLE_EDGE_FLASH, style); lv_page_set_style(list, LV_PAGE_STYLE_EDGE_FLASH, style);
break; break;
case LV_LIST_STYLE_BTN_REL: case LV_LIST_STYLE_BTN_REL:
ext->styles_btn[LV_BTN_STATE_REL] = style; ext->styles_btn[LV_BTN_STATE_REL] = style;
btn_style_refr = LV_BTN_STYLE_REL; btn_style_refr = LV_BTN_STYLE_REL;
break; break;
case LV_LIST_STYLE_BTN_PR: case LV_LIST_STYLE_BTN_PR:
ext->styles_btn[LV_BTN_STATE_PR] = style; ext->styles_btn[LV_BTN_STATE_PR] = style;
btn_style_refr = LV_BTN_STYLE_PR; btn_style_refr = LV_BTN_STYLE_PR;
break; break;
case LV_LIST_STYLE_BTN_TGL_REL: case LV_LIST_STYLE_BTN_TGL_REL:
ext->styles_btn[LV_BTN_STATE_TGL_REL] = style; ext->styles_btn[LV_BTN_STATE_TGL_REL] = style;
btn_style_refr = LV_BTN_STYLE_TGL_REL; btn_style_refr = LV_BTN_STYLE_TGL_REL;
break; break;
case LV_LIST_STYLE_BTN_TGL_PR: case LV_LIST_STYLE_BTN_TGL_PR:
ext->styles_btn[LV_BTN_STATE_TGL_PR] = style; ext->styles_btn[LV_BTN_STATE_TGL_PR] = style;
btn_style_refr = LV_BTN_STYLE_TGL_PR; btn_style_refr = LV_BTN_STYLE_TGL_PR;
break; break;
case LV_LIST_STYLE_BTN_INA: case LV_LIST_STYLE_BTN_INA:
ext->styles_btn[LV_BTN_STATE_INA] = style; ext->styles_btn[LV_BTN_STATE_INA] = style;
btn_style_refr = LV_BTN_STYLE_INA; btn_style_refr = LV_BTN_STYLE_INA;
break; break;
} }
@@ -488,7 +488,7 @@ lv_obj_t * lv_list_get_prev_btn(const lv_obj_t * list, lv_obj_t * prev_btn)
/** /**
* Get the next button from list. (Starts from the bottom button) * Get the next button from list. (Starts from the bottom button)
* @param list pointer to a list object * @param list pointer to a list object
* @param prev_btn pointer to button. Search the next after it. * @param prev_btn pointer to button. Search the next after it.
@@ -585,36 +585,36 @@ lv_style_t * lv_list_get_style(const lv_obj_t * list, lv_list_style_t type)
lv_list_ext_t * ext = lv_obj_get_ext_attr(list); lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
switch(type) { switch(type) {
case LV_LIST_STYLE_BG: case LV_LIST_STYLE_BG:
style = lv_page_get_style(list, LV_PAGE_STYLE_BG); style = lv_page_get_style(list, LV_PAGE_STYLE_BG);
break; break;
case LV_LIST_STYLE_SCRL: case LV_LIST_STYLE_SCRL:
style = lv_page_get_style(list, LV_PAGE_STYLE_SB); style = lv_page_get_style(list, LV_PAGE_STYLE_SB);
break; break;
case LV_LIST_STYLE_SB: case LV_LIST_STYLE_SB:
style = lv_page_get_style(list, LV_PAGE_STYLE_SCRL); style = lv_page_get_style(list, LV_PAGE_STYLE_SCRL);
break; break;
case LV_LIST_STYLE_EDGE_FLASH: case LV_LIST_STYLE_EDGE_FLASH:
style = lv_page_get_style(list, LV_PAGE_STYLE_EDGE_FLASH); style = lv_page_get_style(list, LV_PAGE_STYLE_EDGE_FLASH);
break; break;
case LV_LIST_STYLE_BTN_REL: case LV_LIST_STYLE_BTN_REL:
style = ext->styles_btn[LV_BTN_STATE_REL]; style = ext->styles_btn[LV_BTN_STATE_REL];
break; break;
case LV_LIST_STYLE_BTN_PR: case LV_LIST_STYLE_BTN_PR:
style = ext->styles_btn[LV_BTN_STATE_PR]; style = ext->styles_btn[LV_BTN_STATE_PR];
break; break;
case LV_LIST_STYLE_BTN_TGL_REL: case LV_LIST_STYLE_BTN_TGL_REL:
style = ext->styles_btn[LV_BTN_STATE_TGL_REL]; style = ext->styles_btn[LV_BTN_STATE_TGL_REL];
break; break;
case LV_LIST_STYLE_BTN_TGL_PR: case LV_LIST_STYLE_BTN_TGL_PR:
style = ext->styles_btn[LV_BTN_STATE_TGL_PR]; style = ext->styles_btn[LV_BTN_STATE_TGL_PR];
break; break;
case LV_LIST_STYLE_BTN_INA: case LV_LIST_STYLE_BTN_INA:
style = ext->styles_btn[LV_BTN_STATE_INA]; style = ext->styles_btn[LV_BTN_STATE_INA];
break; break;
default: default:
style = NULL; style = NULL;
break; break;
} }
return style; return style;
@@ -752,10 +752,55 @@ static lv_res_t lv_list_signal(lv_obj_t * list, lv_signal_t sign, void * param)
if(w != lv_area_get_width(param)) { /*Width changed*/ if(w != lv_area_get_width(param)) { /*Width changed*/
refr_btn_width(list); refr_btn_width(list);
} }
} else if(sign == LV_SIGNAL_STYLE_CHG) { }
else if(sign == LV_SIGNAL_RELEASED ||
sign == LV_SIGNAL_PRESSED ||
sign == LV_SIGNAL_PRESSING ||
sign == LV_SIGNAL_LONG_PRESS ||
sign == LV_SIGNAL_LONG_PRESS_REP)
{
/*If pressed/released etc by a KEYPAD or ENCODER delegate signal to the button*/
lv_indev_t * indev = lv_indev_get_act();
lv_hal_indev_type_t indev_type = lv_indev_get_type(indev);
if(indev_type == LV_INDEV_TYPE_KEYPAD ||
(indev_type == LV_INDEV_TYPE_ENCODER && lv_group_get_editing(lv_obj_get_group(list))))
{
/*Get the 'pressed' button*/
lv_obj_t * btn = NULL;
btn = lv_list_get_prev_btn(list, btn);
while(btn != NULL) {
if(lv_btn_get_state(btn) == LV_BTN_STATE_PR) break;
btn = lv_list_get_prev_btn(list, btn);
}
lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
if(btn) {
if(sign == LV_SIGNAL_PRESSED) {
lv_obj_send_event(btn, LV_EVENT_PRESSED);
}
else if(sign == LV_SIGNAL_PRESSING) {
lv_obj_send_event(btn, LV_EVENT_PRESSING);
}
else if(sign == LV_SIGNAL_LONG_PRESS) {
lv_obj_send_event(btn, LV_EVENT_LONG_PRESSED);
}
else if(sign == LV_SIGNAL_LONG_PRESS_REP) {
lv_obj_send_event(btn, LV_EVENT_LONG_PRESSED_REPEAT);
}
else if(sign == LV_SIGNAL_RELEASED) {
ext->last_sel = btn;
if(indev->proc.long_pr_sent == 0) lv_obj_send_event(btn, LV_EVENT_SHORT_CLICKED);
lv_obj_send_event(btn, LV_EVENT_CLICKED);
lv_obj_send_event(btn, LV_EVENT_RELEASED);
}
}
}
}
else if(sign == LV_SIGNAL_STYLE_CHG) {
/*Because of the possible change of horizontal and vertical padding refresh buttons width */ /*Because of the possible change of horizontal and vertical padding refresh buttons width */
refr_btn_width(list); refr_btn_width(list);
} else if(sign == LV_SIGNAL_FOCUS) { }
else if(sign == LV_SIGNAL_FOCUS) {
#if LV_USE_GROUP #if LV_USE_GROUP
lv_hal_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act()); lv_hal_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
@@ -834,21 +879,6 @@ static lv_res_t lv_list_signal(lv_obj_t * list, lv_signal_t sign, void * param)
lv_obj_t * btn = lv_list_get_next_btn(list, NULL); lv_obj_t * btn = lv_list_get_next_btn(list, NULL);
if(btn) lv_list_set_btn_selected(list, btn); if(btn) lv_list_set_btn_selected(list, btn);
} }
} else if(c == LV_GROUP_KEY_ENTER) {
/*Get the 'pressed' button*/
lv_obj_t * btn = NULL;
btn = lv_list_get_prev_btn(list, btn);
while(btn != NULL) {
if(lv_btn_get_state(btn) == LV_BTN_STATE_PR) break;
btn = lv_list_get_prev_btn(list, btn);
}
if(btn != NULL) {
lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
ext->last_sel = btn;
res = lv_obj_send_event(btn, LV_EVENT_CLICKED);
if(res != LV_RES_OK) return res;
}
} }
#endif #endif
} else if(sign == LV_SIGNAL_GET_TYPE) { } else if(sign == LV_SIGNAL_GET_TYPE) {

View File

@@ -402,16 +402,6 @@ static lv_res_t lv_roller_signal(lv_obj_t * roller, lv_signal_t sign, void * par
if(ext->ddlist.sel_opt_id > 0) { if(ext->ddlist.sel_opt_id > 0) {
lv_roller_set_selected(roller, ext->ddlist.sel_opt_id - 1, true); lv_roller_set_selected(roller, ext->ddlist.sel_opt_id - 1, true);
} }
} else if(c == LV_GROUP_KEY_ENTER) {
ext->ddlist.sel_opt_id_ori = ext->ddlist.sel_opt_id; /*Set the entered value as default*/
res = lv_obj_send_event(roller, LV_EVENT_VALUE_CHANGED);
if(res != LV_RES_OK) return res;
#if LV_USE_GROUP
lv_group_t * g = lv_obj_get_group(roller);
bool editing = lv_group_get_editing(g);
if(editing) lv_group_set_editing(g, false); /*In edit mode go to navigate mode if an option is selected*/
#endif
} }
} else if(sign == LV_SIGNAL_GET_TYPE) { } else if(sign == LV_SIGNAL_GET_TYPE) {
lv_obj_type_t * buf = param; lv_obj_type_t * buf = param;
@@ -472,6 +462,12 @@ static lv_res_t lv_roller_scrl_signal(lv_obj_t * roller_scrl, lv_signal_t sign,
if(id < 0) id = 0; if(id < 0) id = 0;
if(id >= ext->ddlist.option_cnt) id = ext->ddlist.option_cnt - 1; if(id >= ext->ddlist.option_cnt) id = ext->ddlist.option_cnt - 1;
ext->ddlist.sel_opt_id = id; ext->ddlist.sel_opt_id = id;
ext->ddlist.sel_opt_id_ori = id;
#if LV_USE_GROUP
lv_group_t * g = lv_obj_get_group(roller);
bool editing = lv_group_get_editing(g);
if(editing) lv_group_set_editing(g, false); /*In edit mode go to navigate mode if an option is selected*/
#endif
res = lv_obj_send_event(roller, LV_EVENT_VALUE_CHANGED); res = lv_obj_send_event(roller, LV_EVENT_VALUE_CHANGED);
if(res != LV_RES_OK) return res; if(res != LV_RES_OK) return res;
} }

View File

@@ -477,6 +477,17 @@ static lv_res_t lv_slider_signal(lv_obj_t * slider, lv_signal_t sign, void * par
} else if(sign == LV_SIGNAL_RELEASED || sign == LV_SIGNAL_PRESS_LOST) { } else if(sign == LV_SIGNAL_RELEASED || sign == LV_SIGNAL_PRESS_LOST) {
if(ext->drag_value != LV_SLIDER_NOT_PRESSED) lv_slider_set_value(slider, ext->drag_value, false); if(ext->drag_value != LV_SLIDER_NOT_PRESSED) lv_slider_set_value(slider, ext->drag_value, false);
ext->drag_value = LV_SLIDER_NOT_PRESSED; ext->drag_value = LV_SLIDER_NOT_PRESSED;
#if LV_USE_GROUP
/*Leave edit mode if released. (No need to wait for LONG_PRESS) */
lv_group_t * g = lv_obj_get_group(slider);
bool editing = lv_group_get_editing(g);
lv_hal_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
if(indev_type == LV_INDEV_TYPE_ENCODER) {
if(editing) lv_group_set_editing(g, false);
}
#endif
} else if(sign == LV_SIGNAL_CORD_CHG) { } else if(sign == LV_SIGNAL_CORD_CHG) {
/* The knob size depends on slider size. /* The knob size depends on slider size.
* During the drawing method the ext. size is used by the knob so refresh the ext. size.*/ * During the drawing method the ext. size is used by the knob so refresh the ext. size.*/
@@ -504,15 +515,6 @@ static lv_res_t lv_slider_signal(lv_obj_t * slider, lv_signal_t sign, void * par
ext->drag_value = LV_SLIDER_NOT_PRESSED; ext->drag_value = LV_SLIDER_NOT_PRESSED;
#if LV_USE_GROUP
lv_group_t * g = lv_obj_get_group(slider);
bool editing = lv_group_get_editing(g);
lv_hal_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
/*Encoders need special handling*/
if(indev_type == LV_INDEV_TYPE_ENCODER && c == LV_GROUP_KEY_ENTER) {
if(editing) lv_group_set_editing(g, false);
}
#endif
if(c == LV_GROUP_KEY_RIGHT || c == LV_GROUP_KEY_UP) { if(c == LV_GROUP_KEY_RIGHT || c == LV_GROUP_KEY_UP) {
lv_slider_set_value(slider, lv_slider_get_value(slider) + 1, true); lv_slider_set_value(slider, lv_slider_get_value(slider) + 1, true);
res = lv_obj_send_event(slider, LV_EVENT_VALUE_CHANGED); res = lv_obj_send_event(slider, LV_EVENT_VALUE_CHANGED);

View File

@@ -335,6 +335,27 @@ static lv_res_t lv_spinbox_signal(lv_obj_t * spinbox, lv_signal_t sign, void * p
} }
buf->type[i] = "lv_spinbox"; buf->type[i] = "lv_spinbox";
} }
else if(sign == LV_SIGNAL_RELEASED) {
/*If released with an ENCODER then move to the nexxt digit*/
lv_indev_t * indev = lv_indev_get_act();
if(lv_indev_get_type(indev) == LV_INDEV_TYPE_ENCODER) {
if(lv_group_get_editing(lv_obj_get_group(spinbox))) {
if(ext->step > 1) {
lv_spinbox_step_next(spinbox);
} else {
/*Restart from the MSB*/
ext->step = 1;
uint32_t i;
for(i = 0; i < ext->digit_count; i++) {
int32_t new_step = ext->step * 10;
if(new_step >= ext->range_max) break;
ext->step = new_step;
}
lv_spinbox_step_previous(spinbox);
}
}
}
}
else if(sign == LV_SIGNAL_CONTROLL) { else if(sign == LV_SIGNAL_CONTROLL) {
lv_hal_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act()); lv_hal_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
@@ -353,22 +374,6 @@ static lv_res_t lv_spinbox_signal(lv_obj_t * spinbox, lv_signal_t sign, void * p
else if(c == LV_GROUP_KEY_DOWN) { else if(c == LV_GROUP_KEY_DOWN) {
lv_spinbox_decrement(spinbox); lv_spinbox_decrement(spinbox);
} }
else if(c == LV_GROUP_KEY_ENTER) {
if(ext->step > 1) {
lv_spinbox_step_next(spinbox);
} else {
/*Restart from the MSB*/
ext->step = 1;
uint32_t i;
for(i = 0; i < ext->digit_count; i++) {
int32_t new_step = ext->step * 10;
if(new_step >= ext->range_max) break;
ext->step = new_step;
}
lv_spinbox_step_previous(spinbox);
}
}
else { else {
lv_ta_add_char(spinbox, c); lv_ta_add_char(spinbox, c);
} }

View File

@@ -344,6 +344,8 @@ static lv_res_t lv_sw_signal(lv_obj_t * sw, lv_signal_t sign, void * param)
if(lv_sw_get_state(sw)) lv_sw_off(sw, true); if(lv_sw_get_state(sw)) lv_sw_off(sw, true);
else lv_sw_on(sw, true); else lv_sw_on(sw, true);
res = lv_obj_send_event(sw, LV_EVENT_VALUE_CHANGED);
if(res != LV_RES_OK) return res;
} }
/*If the switch was dragged then calculate the new state based on the current position*/ /*If the switch was dragged then calculate the new state based on the current position*/
else { else {
@@ -356,11 +358,7 @@ static lv_res_t lv_sw_signal(lv_obj_t * sw, lv_signal_t sign, void * param)
} }
} else if(sign == LV_SIGNAL_CONTROLL) { } else if(sign == LV_SIGNAL_CONTROLL) {
char c = *((char *)param); char c = *((char *)param);
if(c == LV_GROUP_KEY_ENTER) { if(c == LV_GROUP_KEY_RIGHT || c == LV_GROUP_KEY_UP) {
lv_sw_toggle(sw, true);
res = lv_obj_send_event(sw, LV_EVENT_VALUE_CHANGED);
if(res != LV_RES_OK) return res;
} else if(c == LV_GROUP_KEY_RIGHT || c == LV_GROUP_KEY_UP) {
lv_slider_set_value(sw, LV_SW_MAX_VALUE, true); lv_slider_set_value(sw, LV_SW_MAX_VALUE, true);
res = lv_obj_send_event(sw, LV_EVENT_VALUE_CHANGED); res = lv_obj_send_event(sw, LV_EVENT_VALUE_CHANGED);
if(res != LV_RES_OK) return res; if(res != LV_RES_OK) return res;

View File

@@ -574,27 +574,33 @@ static lv_res_t lv_tabview_signal(lv_obj_t * tabview, lv_signal_t sign, void * p
ext->tab_name_ptr = NULL; ext->tab_name_ptr = NULL;
ext->btns = NULL; /*These objects were children so they are already invalid*/ ext->btns = NULL; /*These objects were children so they are already invalid*/
ext->content = NULL; ext->content = NULL;
} else if(sign == LV_SIGNAL_CORD_CHG) { }
else if(sign == LV_SIGNAL_CORD_CHG) {
if(ext->content != NULL && if(ext->content != NULL &&
(lv_obj_get_width(tabview) != lv_area_get_width(param) || (lv_obj_get_width(tabview) != lv_area_get_width(param) ||
lv_obj_get_height(tabview) != lv_area_get_height(param))) { lv_obj_get_height(tabview) != lv_area_get_height(param))) {
tabview_realign(tabview); tabview_realign(tabview);
} }
} else if(sign == LV_SIGNAL_FOCUS || sign == LV_SIGNAL_DEFOCUS || sign == LV_SIGNAL_CONTROLL) { }
else if(sign == LV_SIGNAL_RELEASED) {
/*If released by a KEYPAD or ENCODER then really the tab buttons should be released.
* So simulate a CLICK on the tab buttons*/
lv_indev_t * indev = lv_indev_get_act();
lv_hal_indev_type_t indev_type = lv_indev_get_type(indev);
if(indev_type == LV_INDEV_TYPE_KEYPAD ||
(indev_type == LV_INDEV_TYPE_ENCODER && lv_group_get_editing(lv_obj_get_group(tabview))))
{
lv_obj_send_event(ext->btns, LV_EVENT_CLICKED);
}
}
else if(sign == LV_SIGNAL_FOCUS || sign == LV_SIGNAL_DEFOCUS || sign == LV_SIGNAL_CONTROLL) {
/* The button matrix is not in a group (the tab view is in it) but it should handle the group signals. /* The button matrix is not in a group (the tab view is in it) but it should handle the group signals.
* So propagate the related signals to the button matrix manually*/ * So propagate the related signals to the button matrix manually*/
if(ext->btns) { if(ext->btns) {
ext->btns->signal_cb(ext->btns, sign, param); ext->btns->signal_cb(ext->btns, sign, param);
} }
if(sign == LV_SIGNAL_CONTROLL) { if(sign == LV_SIGNAL_FOCUS) {
/*Simulate a click when enter is pressed*/
char c = *((char *)param);
if(c == LV_GROUP_KEY_ENTER) {
lv_obj_send_event(ext->btns, LV_EVENT_CLICKED);
}
}
else if(sign == LV_SIGNAL_FOCUS) {
lv_hal_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act()); lv_hal_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
/*With ENCODER select the first button only in edit mode*/ /*With ENCODER select the first button only in edit mode*/
if(indev_type == LV_INDEV_TYPE_ENCODER) { if(indev_type == LV_INDEV_TYPE_ENCODER) {