mirror of
https://github.com/lvgl/lvgl.git
synced 2026-05-20 21:35:19 +08:00
feat(dropdown): add properties
Signed-off-by: Neo Xu <neo.xu1990@gmail.com>
This commit is contained in:
committed by
Gabor Kiss-Vamosi
parent
a793178bbf
commit
7c1a8a523d
@@ -67,6 +67,7 @@ enum {
|
||||
LV_PROPERTY_KEYBOARD_START = 0x0400, /* lv_keyboard.c */
|
||||
LV_PROPERTY_TEXTAREA_START = 0x0500, /* lv_textarea.c */
|
||||
LV_PROPERTY_ROLLER_START = 0x0600, /* lv_roller.c */
|
||||
LV_PROPERTY_DROPDOWN_START = 0x0700, /* lv_dropdown.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*/
|
||||
|
||||
@@ -62,6 +62,55 @@ static lv_obj_t * get_label(const lv_obj_t * obj);
|
||||
/**********************
|
||||
* STATIC VARIABLES
|
||||
**********************/
|
||||
#if LV_USE_OBJ_PROPERTY
|
||||
static const lv_property_ops_t properties[] = {
|
||||
{
|
||||
.id = LV_PROPERTY_DROPDOWN_TEXT,
|
||||
.setter = lv_dropdown_set_text,
|
||||
.getter = lv_dropdown_get_text,
|
||||
},
|
||||
{
|
||||
.id = LV_PROPERTY_DROPDOWN_OPTIONS,
|
||||
.setter = lv_dropdown_set_options,
|
||||
.getter = lv_dropdown_get_options,
|
||||
},
|
||||
{
|
||||
.id = LV_PROPERTY_DROPDOWN_OPTION_COUNT,
|
||||
.setter = NULL,
|
||||
.getter = lv_dropdown_get_option_count,
|
||||
},
|
||||
{
|
||||
.id = LV_PROPERTY_DROPDOWN_SELECTED,
|
||||
.setter = lv_dropdown_set_selected,
|
||||
.getter = lv_dropdown_get_selected,
|
||||
},
|
||||
{
|
||||
.id = LV_PROPERTY_DROPDOWN_DIR,
|
||||
.setter = lv_dropdown_set_dir,
|
||||
.getter = lv_dropdown_get_dir,
|
||||
},
|
||||
{
|
||||
.id = LV_PROPERTY_DROPDOWN_SYMBOL,
|
||||
.setter = lv_dropdown_set_symbol,
|
||||
.getter = lv_dropdown_get_symbol,
|
||||
},
|
||||
{
|
||||
.id = LV_PROPERTY_DROPDOWN_SELECTED_HIGHLIGHT,
|
||||
.setter = lv_dropdown_set_selected_highlight,
|
||||
.getter = lv_dropdown_get_selected_highlight,
|
||||
},
|
||||
{
|
||||
.id = LV_PROPERTY_DROPDOWN_LIST,
|
||||
.setter = NULL,
|
||||
.getter = lv_dropdown_get_list,
|
||||
},
|
||||
{
|
||||
.id = LV_PROPERTY_DROPDOWN_IS_OPEN,
|
||||
.setter = NULL,
|
||||
.getter = lv_dropdown_is_open,
|
||||
},
|
||||
};
|
||||
#endif
|
||||
|
||||
const lv_obj_class_t lv_dropdown_class = {
|
||||
.constructor_cb = lv_dropdown_constructor,
|
||||
@@ -74,6 +123,17 @@ const lv_obj_class_t lv_dropdown_class = {
|
||||
.group_def = LV_OBJ_CLASS_GROUP_DEF_TRUE,
|
||||
.base_class = &lv_obj_class,
|
||||
.name = "dropdown",
|
||||
#if LV_USE_OBJ_PROPERTY
|
||||
.prop_index_start = LV_PROPERTY_DROPDOWN_START,
|
||||
.prop_index_end = LV_PROPERTY_DROPDOWN_END,
|
||||
.properties = properties,
|
||||
.properties_count = sizeof(properties) / sizeof(properties[0]),
|
||||
|
||||
#if LV_USE_OBJ_PROPERTY_NAME
|
||||
.property_names = lv_dropdown_property_names,
|
||||
.names_count = sizeof(lv_dropdown_property_names) / sizeof(lv_property_name_t),
|
||||
#endif
|
||||
#endif
|
||||
};
|
||||
|
||||
const lv_obj_class_t lv_dropdownlist_class = {
|
||||
|
||||
@@ -31,6 +31,22 @@ extern "C" {
|
||||
#define LV_DROPDOWN_POS_LAST 0xFFFF
|
||||
LV_EXPORT_CONST_INT(LV_DROPDOWN_POS_LAST);
|
||||
|
||||
#if LV_USE_OBJ_PROPERTY
|
||||
enum {
|
||||
LV_PROPERTY_ID(DROPDOWN, TEXT, LV_PROPERTY_TYPE_TEXT, 0),
|
||||
LV_PROPERTY_ID(DROPDOWN, OPTIONS, LV_PROPERTY_TYPE_TEXT, 1),
|
||||
LV_PROPERTY_ID(DROPDOWN, OPTION_COUNT, LV_PROPERTY_TYPE_INT, 2),
|
||||
LV_PROPERTY_ID(DROPDOWN, SELECTED, LV_PROPERTY_TYPE_INT, 3),
|
||||
// LV_PROPERTY_ID(DROPDOWN, SELECTED_STR, LV_PROPERTY_TYPE_TEXT, 4),
|
||||
LV_PROPERTY_ID(DROPDOWN, DIR, LV_PROPERTY_TYPE_INT, 5),
|
||||
LV_PROPERTY_ID(DROPDOWN, SYMBOL, LV_PROPERTY_TYPE_TEXT, 6),
|
||||
LV_PROPERTY_ID(DROPDOWN, SELECTED_HIGHLIGHT, LV_PROPERTY_TYPE_INT, 7),
|
||||
LV_PROPERTY_ID(DROPDOWN, LIST, LV_PROPERTY_TYPE_OBJ, 8),
|
||||
LV_PROPERTY_ID(DROPDOWN, IS_OPEN, LV_PROPERTY_TYPE_BOOL, 9),
|
||||
LV_PROPERTY_DROPDOWN_END,
|
||||
};
|
||||
#endif
|
||||
|
||||
LV_ATTRIBUTE_EXTERN_DATA extern const lv_obj_class_t lv_dropdown_class;
|
||||
LV_ATTRIBUTE_EXTERN_DATA extern const lv_obj_class_t lv_dropdownlist_class;
|
||||
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
|
||||
/**
|
||||
* GENERATED FILE, DO NOT EDIT IT!
|
||||
* @file lv_dropdown_properties.c
|
||||
*/
|
||||
|
||||
#include "../dropdown/lv_dropdown.h"
|
||||
|
||||
#if LV_USE_OBJ_PROPERTY && LV_USE_OBJ_PROPERTY_NAME
|
||||
|
||||
#if LV_USE_DROPDOWN
|
||||
/**
|
||||
* Dropdown widget property names, name must be in order.
|
||||
* Generated code from properties.py
|
||||
*/
|
||||
/* *INDENT-OFF* */
|
||||
const lv_property_name_t lv_dropdown_property_names[9] = {
|
||||
{"dir", LV_PROPERTY_DROPDOWN_DIR,},
|
||||
{"is_open", LV_PROPERTY_DROPDOWN_IS_OPEN,},
|
||||
{"list", LV_PROPERTY_DROPDOWN_LIST,},
|
||||
{"option_count", LV_PROPERTY_DROPDOWN_OPTION_COUNT,},
|
||||
{"options", LV_PROPERTY_DROPDOWN_OPTIONS,},
|
||||
{"selected", LV_PROPERTY_DROPDOWN_SELECTED,},
|
||||
{"selected_highlight", LV_PROPERTY_DROPDOWN_SELECTED_HIGHLIGHT,},
|
||||
{"symbol", LV_PROPERTY_DROPDOWN_SYMBOL,},
|
||||
{"text", LV_PROPERTY_DROPDOWN_TEXT,},
|
||||
};
|
||||
#endif /*LV_USE_DROPDOWN*/
|
||||
|
||||
/* *INDENT-ON* */
|
||||
#endif
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
#if LV_USE_OBJ_PROPERTY && LV_USE_OBJ_PROPERTY_NAME
|
||||
|
||||
extern const lv_property_name_t lv_dropdown_property_names[9];
|
||||
extern const lv_property_name_t lv_image_property_names[11];
|
||||
extern const lv_property_name_t lv_keyboard_property_names[4];
|
||||
extern const lv_property_name_t lv_label_property_names[4];
|
||||
|
||||
@@ -452,4 +452,59 @@ void test_dropdown_get_options_should_check_lengths(void)
|
||||
TEST_ASSERT_EQUAL_INT(-1, lv_dropdown_get_option_index(dd, "Option "));
|
||||
}
|
||||
|
||||
void test_dropdown_properties(void)
|
||||
{
|
||||
#if LV_USE_OBJ_PROPERTY
|
||||
lv_obj_t * obj = lv_dropdown_create(lv_screen_active());
|
||||
lv_property_t prop = { };
|
||||
|
||||
prop.id = LV_PROPERTY_DROPDOWN_TEXT;
|
||||
prop.ptr = "Hello";
|
||||
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
|
||||
TEST_ASSERT_EQUAL_STRING("Hello", lv_dropdown_get_text(obj));
|
||||
TEST_ASSERT_EQUAL_STRING("Hello", lv_obj_get_property(obj, LV_PROPERTY_DROPDOWN_TEXT).ptr);
|
||||
|
||||
prop.id = LV_PROPERTY_DROPDOWN_OPTIONS;
|
||||
prop.ptr = "Option 1\nOption 2";
|
||||
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
|
||||
TEST_ASSERT_EQUAL_STRING("Option 1\nOption 2", lv_dropdown_get_options(obj));
|
||||
TEST_ASSERT_EQUAL_STRING("Option 1\nOption 2", lv_obj_get_property(obj, LV_PROPERTY_DROPDOWN_OPTIONS).ptr);
|
||||
|
||||
TEST_ASSERT_EQUAL(2, lv_dropdown_get_option_count(obj));
|
||||
TEST_ASSERT_EQUAL(2, lv_obj_get_property(obj, LV_PROPERTY_DROPDOWN_OPTION_COUNT).num);
|
||||
|
||||
prop.id = LV_PROPERTY_DROPDOWN_SELECTED;
|
||||
prop.num = 1;
|
||||
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
|
||||
TEST_ASSERT_EQUAL_INT(1, lv_dropdown_get_selected(obj));
|
||||
TEST_ASSERT_EQUAL_INT(1, lv_obj_get_property(obj, LV_PROPERTY_DROPDOWN_SELECTED).num);
|
||||
|
||||
prop.id = LV_PROPERTY_DROPDOWN_DIR;
|
||||
prop.num = LV_DIR_LEFT;
|
||||
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
|
||||
TEST_ASSERT_EQUAL_INT(LV_DIR_LEFT, lv_dropdown_get_dir(obj));
|
||||
TEST_ASSERT_EQUAL_INT(LV_DIR_LEFT, lv_obj_get_property(obj, LV_PROPERTY_DROPDOWN_DIR).num);
|
||||
|
||||
prop.id = LV_PROPERTY_DROPDOWN_SYMBOL;
|
||||
prop.ptr = LV_SYMBOL_DOWN;
|
||||
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
|
||||
TEST_ASSERT_EQUAL_STRING(LV_SYMBOL_DOWN, lv_dropdown_get_symbol(obj));
|
||||
TEST_ASSERT_EQUAL_STRING(LV_SYMBOL_DOWN, lv_obj_get_property(obj, LV_PROPERTY_DROPDOWN_SYMBOL).ptr);
|
||||
|
||||
prop.id = LV_PROPERTY_DROPDOWN_SELECTED_HIGHLIGHT;
|
||||
prop.num = true;
|
||||
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
|
||||
TEST_ASSERT_TRUE(lv_dropdown_get_selected_highlight(obj));
|
||||
TEST_ASSERT_TRUE(lv_obj_get_property(obj, LV_PROPERTY_DROPDOWN_SELECTED_HIGHLIGHT).num);
|
||||
|
||||
lv_dropdown_open(obj);
|
||||
TEST_ASSERT_TRUE(lv_dropdown_is_open(obj));
|
||||
TEST_ASSERT_TRUE(lv_obj_get_property(obj, LV_PROPERTY_DROPDOWN_IS_OPEN).enable);
|
||||
lv_dropdown_close(obj);
|
||||
TEST_ASSERT_FALSE(lv_dropdown_is_open(obj));
|
||||
TEST_ASSERT_FALSE(lv_obj_get_property(obj, LV_PROPERTY_DROPDOWN_IS_OPEN).enable);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user