feat(textarea): add properties
Signed-off-by: Neo Xu <neo.xu1990@gmail.com>
This commit is contained in:
committed by
Gabor Kiss-Vamosi
parent
cd48c3c8d6
commit
357d5b7ff9
@@ -65,6 +65,7 @@ enum {
|
||||
LV_PROPERTY_IMAGE_START = 0x0200, /* lv_image.c */
|
||||
LV_PROPERTY_LABEL_START = 0x0300, /* lv_label.c */
|
||||
LV_PROPERTY_KEYBOARD_START = 0x0400, /* lv_keyboard.c */
|
||||
LV_PROPERTY_TEXTAREA_START = 0x0500, /* lv_textarea.c */
|
||||
|
||||
/*Special ID, use it to extend ID and make sure it's unique and compile time determinant*/
|
||||
LV_PROPERTY_ID_BUILTIN_LAST = 0xffff, /*ID of 0x10000 ~ 0xfffffff is reserved for user*/
|
||||
|
||||
@@ -15,5 +15,6 @@
|
||||
extern const lv_property_name_t lv_label_property_names[4];
|
||||
extern const lv_property_name_t lv_obj_property_names[73];
|
||||
extern const lv_property_name_t lv_style_property_names[112];
|
||||
extern const lv_property_name_t lv_textarea_property_names[15];
|
||||
#endif
|
||||
#endif
|
||||
|
||||
37
src/widgets/property/lv_textarea_properties.c
Normal file
37
src/widgets/property/lv_textarea_properties.c
Normal file
@@ -0,0 +1,37 @@
|
||||
|
||||
/**
|
||||
* GENERATED FILE, DO NOT EDIT IT!
|
||||
* @file lv_textarea_properties.c
|
||||
*/
|
||||
|
||||
#include "../textarea/lv_textarea.h"
|
||||
|
||||
#if LV_USE_OBJ_PROPERTY && LV_USE_OBJ_PROPERTY_NAME
|
||||
|
||||
#if LV_USE_TEXTAREA
|
||||
/**
|
||||
* Textarea widget property names, name must be in order.
|
||||
* Generated code from properties.py
|
||||
*/
|
||||
/* *INDENT-OFF* */
|
||||
const lv_property_name_t lv_textarea_property_names[15] = {
|
||||
{"accepted_chars", LV_PROPERTY_TEXTAREA_ACCEPTED_CHARS,},
|
||||
{"current_char", LV_PROPERTY_TEXTAREA_CURRENT_CHAR,},
|
||||
{"cursor_click_pos", LV_PROPERTY_TEXTAREA_CURSOR_CLICK_POS,},
|
||||
{"cursor_pos", LV_PROPERTY_TEXTAREA_CURSOR_POS,},
|
||||
{"insert_replace", LV_PROPERTY_TEXTAREA_INSERT_REPLACE,},
|
||||
{"label", LV_PROPERTY_TEXTAREA_LABEL,},
|
||||
{"max_length", LV_PROPERTY_TEXTAREA_MAX_LENGTH,},
|
||||
{"one_line", LV_PROPERTY_TEXTAREA_ONE_LINE,},
|
||||
{"password_bullet", LV_PROPERTY_TEXTAREA_PASSWORD_BULLET,},
|
||||
{"password_mode", LV_PROPERTY_TEXTAREA_PASSWORD_MODE,},
|
||||
{"password_show_time", LV_PROPERTY_TEXTAREA_PASSWORD_SHOW_TIME,},
|
||||
{"placeholder_text", LV_PROPERTY_TEXTAREA_PLACEHOLDER_TEXT,},
|
||||
{"text", LV_PROPERTY_TEXTAREA_TEXT,},
|
||||
{"text_is_selected", LV_PROPERTY_TEXTAREA_TEXT_IS_SELECTED,},
|
||||
{"text_selection", LV_PROPERTY_TEXTAREA_TEXT_SELECTION,},
|
||||
};
|
||||
#endif /*LV_USE_TEXTAREA*/
|
||||
|
||||
/* *INDENT-ON* */
|
||||
#endif
|
||||
@@ -67,6 +67,86 @@ static inline bool is_valid_but_non_printable_char(const uint32_t letter);
|
||||
/**********************
|
||||
* STATIC VARIABLES
|
||||
**********************/
|
||||
#if LV_USE_OBJ_PROPERTY
|
||||
static const lv_property_ops_t properties[] = {
|
||||
{
|
||||
.id = LV_PROPERTY_TEXTAREA_TEXT,
|
||||
.setter = lv_textarea_set_text,
|
||||
.getter = lv_textarea_get_text,
|
||||
},
|
||||
{
|
||||
.id = LV_PROPERTY_TEXTAREA_PLACEHOLDER_TEXT,
|
||||
.setter = lv_textarea_set_placeholder_text,
|
||||
.getter = lv_textarea_get_placeholder_text,
|
||||
},
|
||||
{
|
||||
.id = LV_PROPERTY_TEXTAREA_CURSOR_POS,
|
||||
.setter = lv_textarea_set_cursor_pos,
|
||||
.getter = lv_textarea_get_cursor_pos,
|
||||
},
|
||||
{
|
||||
.id = LV_PROPERTY_TEXTAREA_CURSOR_CLICK_POS,
|
||||
.setter = lv_textarea_set_cursor_click_pos,
|
||||
.getter = lv_textarea_get_cursor_click_pos,
|
||||
},
|
||||
{
|
||||
.id = LV_PROPERTY_TEXTAREA_PASSWORD_MODE,
|
||||
.setter = lv_textarea_set_password_mode,
|
||||
.getter = lv_textarea_get_password_mode,
|
||||
},
|
||||
{
|
||||
.id = LV_PROPERTY_TEXTAREA_PASSWORD_BULLET,
|
||||
.setter = lv_textarea_set_password_bullet,
|
||||
.getter = lv_textarea_get_password_bullet,
|
||||
},
|
||||
{
|
||||
.id = LV_PROPERTY_TEXTAREA_ONE_LINE,
|
||||
.setter = lv_textarea_set_one_line,
|
||||
.getter = lv_textarea_get_one_line,
|
||||
},
|
||||
{
|
||||
.id = LV_PROPERTY_TEXTAREA_ACCEPTED_CHARS,
|
||||
.setter = lv_textarea_set_accepted_chars,
|
||||
.getter = lv_textarea_get_accepted_chars,
|
||||
},
|
||||
{
|
||||
.id = LV_PROPERTY_TEXTAREA_MAX_LENGTH,
|
||||
.setter = lv_textarea_set_max_length,
|
||||
.getter = lv_textarea_get_max_length,
|
||||
},
|
||||
{
|
||||
.id = LV_PROPERTY_TEXTAREA_INSERT_REPLACE,
|
||||
.setter = lv_textarea_set_insert_replace,
|
||||
.getter = NULL,
|
||||
},
|
||||
{
|
||||
.id = LV_PROPERTY_TEXTAREA_TEXT_SELECTION,
|
||||
.setter = lv_textarea_set_text_selection,
|
||||
.getter = lv_textarea_get_text_selection,
|
||||
},
|
||||
{
|
||||
.id = LV_PROPERTY_TEXTAREA_PASSWORD_SHOW_TIME,
|
||||
.setter = lv_textarea_set_password_show_time,
|
||||
.getter = lv_textarea_get_password_show_time,
|
||||
},
|
||||
{
|
||||
.id = LV_PROPERTY_TEXTAREA_LABEL,
|
||||
.setter = NULL,
|
||||
.getter = lv_textarea_get_label,
|
||||
},
|
||||
{
|
||||
.id = LV_PROPERTY_TEXTAREA_TEXT_IS_SELECTED,
|
||||
.setter = NULL,
|
||||
.getter = lv_textarea_text_is_selected,
|
||||
},
|
||||
{
|
||||
.id = LV_PROPERTY_TEXTAREA_CURRENT_CHAR,
|
||||
.setter = NULL,
|
||||
.getter = lv_textarea_get_current_char,
|
||||
},
|
||||
};
|
||||
#endif
|
||||
|
||||
const lv_obj_class_t lv_textarea_class = {
|
||||
.constructor_cb = lv_textarea_constructor,
|
||||
.destructor_cb = lv_textarea_destructor,
|
||||
@@ -78,6 +158,18 @@ const lv_obj_class_t lv_textarea_class = {
|
||||
.instance_size = sizeof(lv_textarea_t),
|
||||
.base_class = &lv_obj_class,
|
||||
.name = "textarea",
|
||||
#if LV_USE_OBJ_PROPERTY
|
||||
.prop_index_start = LV_PROPERTY_TEXTAREA_START,
|
||||
.prop_index_end = LV_PROPERTY_TEXTAREA_END,
|
||||
.properties = properties,
|
||||
.properties_count = sizeof(properties) / sizeof(properties[0]),
|
||||
|
||||
#if LV_USE_OBJ_PROPERTY_NAME
|
||||
.property_names = lv_textarea_property_names,
|
||||
.names_count = sizeof(lv_textarea_property_names) / sizeof(lv_property_name_t),
|
||||
#endif
|
||||
|
||||
#endif
|
||||
};
|
||||
|
||||
static const char * ta_insert_replace;
|
||||
|
||||
@@ -33,6 +33,27 @@ LV_EXPORT_CONST_INT(LV_TEXTAREA_CURSOR_LAST);
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
#if LV_USE_OBJ_PROPERTY
|
||||
enum {
|
||||
LV_PROPERTY_ID(TEXTAREA, TEXT, LV_PROPERTY_TYPE_TEXT, 0),
|
||||
LV_PROPERTY_ID(TEXTAREA, PLACEHOLDER_TEXT, LV_PROPERTY_TYPE_TEXT, 1),
|
||||
LV_PROPERTY_ID(TEXTAREA, CURSOR_POS, LV_PROPERTY_TYPE_INT, 2),
|
||||
LV_PROPERTY_ID(TEXTAREA, CURSOR_CLICK_POS, LV_PROPERTY_TYPE_INT, 3),
|
||||
LV_PROPERTY_ID(TEXTAREA, PASSWORD_MODE, LV_PROPERTY_TYPE_INT, 4),
|
||||
LV_PROPERTY_ID(TEXTAREA, PASSWORD_BULLET, LV_PROPERTY_TYPE_TEXT, 5),
|
||||
LV_PROPERTY_ID(TEXTAREA, ONE_LINE, LV_PROPERTY_TYPE_BOOL, 6),
|
||||
LV_PROPERTY_ID(TEXTAREA, ACCEPTED_CHARS, LV_PROPERTY_TYPE_TEXT, 7),
|
||||
LV_PROPERTY_ID(TEXTAREA, MAX_LENGTH, LV_PROPERTY_TYPE_INT, 8),
|
||||
LV_PROPERTY_ID(TEXTAREA, INSERT_REPLACE, LV_PROPERTY_TYPE_TEXT, 9),
|
||||
LV_PROPERTY_ID(TEXTAREA, TEXT_SELECTION, LV_PROPERTY_TYPE_BOOL, 10),
|
||||
LV_PROPERTY_ID(TEXTAREA, PASSWORD_SHOW_TIME, LV_PROPERTY_TYPE_INT, 11),
|
||||
LV_PROPERTY_ID(TEXTAREA, LABEL, LV_PROPERTY_TYPE_OBJ, 12),
|
||||
LV_PROPERTY_ID(TEXTAREA, TEXT_IS_SELECTED, LV_PROPERTY_TYPE_INT, 13),
|
||||
LV_PROPERTY_ID(TEXTAREA, CURRENT_CHAR, LV_PROPERTY_TYPE_INT, 14),
|
||||
LV_PROPERTY_TEXTAREA_END,
|
||||
};
|
||||
#endif
|
||||
|
||||
LV_ATTRIBUTE_EXTERN_DATA extern const lv_obj_class_t lv_textarea_class;
|
||||
|
||||
enum {
|
||||
|
||||
@@ -134,4 +134,83 @@ void test_textarea_should_hide_password_characters(void)
|
||||
TEST_ASSERT_EQUAL_STRING("OO", lv_label_get_text(lv_textarea_get_label(textarea)));
|
||||
}
|
||||
|
||||
void test_textarea_properties(void)
|
||||
{
|
||||
#if LV_USE_OBJ_PROPERTY
|
||||
lv_property_t prop = { };
|
||||
lv_obj_t * obj = lv_textarea_create(lv_screen_active());
|
||||
|
||||
prop.id = LV_PROPERTY_TEXTAREA_TEXT;
|
||||
prop.ptr = "Hello World!";
|
||||
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
|
||||
TEST_ASSERT_EQUAL_STRING("Hello World!", lv_textarea_get_text(obj));
|
||||
TEST_ASSERT_EQUAL_STRING("Hello World!", lv_obj_get_property(obj, LV_PROPERTY_TEXTAREA_TEXT).ptr);
|
||||
|
||||
prop.id = LV_PROPERTY_TEXTAREA_PLACEHOLDER_TEXT;
|
||||
prop.ptr = "Hello!";
|
||||
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
|
||||
TEST_ASSERT_EQUAL_STRING("Hello!", lv_textarea_get_placeholder_text(obj));
|
||||
TEST_ASSERT_EQUAL_STRING("Hello!", lv_obj_get_property(obj, LV_PROPERTY_TEXTAREA_PLACEHOLDER_TEXT).ptr);
|
||||
|
||||
prop.id = LV_PROPERTY_TEXTAREA_CURSOR_POS;
|
||||
prop.num = 5;
|
||||
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
|
||||
TEST_ASSERT_EQUAL_INT(5, lv_textarea_get_cursor_pos(obj));
|
||||
TEST_ASSERT_EQUAL_INT(5, lv_obj_get_property(obj, LV_PROPERTY_TEXTAREA_CURSOR_POS).num);
|
||||
|
||||
prop.id = LV_PROPERTY_TEXTAREA_CURSOR_CLICK_POS;
|
||||
prop.num = 1;
|
||||
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
|
||||
TEST_ASSERT_EQUAL_INT(1, lv_textarea_get_cursor_click_pos(obj));
|
||||
TEST_ASSERT_EQUAL_INT(1, lv_obj_get_property(obj, LV_PROPERTY_TEXTAREA_CURSOR_CLICK_POS).num);
|
||||
|
||||
prop.id = LV_PROPERTY_TEXTAREA_PASSWORD_MODE;
|
||||
prop.num = true;
|
||||
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
|
||||
TEST_ASSERT_TRUE(lv_textarea_get_password_mode(obj));
|
||||
TEST_ASSERT_TRUE(lv_obj_get_property(obj, LV_PROPERTY_TEXTAREA_PASSWORD_MODE).num);
|
||||
|
||||
prop.id = LV_PROPERTY_TEXTAREA_PASSWORD_BULLET;
|
||||
prop.ptr = "password bullet";
|
||||
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
|
||||
TEST_ASSERT_EQUAL_STRING("password bullet", lv_textarea_get_password_bullet(obj));
|
||||
TEST_ASSERT_EQUAL_STRING("password bullet", lv_obj_get_property(obj, LV_PROPERTY_TEXTAREA_PASSWORD_BULLET).ptr);
|
||||
|
||||
prop.id = LV_PROPERTY_TEXTAREA_ONE_LINE;
|
||||
prop.enable = true;
|
||||
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
|
||||
TEST_ASSERT_EQUAL_INT(true, lv_textarea_get_one_line(obj));
|
||||
TEST_ASSERT_EQUAL_INT(true, lv_obj_get_property(obj, LV_PROPERTY_TEXTAREA_ONE_LINE).enable);
|
||||
|
||||
prop.id = LV_PROPERTY_TEXTAREA_ACCEPTED_CHARS;
|
||||
prop.ptr = "ABCDEF";
|
||||
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
|
||||
TEST_ASSERT_EQUAL_STRING("ABCDEF", lv_textarea_get_accepted_chars(obj));
|
||||
TEST_ASSERT_EQUAL_STRING("ABCDEF", lv_obj_get_property(obj, LV_PROPERTY_TEXTAREA_ACCEPTED_CHARS).ptr);
|
||||
|
||||
prop.id = LV_PROPERTY_TEXTAREA_MAX_LENGTH;
|
||||
prop.num = 10;
|
||||
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
|
||||
TEST_ASSERT_EQUAL_INT(10, lv_textarea_get_max_length(obj));
|
||||
TEST_ASSERT_EQUAL_INT(10, lv_obj_get_property(obj, LV_PROPERTY_TEXTAREA_MAX_LENGTH).num);
|
||||
|
||||
prop.id = LV_PROPERTY_TEXTAREA_INSERT_REPLACE;
|
||||
prop.ptr = "abcdef";
|
||||
/*No getter function for this property*/
|
||||
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
|
||||
|
||||
prop.id = LV_PROPERTY_TEXTAREA_TEXT_SELECTION;
|
||||
prop.num = true;
|
||||
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
|
||||
TEST_ASSERT_EQUAL_INT(true, lv_textarea_get_text_selection(obj));
|
||||
TEST_ASSERT_EQUAL_INT(true, lv_obj_get_property(obj, LV_PROPERTY_TEXTAREA_TEXT_SELECTION).enable);
|
||||
|
||||
prop.id = LV_PROPERTY_TEXTAREA_PASSWORD_SHOW_TIME;
|
||||
prop.num = 10;
|
||||
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
|
||||
TEST_ASSERT_EQUAL_INT(10, lv_textarea_get_password_show_time(obj));
|
||||
TEST_ASSERT_EQUAL_INT(10, lv_obj_get_property(obj, LV_PROPERTY_TEXTAREA_PASSWORD_SHOW_TIME).num);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user