1 /**
2  * @file lv_bar.h
3  *
4  */
5 
6 #ifndef LV_BAR_H
7 #define LV_BAR_H
8 
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 /*********************
14  *      INCLUDES
15  *********************/
16 #include "../lv_conf_internal.h"
17 
18 #if LV_USE_BAR != 0
19 
20 #include "../core/lv_obj.h"
21 #include "../misc/lv_anim.h"
22 #include "lv_btn.h"
23 #include "lv_label.h"
24 
25 /*********************
26  *      DEFINES
27  *********************/
28 
29 /**********************
30  *      TYPEDEFS
31  **********************/
32 
33 enum {
34     LV_BAR_MODE_NORMAL,
35     LV_BAR_MODE_SYMMETRICAL,
36     LV_BAR_MODE_RANGE
37 };
38 typedef uint8_t lv_bar_mode_t;
39 
40 typedef struct {
41     lv_obj_t * bar;
42     int32_t anim_start;
43     int32_t anim_end;
44     int32_t anim_state;
45 } _lv_bar_anim_t;
46 
47 typedef struct {
48     lv_obj_t obj;
49     int32_t cur_value;          /**< Current value of the bar*/
50     int32_t min_value;          /**< Minimum value of the bar*/
51     int32_t max_value;          /**< Maximum value of the bar*/
52     int32_t start_value;        /**< Start value of the bar*/
53     lv_area_t indic_area;       /**< Save the indicator area. Might be used by derived types*/
54     _lv_bar_anim_t cur_value_anim;
55     _lv_bar_anim_t start_value_anim;
56     lv_bar_mode_t mode : 2;     /**< Type of bar*/
57 } lv_bar_t;
58 
59 extern const lv_obj_class_t lv_bar_class;
60 
61 /**
62  * `type` field in `lv_obj_draw_part_dsc_t` if `class_p = lv_bar_class`
63  * Used in `LV_EVENT_DRAW_PART_BEGIN` and `LV_EVENT_DRAW_PART_END`
64  */
65 typedef enum {
66     LV_BAR_DRAW_PART_INDICATOR,    /**< The indicator*/
67 } lv_bar_draw_part_type_t;
68 
69 /**********************
70  * GLOBAL PROTOTYPES
71  **********************/
72 
73 /**
74  * Create a bar object
75  * @param parent    pointer to an object, it will be the parent of the new bar
76  * @return          pointer to the created bar
77  */
78 lv_obj_t * lv_bar_create(lv_obj_t * parent);
79 
80 /*=====================
81  * Setter functions
82  *====================*/
83 
84 /**
85  * Set a new value on the bar
86  * @param bar       pointer to a bar object
87  * @param value     new value
88  * @param anim      LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: change the value immediately
89  */
90 void lv_bar_set_value(lv_obj_t * obj, int32_t value, lv_anim_enable_t anim);
91 
92 /**
93  * Set a new start value on the bar
94  * @param obj       pointer to a bar object
95  * @param value     new start value
96  * @param anim      LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: change the value immediately
97  */
98 void lv_bar_set_start_value(lv_obj_t * obj, int32_t start_value, lv_anim_enable_t anim);
99 
100 /**
101  * Set minimum and the maximum values of a bar
102  * @param obj       pointer to the bar object
103  * @param min       minimum value
104  * @param max       maximum value
105  */
106 void lv_bar_set_range(lv_obj_t * obj, int32_t min, int32_t max);
107 
108 /**
109  * Set the type of bar.
110  * @param obj       pointer to bar object
111  * @param mode      bar type from ::lv_bar_mode_t
112  */
113 void lv_bar_set_mode(lv_obj_t * obj, lv_bar_mode_t mode);
114 
115 /*=====================
116  * Getter functions
117  *====================*/
118 
119 /**
120  * Get the value of a bar
121  * @param obj       pointer to a bar object
122  * @return          the value of the bar
123  */
124 int32_t lv_bar_get_value(const lv_obj_t * obj);
125 
126 /**
127  * Get the start value of a bar
128  * @param obj       pointer to a bar object
129  * @return          the start value of the bar
130  */
131 int32_t lv_bar_get_start_value(const lv_obj_t * obj);
132 
133 /**
134  * Get the minimum value of a bar
135  * @param obj       pointer to a bar object
136  * @return          the minimum value of the bar
137  */
138 int32_t lv_bar_get_min_value(const lv_obj_t * obj);
139 
140 /**
141  * Get the maximum value of a bar
142  * @param obj       pointer to a bar object
143  * @return          the maximum value of the bar
144  */
145 int32_t lv_bar_get_max_value(const lv_obj_t * obj);
146 
147 /**
148  * Get the type of bar.
149  * @param obj       pointer to bar object
150  * @return          bar type from ::lv_bar_mode_t
151  */
152 lv_bar_mode_t lv_bar_get_mode(lv_obj_t * obj);
153 
154 /**********************
155  *      MACROS
156  **********************/
157 
158 #endif /*LV_USE_BAR*/
159 
160 #ifdef __cplusplus
161 } /*extern "C"*/
162 #endif
163 
164 #endif /*LV_BAR_H*/
165