imporve ENCODER support by sending signals
This commit is contained in:
@@ -541,13 +541,15 @@ static void indev_encoder_proc(lv_indev_t * i, lv_indev_data_t * data)
|
|||||||
bool editable = false;
|
bool editable = false;
|
||||||
focused->signal_cb(focused, LV_SIGNAL_GET_EDITABLE, &editable);
|
focused->signal_cb(focused, LV_SIGNAL_GET_EDITABLE, &editable);
|
||||||
|
|
||||||
|
|
||||||
/*Button press happened*/
|
/*Button press happened*/
|
||||||
if(data->state == LV_INDEV_STATE_PR &&
|
if(data->state == LV_INDEV_STATE_PR &&
|
||||||
i->proc.types.keypad.last_state == LV_INDEV_STATE_REL)
|
i->proc.types.keypad.last_state == LV_INDEV_STATE_REL)
|
||||||
{
|
{
|
||||||
i->proc.pr_timestamp = lv_tick_get();
|
i->proc.pr_timestamp = lv_tick_get();
|
||||||
if(lv_group_get_editing(g) == true || editable == false) {
|
if(lv_group_get_editing(g) == true || editable == false) {
|
||||||
|
focused->signal_cb(focused, LV_SIGNAL_PRESSED, NULL);
|
||||||
|
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*/
|
||||||
}
|
}
|
||||||
@@ -558,16 +560,15 @@ static void indev_encoder_proc(lv_indev_t * i, lv_indev_data_t * data)
|
|||||||
lv_tick_elaps(i->proc.pr_timestamp) > LV_INDEV_LONG_PRESS_TIME) {
|
lv_tick_elaps(i->proc.pr_timestamp) > LV_INDEV_LONG_PRESS_TIME) {
|
||||||
/*On enter long press toggle edit mode.*/
|
/*On enter long press toggle edit mode.*/
|
||||||
if(editable) {
|
if(editable) {
|
||||||
if(lv_ll_is_empty(&g->obj_ll) == false)
|
/*Don't leave edit mode if there is only one object (nowhere to navigate)*/
|
||||||
|
if(lv_ll_is_empty(&g->obj_ll) == false) {
|
||||||
lv_group_set_editing(g, lv_group_get_editing(g) ? false : true); /*Toggle edit mode on long press*/
|
lv_group_set_editing(g, lv_group_get_editing(g) ? false : true); /*Toggle edit mode on long press*/
|
||||||
else {
|
|
||||||
/*Don't leave edit mode if there is only one object (nowhere to navigate)*/
|
|
||||||
lv_obj_send_event(focused, LV_EVENT_LONG_PRESSED);
|
|
||||||
if(i->proc.reset_query) return; /*The object might be deleted*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*If not editable then just send a long press signal*/
|
/*If not editable then just send a long press signal*/
|
||||||
else {
|
else {
|
||||||
|
focused->signal_cb(focused, LV_SIGNAL_LONG_PRESS, NULL);
|
||||||
|
if(i->proc.reset_query) return; /*The object might be deleted*/
|
||||||
lv_obj_send_event(focused, LV_EVENT_LONG_PRESSED);
|
lv_obj_send_event(focused, LV_EVENT_LONG_PRESSED);
|
||||||
if(i->proc.reset_query) return; /*The object might be deleted*/
|
if(i->proc.reset_query) return; /*The object might be deleted*/
|
||||||
}
|
}
|
||||||
@@ -580,6 +581,9 @@ 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);
|
lv_group_send_data(g, LV_GROUP_KEY_ENTER);
|
||||||
|
focused->signal_cb(focused, LV_SIGNAL_RELEASED, NULL);
|
||||||
|
if(i->proc.reset_query) return; /*The object might be deleted*/
|
||||||
|
|
||||||
if(i->proc.long_pr_sent == 0) lv_obj_send_event(focused, LV_EVENT_SHORT_CLICKED);
|
if(i->proc.long_pr_sent == 0) lv_obj_send_event(focused, LV_EVENT_SHORT_CLICKED);
|
||||||
if(i->proc.reset_query) return; /*The object might be deleted*/
|
if(i->proc.reset_query) return; /*The object might be deleted*/
|
||||||
|
|
||||||
@@ -588,18 +592,24 @@ static void indev_encoder_proc(lv_indev_t * i, lv_indev_data_t * data)
|
|||||||
|
|
||||||
lv_obj_send_event(focused, LV_EVENT_RELEASED);
|
lv_obj_send_event(focused, LV_EVENT_RELEASED);
|
||||||
if(i->proc.reset_query) return; /*The object might be deleted*/
|
if(i->proc.reset_query) return; /*The object might be deleted*/
|
||||||
|
|
||||||
if(i->proc.reset_query) return; /*The object might be deleted*/
|
|
||||||
}
|
}
|
||||||
/*An object is being edited and the button is releases. Just send enter */
|
/*An object is being edited and the button is released. */
|
||||||
else if(g->editing) {
|
else if(g->editing) {
|
||||||
|
/*Ignore long pressed enter release because it comes from mode switch*/
|
||||||
if(!i->proc.long_pr_sent || lv_ll_is_empty(&g->obj_ll)) {
|
if(!i->proc.long_pr_sent || lv_ll_is_empty(&g->obj_ll)) {
|
||||||
lv_group_send_data(g, LV_GROUP_KEY_ENTER); /*Ignore long pressed enter release because it comes from mode switch*/
|
focused->signal_cb(focused, LV_SIGNAL_RELEASED, NULL);
|
||||||
lv_obj_send_event(focused, LV_EVENT_SHORT_CLICKED);
|
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_SHORT_CLICKED);
|
lv_obj_send_event(focused, LV_EVENT_SHORT_CLICKED);
|
||||||
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_CLICKED);
|
||||||
|
if(i->proc.reset_query) return; /*The object might be deleted*/
|
||||||
|
|
||||||
|
lv_obj_send_event(focused, LV_EVENT_RELEASED);
|
||||||
|
if(i->proc.reset_query) return; /*The object might be deleted*/
|
||||||
|
|
||||||
|
lv_group_send_data(g, LV_GROUP_KEY_ENTER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*If the focused object is editable and now in navigate mode then on enter switch edit mode*/
|
/*If the focused object is editable and now in navigate mode then on enter switch edit mode*/
|
||||||
|
|||||||
@@ -822,7 +822,7 @@ static lv_res_t lv_btnm_signal(lv_obj_t * btnm, lv_signal_t sign, void * param)
|
|||||||
}
|
}
|
||||||
else if(sign == LV_SIGNAL_PRESSED) {
|
else if(sign == LV_SIGNAL_PRESSED) {
|
||||||
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_POINTER || lv_indev_get_type(indev) == LV_INDEV_TYPE_ENCODER) {
|
if(lv_indev_get_type(indev) == LV_INDEV_TYPE_POINTER || lv_indev_get_type(indev) == LV_INDEV_TYPE_BUTTON) {
|
||||||
uint16_t btn_pr;
|
uint16_t btn_pr;
|
||||||
/*Search the pressed area*/
|
/*Search the pressed area*/
|
||||||
lv_indev_get_point(param, &p);
|
lv_indev_get_point(param, &p);
|
||||||
|
|||||||
@@ -688,21 +688,13 @@ static lv_res_t lv_ddlist_signal(lv_obj_t * ddlist, lv_signal_t sign, void * par
|
|||||||
lv_obj_invalidate(ddlist);
|
lv_obj_invalidate(ddlist);
|
||||||
}
|
}
|
||||||
} else if(c == LV_GROUP_KEY_ENTER) {
|
} else if(c == LV_GROUP_KEY_ENTER) {
|
||||||
// if(ext->opened) {
|
lv_indev_t * indev = lv_indev_get_act();
|
||||||
// ext->sel_opt_id_ori = ext->sel_opt_id;
|
if(lv_indev_get_type(indev) == LV_INDEV_TYPE_ENCODER) {
|
||||||
// ext->opened = 0;
|
lv_group_t * g = lv_obj_get_group(ddlist);
|
||||||
// res = lv_obj_send_event(ddlist, LV_EVENT_VALUE_CHANGED);
|
if(lv_group_get_editing(g)) {
|
||||||
// if(res != LV_RES_OK) return res;
|
lv_group_set_editing(g, false);
|
||||||
//#if LV_USE_GROUP
|
}
|
||||||
// lv_group_t * g = lv_obj_get_group(ddlist);
|
}
|
||||||
// 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 {
|
|
||||||
// ext->opened = 1;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// lv_ddlist_refr_size(ddlist, true);
|
|
||||||
} 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;
|
||||||
|
|||||||
Reference in New Issue
Block a user