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