1 /**
2  * @file lv_roller.h
3  *
4  */
5 
6 #ifndef LV_ROLLER_H
7 #define LV_ROLLER_H
8 
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 /*********************
14  *      INCLUDES
15  *********************/
16 #ifdef LV_CONF_INCLUDE_SIMPLE
17 #include "lv_conf.h"
18 #else
19 #include "../../lv_conf.h"
20 #endif
21 
22 #if LV_USE_ROLLER != 0
23 
24 /*Testing of dependencies*/
25 #if LV_USE_DDLIST == 0
26 #error "lv_roller: lv_ddlist is required. Enable it in lv_conf.h (LV_USE_DDLIST  1) "
27 #endif
28 
29 #include "../lv_core/lv_obj.h"
30 #include "lv_ddlist.h"
31 #include "lv_label.h"
32 
33 /*********************
34  *      DEFINES
35  *********************/
36 
37 /**********************
38  *      TYPEDEFS
39  **********************/
40 
41 /** Roller mode. */
42 enum {
43     LV_ROLLER_MODE_NORMAL, /**< Normal mode (roller ends at the end of the options). */
44     LV_ROLLER_MODE_INIFINITE, /**< Infinite mode (roller can be scrolled forever). */
45 };
46 
47 typedef uint8_t lv_roller_mode_t;
48 
49 
50 
51 /*Data of roller*/
52 typedef struct
53 {
54     lv_ddlist_ext_t ddlist; /*Ext. of ancestor*/
55     /*New data for this type */
56     lv_roller_mode_t mode : 1;
57 } lv_roller_ext_t;
58 
59 enum {
60     LV_ROLLER_STYLE_BG,
61     LV_ROLLER_STYLE_SEL,
62 };
63 typedef uint8_t lv_roller_style_t;
64 
65 /**********************
66  * GLOBAL PROTOTYPES
67  **********************/
68 
69 /**
70  * Create a roller object
71  * @param par pointer to an object, it will be the parent of the new roller
72  * @param copy pointer to a roller object, if not NULL then the new object will be copied from it
73  * @return pointer to the created roller
74  */
75 lv_obj_t * lv_roller_create(lv_obj_t * par, const lv_obj_t * copy);
76 
77 /*=====================
78  * Setter functions
79  *====================*/
80 
81 /**
82  * Set the options on a roller
83  * @param roller pointer to roller object
84  * @param options a string with '\n' separated options. E.g. "One\nTwo\nThree"
85  * @param mode `LV_ROLLER_MODE_NORMAL` or `LV_ROLLER_MODE_INFINITE`
86  */
87 void lv_roller_set_options(lv_obj_t * roller, const char * options, lv_roller_mode_t mode);
88 
89 /**
90  * Set the align of the roller's options (left, right or center[default])
91  * @param roller - pointer to a roller object
92  * @param align - one of lv_label_align_t values (left, right, center)
93  */
94 void lv_roller_set_align(lv_obj_t * roller, lv_label_align_t align);
95 
96 /**
97  * Set the selected option
98  * @param roller pointer to a roller object
99  * @param sel_opt id of the selected option (0 ... number of option - 1);
100  * @param anim LV_ANOM_ON: set with animation; LV_ANIM_OFF set immediately
101  */
102 void lv_roller_set_selected(lv_obj_t * roller, uint16_t sel_opt, lv_anim_enable_t anim);
103 
104 /**
105  * Set the height to show the given number of rows (options)
106  * @param roller pointer to a roller object
107  * @param row_cnt number of desired visible rows
108  */
109 void lv_roller_set_visible_row_count(lv_obj_t * roller, uint8_t row_cnt);
110 
111 /**
112  * Set a fix width for the drop down list
113  * @param roller pointer to a roller obejct
114  * @param w the width when the list is opened (0: auto size)
115  */
lv_roller_set_fix_width(lv_obj_t * roller,lv_coord_t w)116 static inline void lv_roller_set_fix_width(lv_obj_t * roller, lv_coord_t w)
117 {
118     lv_ddlist_set_fix_width(roller, w);
119 }
120 
121 /**
122  * Set the open/close animation time.
123  * @param roller pointer to a roller object
124  * @param anim_time: open/close animation time [ms]
125  */
lv_roller_set_anim_time(lv_obj_t * roller,uint16_t anim_time)126 static inline void lv_roller_set_anim_time(lv_obj_t * roller, uint16_t anim_time)
127 {
128     lv_ddlist_set_anim_time(roller, anim_time);
129 }
130 
131 /**
132  * Set a style of a roller
133  * @param roller pointer to a roller object
134  * @param type which style should be set
135  * @param style pointer to a style
136  */
137 void lv_roller_set_style(lv_obj_t * roller, lv_roller_style_t type, const lv_style_t * style);
138 
139 /*=====================
140  * Getter functions
141  *====================*/
142 /**
143  * Get the id of the selected option
144  * @param roller pointer to a roller object
145  * @return id of the selected option (0 ... number of option - 1);
146  */
147 uint16_t lv_roller_get_selected(const lv_obj_t * roller);
148 
149 /**
150  * Get the current selected option as a string
151  * @param roller pointer to roller object
152  * @param buf pointer to an array to store the string
153  * @param buf_size size of `buf` in bytes. 0: to ignore it.
154  */
lv_roller_get_selected_str(const lv_obj_t * roller,char * buf,uint16_t buf_size)155 static inline void lv_roller_get_selected_str(const lv_obj_t * roller, char * buf, uint16_t buf_size)
156 {
157     lv_ddlist_get_selected_str(roller, buf, buf_size);
158 }
159 
160 /**
161  * Get the align attribute. Default alignment after _create is LV_LABEL_ALIGN_CENTER
162  * @param roller pointer to a roller object
163  * @return LV_LABEL_ALIGN_LEFT, LV_LABEL_ALIGN_RIGHT or LV_LABEL_ALIGN_CENTER
164  */
165 lv_label_align_t lv_roller_get_align(const lv_obj_t * roller);
166 
167 /**
168  * Get the options of a roller
169  * @param roller pointer to roller object
170  * @return the options separated by '\n'-s (E.g. "Option1\nOption2\nOption3")
171  */
lv_roller_get_options(const lv_obj_t * roller)172 static inline const char * lv_roller_get_options(const lv_obj_t * roller)
173 {
174     return lv_ddlist_get_options(roller);
175 }
176 
177 /**
178  * Get the open/close animation time.
179  * @param roller pointer to a roller
180  * @return open/close animation time [ms]
181  */
lv_roller_get_anim_time(const lv_obj_t * roller)182 static inline uint16_t lv_roller_get_anim_time(const lv_obj_t * roller)
183 {
184     return lv_ddlist_get_anim_time(roller);
185 }
186 
187 /**
188  * Get the auto width set attribute
189  * @param roller pointer to a roller object
190  * @return true: auto size enabled; false: manual width settings enabled
191  */
192 bool lv_roller_get_hor_fit(const lv_obj_t * roller);
193 
194 /**
195  * Get a style of a roller
196  * @param roller pointer to a roller object
197  * @param type which style should be get
198  * @return style pointer to a style
199  *  */
200 const lv_style_t * lv_roller_get_style(const lv_obj_t * roller, lv_roller_style_t type);
201 
202 /**********************
203  *      MACROS
204  **********************/
205 
206 #endif /*LV_USE_ROLLER*/
207 
208 #ifdef __cplusplus
209 } /* extern "C" */
210 #endif
211 
212 #endif /*LV_ROLLER_H*/
213