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_IMAGE_START = 0x0200, /* lv_image.c */
|
||||||
LV_PROPERTY_LABEL_START = 0x0300, /* lv_label.c */
|
LV_PROPERTY_LABEL_START = 0x0300, /* lv_label.c */
|
||||||
LV_PROPERTY_KEYBOARD_START = 0x0400, /* lv_keyboard.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*/
|
/*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*/
|
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_label_property_names[4];
|
||||||
extern const lv_property_name_t lv_obj_property_names[73];
|
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_style_property_names[112];
|
||||||
|
extern const lv_property_name_t lv_textarea_property_names[15];
|
||||||
#endif
|
#endif
|
||||||
#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
|
* 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 = {
|
const lv_obj_class_t lv_textarea_class = {
|
||||||
.constructor_cb = lv_textarea_constructor,
|
.constructor_cb = lv_textarea_constructor,
|
||||||
.destructor_cb = lv_textarea_destructor,
|
.destructor_cb = lv_textarea_destructor,
|
||||||
@@ -78,6 +158,18 @@ const lv_obj_class_t lv_textarea_class = {
|
|||||||
.instance_size = sizeof(lv_textarea_t),
|
.instance_size = sizeof(lv_textarea_t),
|
||||||
.base_class = &lv_obj_class,
|
.base_class = &lv_obj_class,
|
||||||
.name = "textarea",
|
.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;
|
static const char * ta_insert_replace;
|
||||||
|
|||||||
@@ -33,6 +33,27 @@ LV_EXPORT_CONST_INT(LV_TEXTAREA_CURSOR_LAST);
|
|||||||
* TYPEDEFS
|
* 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;
|
LV_ATTRIBUTE_EXTERN_DATA extern const lv_obj_class_t lv_textarea_class;
|
||||||
|
|
||||||
enum {
|
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)));
|
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
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user