1 /**
2  * @file lv_list.c
3  *
4  */
5 
6 /*********************
7  *      INCLUDES
8  *********************/
9 #include "lv_list.h"
10 #include "../../../core/lv_disp.h"
11 #include "../../../widgets/lv_label.h"
12 #include "../../../widgets/lv_img.h"
13 #include "../../../widgets/lv_btn.h"
14 
15 #if LV_USE_LIST
16 
17 /*********************
18  *      DEFINES
19  *********************/
20 #define MV_CLASS &lv_list
21 
22 /**********************
23  *      TYPEDEFS
24  **********************/
25 
26 /**********************
27  *  STATIC PROTOTYPES
28  **********************/
29 
30 const lv_obj_class_t lv_list_class = {
31     .base_class = &lv_obj_class,
32     .width_def = (LV_DPI_DEF * 3) / 2,
33     .height_def = LV_DPI_DEF * 2
34 };
35 
36 const lv_obj_class_t lv_list_btn_class = {
37     .base_class = &lv_btn_class,
38 };
39 
40 const lv_obj_class_t lv_list_text_class = {
41     .base_class = &lv_label_class,
42 };
43 
44 /**********************
45  *  STATIC VARIABLES
46  **********************/
47 
48 /**********************
49  *      MACROS
50  **********************/
51 
52 /**********************
53  *   GLOBAL FUNCTIONS
54  **********************/
55 
lv_list_create(lv_obj_t * parent)56 lv_obj_t * lv_list_create(lv_obj_t * parent)
57 {
58     LV_LOG_INFO("begin");
59     lv_obj_t * obj = lv_obj_class_create_obj(&lv_list_class, parent);
60     lv_obj_class_init_obj(obj);
61     lv_obj_set_flex_flow(obj, LV_FLEX_FLOW_COLUMN);
62     return obj;
63 }
64 
lv_list_add_text(lv_obj_t * list,const char * txt)65 lv_obj_t * lv_list_add_text(lv_obj_t * list, const char * txt)
66 {
67     LV_LOG_INFO("begin");
68     lv_obj_t * obj = lv_obj_class_create_obj(&lv_list_text_class, list);
69     lv_obj_class_init_obj(obj);
70     lv_label_set_text(obj, txt);
71     lv_label_set_long_mode(obj, LV_LABEL_LONG_SCROLL_CIRCULAR);
72     lv_obj_set_width(obj, LV_PCT(100));
73     return obj;
74 }
75 
lv_list_add_btn(lv_obj_t * list,const void * icon,const char * txt)76 lv_obj_t * lv_list_add_btn(lv_obj_t * list, const void * icon, const char * txt)
77 {
78     LV_LOG_INFO("begin");
79     lv_obj_t * obj = lv_obj_class_create_obj(&lv_list_btn_class, list);
80     lv_obj_class_init_obj(obj);
81     lv_obj_set_size(obj, LV_PCT(100), LV_SIZE_CONTENT);
82     lv_obj_set_flex_flow(obj, LV_FLEX_FLOW_ROW);
83 
84 #if LV_USE_IMG == 1
85     if(icon) {
86         lv_obj_t * img = lv_img_create(obj);
87         lv_img_set_src(img, icon);
88     }
89 #endif
90 
91     if(txt) {
92         lv_obj_t * label = lv_label_create(obj);
93         lv_label_set_text(label, txt);
94         lv_label_set_long_mode(label, LV_LABEL_LONG_SCROLL_CIRCULAR);
95         lv_obj_set_flex_grow(label, 1);
96     }
97 
98     return obj;
99 }
100 
lv_list_get_btn_text(lv_obj_t * list,lv_obj_t * btn)101 const char * lv_list_get_btn_text(lv_obj_t * list, lv_obj_t * btn)
102 {
103     LV_UNUSED(list);
104     uint32_t i;
105     for(i = 0; i < lv_obj_get_child_cnt(btn); i++) {
106         lv_obj_t * child = lv_obj_get_child(btn, i);
107         if(lv_obj_check_type(child, &lv_label_class)) {
108             return lv_label_get_text(child);
109         }
110 
111     }
112 
113     return "";
114 }
115 
116 /**********************
117  *   STATIC FUNCTIONS
118  **********************/
119 
120 #endif /*LV_USE_LIST*/
121