Add textarea object

This commit is contained in:
fvanroie 2021-10-13 17:54:36 +02:00
parent d1783bbb15
commit 0217063690
6 changed files with 66 additions and 6 deletions

View File

@ -218,7 +218,7 @@ static bool my_line_set_points(lv_obj_t* obj, const char* payload)
}
}
my_line_clear_points(obj); // free previous pointlist
my_line_clear_points(obj); // free previous pointlist
lv_line_set_points(obj, point_arr, index); // arr.size());
return true;
}
@ -829,7 +829,8 @@ static hasp_attribute_type_t hasp_process_arc_attribute(lv_obj_t* obj, uint16_t
return HASP_ATTR_TYPE_INT;
}
static hasp_attribute_type_t hasp_process_spinner_attribute(lv_obj_t* obj, uint16_t attr_hash, int32_t& val, bool update)
static hasp_attribute_type_t hasp_process_spinner_attribute(lv_obj_t* obj, uint16_t attr_hash, int32_t& val,
bool update)
{
// We already know it's a spnner object
switch(attr_hash) {
@ -1182,6 +1183,13 @@ static hasp_attribute_type_t attribute_common_align(lv_obj_t* obj, const char* a
val = lv_label_get_align(obj);
break;
case LV_HASP_TEXTAREA:
if(update)
lv_textarea_set_text_align(obj, val);
else
val = my_textarea_get_text_align(obj);
break;
case LV_HASP_ROLLER:
if(update)
lv_roller_set_align(obj, val);
@ -1255,6 +1263,7 @@ static hasp_attribute_type_t attribute_common_text(lv_obj_t* obj, const char* at
{LV_HASP_LABEL, ATTR_TEXT, my_label_set_text, my_label_get_text},
{LV_HASP_CHECKBOX, ATTR_TEXT, lv_checkbox_set_text, lv_checkbox_get_text},
{LV_HASP_TABVIEW, ATTR_TEXT, my_tabview_set_text, my_tabview_get_text},
{LV_HASP_TEXTAREA, ATTR_TEXT, lv_textarea_set_text, lv_textarea_get_text},
{LV_HASP_TAB, ATTR_TEXT, my_tab_set_text, my_tab_get_text},
#if LV_USE_WIN != 0
{LV_HASP_WINDOW, ATTR_TEXT, lv_win_set_title, lv_win_get_title},
@ -1390,9 +1399,11 @@ static hasp_attribute_type_t specific_int_attribute(lv_obj_t* obj, uint16_t attr
{LV_HASP_SWITCH, ATTR_ANIM_TIME, lv_switch_set_anim_time, lv_switch_get_anim_time},
{LV_HASP_LIST, ATTR_ANIM_TIME, lv_list_set_anim_time, lv_list_get_anim_time},
{LV_HASP_MSGBOX, ATTR_ANIM_TIME, lv_msgbox_set_anim_time, lv_msgbox_get_anim_time},
{LV_HASP_PAGE, ATTR_ANIM_TIME, lv_page_set_anim_time, lv_page_get_anim_time},
{LV_HASP_ROLLER, ATTR_ANIM_TIME, lv_roller_set_anim_time, lv_roller_get_anim_time},
{LV_HASP_TABVIEW, ATTR_ANIM_TIME, lv_tabview_set_anim_time, lv_tabview_get_anim_time},
#if LVGL_VERSION_MAJOR == 7 && LV_USE_PAGE
{LV_HASP_PAGE, ATTR_ANIM_TIME, lv_page_set_anim_time, lv_page_get_anim_time},
#endif
#if LV_USE_WINDOW > 0
{LV_HASP_WINDOW, ATTR_ANIM_TIME, lv_win_set_anim_time, lv_win_get_anim_time},
#endif

View File

@ -3,6 +3,13 @@
#include "hasplib.h"
lv_label_align_t my_textarea_get_text_align(lv_obj_t* ta)
{
lv_textarea_ext_t* ext = (lv_textarea_ext_t*)lv_obj_get_ext_attr(ta);
lv_obj_t* label = lv_textarea_get_label(ta);
return lv_label_get_align(label);
}
const char* my_tabview_get_tab_name(const lv_obj_t* tabview, uint16_t id)
{
if(id >= lv_tabview_get_tab_count(tabview)) return NULL;

View File

@ -255,7 +255,7 @@ static void log_event(const char* name, lv_event_t event)
switch(event) {
case LV_EVENT_PRESSED:
LOG_TRACE(TAG_EVENT, "%s Pressed", name);
LOG_TRACE(TAG_EVENT, "%s Changed", name);
break;
case LV_EVENT_PRESS_LOST:
@ -348,6 +348,35 @@ void swipe_event_handler(lv_obj_t* obj, lv_event_t event)
}
}
/**
* Called when a textarea is clicked
* @param obj pointer to a textarea object
* @param event type of event that occured
*/
void textarea_event_handler(lv_obj_t* obj, lv_event_t event)
{
log_event("textarea", event);
if(event == LV_EVENT_VALUE_CHANGED) {
LOG_TRACE(TAG_EVENT, "Changed to: %s", lv_textarea_get_text(obj));
uint8_t hasp_event_id;
if(!translate_event(obj, event, hasp_event_id)) return;
char data[100];
char eventname[8];
Parser::get_event_name(hasp_event_id, eventname, sizeof(eventname));
snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"text\":\"%s\"}"), eventname,
lv_textarea_get_text(obj));
event_send_object_data(obj, data);
} else if(event == LV_EVENT_FOCUSED) {
lv_textarea_set_cursor_hidden(obj, false);
} else if(event == LV_EVENT_DEFOCUSED) {
lv_textarea_set_cursor_hidden(obj, true);
}
}
/**
* Called when a button-style object is clicked
* @param obj pointer to a button object

View File

@ -26,5 +26,6 @@ void btnmatrix_event_handler(lv_obj_t* obj, lv_event_t event);
void msgbox_event_handler(lv_obj_t* obj, lv_event_t event);
void cpicker_event_handler(lv_obj_t* obj, lv_event_t event);
void calendar_event_handler(lv_obj_t* obj, lv_event_t event);
void textarea_event_handler(lv_obj_t* obj, lv_event_t event);
#endif // HASP_EVENT_H

View File

@ -343,6 +343,16 @@ void hasp_new_object(const JsonObject& config, uint8_t& saved_page_id)
}
break;
case LV_HASP_TEXTAREA:
case HASP_OBJ_TEXTAREA:
obj = lv_textarea_create(parent_obj, NULL);
if(obj) {
lv_obj_set_event_cb(obj, textarea_event_handler);
lv_textarea_set_cursor_click_pos(obj, true);
obj->user_data.objid = LV_HASP_TEXTAREA;
}
break;
case LV_HASP_IMAGE:
case HASP_OBJ_IMG:
obj = lv_img_create(parent_obj, NULL);
@ -380,12 +390,14 @@ void hasp_new_object(const JsonObject& config, uint8_t& saved_page_id)
}
break;
#if LVGL_VERSION_MAJOR == 7 && LV_USE_PAGE
case LV_HASP_PAGE:
case HASP_OBJ_PAGE:
obj = lv_page_create(parent_obj, NULL);
if(obj) obj->user_data.objid = LV_HASP_PAGE;
// No event handler for pages
break;
#endif
#if LV_USE_WIN && LVGL_VERSION_MAJOR == 7
case LV_HASP_WINDOW:

View File

@ -291,7 +291,7 @@ void guiSetup()
/* Initialize GIF decoder */
#if HASP_USE_GIFDECODE > 0
// lv_gif_init();
// lv_gif_init();
#endif
/* Initialize JPG decoder */
@ -476,7 +476,7 @@ bool guiGetConfig(const JsonObject& settings)
}
changed = true;
#if TOUCH_DRIVER == 2046 && defined(USER_SETUP_LOADED) && defined(TOUCH_CS)
#if TOUCH_DRIVER == 2046 && defined(USER_SETUP_LOADED) && defined(TOUCH_CS)
// tft_espi_set_touch(gui_settings.cal_data);
haspTft.tft.setTouch(gui_settings.cal_data);
#endif