1 /**
2  * @file lv_calendar.h
3  *
4  */
5 
6 #ifndef LV_CALENDAR_H
7 #define LV_CALENDAR_H
8 
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 /*********************
14  *      INCLUDES
15  *********************/
16 #include "../../../widgets/lv_btnmatrix.h"
17 
18 #if LV_USE_CALENDAR
19 
20 /*********************
21  *      DEFINES
22  *********************/
23 
24 /**********************
25  *      TYPEDEFS
26  **********************/
27 
28 /**
29  * Represents a date on the calendar object (platform-agnostic).
30  */
31 typedef struct {
32     uint16_t year;
33     int8_t month;  /** 1..12*/
34     int8_t day;    /** 1..31*/
35 } lv_calendar_date_t;
36 
37 /*Data of calendar*/
38 typedef struct {
39     lv_obj_t obj;
40     lv_obj_t * btnm;
41     /*New data for this type*/
42     lv_calendar_date_t today;               /*Date of today*/
43     lv_calendar_date_t showed_date;         /*Currently visible month (day is ignored)*/
44     lv_calendar_date_t *
45     highlighted_dates; /*Apply different style on these days (pointer to an array defined by the user)*/
46     uint16_t highlighted_dates_num;          /*Number of elements in `highlighted_days`*/
47     const char * map[8 * 7];
48     char nums [7 * 6][4];
49 } lv_calendar_t;
50 
51 extern const lv_obj_class_t lv_calendar_class;
52 
53 /**********************
54  * GLOBAL PROTOTYPES
55  **********************/
56 
57 lv_obj_t * lv_calendar_create(lv_obj_t * parent);
58 
59 /*======================
60  * Add/remove functions
61  *=====================*/
62 
63 /*=====================
64  * Setter functions
65  *====================*/
66 
67 /**
68  * Set the today's date
69  * @param obj  pointer to a calendar object
70  * @param year      today's year
71  * @param month     today's month [1..12]
72  * @param day       today's day [1..31]
73  */
74 void lv_calendar_set_today_date(lv_obj_t * obj, uint32_t year, uint32_t month, uint32_t day);
75 
76 /**
77  * Set the currently showed
78  * @param obj           pointer to a calendar object
79  * @param year          today's year
80  * @param month         today's month [1..12]
81  */
82 void lv_calendar_set_showed_date(lv_obj_t * obj, uint32_t year, uint32_t month);
83 
84 /**
85  * Set the highlighted dates
86  * @param obj           pointer to a calendar object
87  * @param highlighted   pointer to an `lv_calendar_date_t` array containing the dates.
88  *                      Only the pointer will be saved so this variable can't be local which will be destroyed later.
89  * @param date_num number of dates in the array
90  */
91 void lv_calendar_set_highlighted_dates(lv_obj_t * obj, lv_calendar_date_t highlighted[], uint16_t date_num);
92 
93 /**
94  * Set the name of the days
95  * @param obj           pointer to a calendar object
96  * @param day_names     pointer to an array with the names.
97  *                      E.g. `const char * days[7] = {"Sun", "Mon", ...}`
98  *                      Only the pointer will be saved so this variable can't be local which will be destroyed later.
99  */
100 void lv_calendar_set_day_names(lv_obj_t * obj, const char ** day_names);
101 
102 /*=====================
103  * Getter functions
104  *====================*/
105 
106 /**
107  * Get the button matrix object of the calendar.
108  * It shows the dates and day names.
109  * @param obj   pointer to a calendar object
110  * @return      pointer to a the button matrix
111  */
112 lv_obj_t * lv_calendar_get_btnmatrix(const lv_obj_t * obj);
113 
114 /**
115  * Get the today's date
116  * @param calendar pointer to a calendar object
117  * @return return pointer to an `lv_calendar_date_t` variable containing the date of today.
118  */
119 const lv_calendar_date_t * lv_calendar_get_today_date(const lv_obj_t * calendar);
120 
121 /**
122  * Get the currently showed
123  * @param calendar pointer to a calendar object
124  * @return pointer to an `lv_calendar_date_t` variable containing the date is being shown.
125  */
126 const lv_calendar_date_t * lv_calendar_get_showed_date(const lv_obj_t * calendar);
127 
128 /**
129  * Get the highlighted dates
130  * @param calendar pointer to a calendar object
131  * @return pointer to an `lv_calendar_date_t` array containing the dates.
132  */
133 lv_calendar_date_t * lv_calendar_get_highlighted_dates(const lv_obj_t * calendar);
134 
135 /**
136  * Get the number of the highlighted dates
137  * @param calendar pointer to a calendar object
138  * @return number of highlighted days
139  */
140 uint16_t lv_calendar_get_highlighted_dates_num(const lv_obj_t * calendar);
141 
142 /**
143  * Get the currently pressed day
144  * @param calendar pointer to a calendar object
145  * @param date store the pressed date here
146  * @return LV_RES_OK: there is a valid pressed date; LV_RES_INV: there is no pressed data
147  */
148 lv_res_t lv_calendar_get_pressed_date(const lv_obj_t * calendar, lv_calendar_date_t * date);
149 
150 /*=====================
151  * Other functions
152  *====================*/
153 
154 /**********************
155  *      MACROS
156  **********************/
157 
158 #endif  /*LV_USE_CALENDAR*/
159 
160 #ifdef __cplusplus
161 } /*extern "C"*/
162 #endif
163 
164 #endif /*LV_CALENDAR_H*/
165