123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- /**
- * @file oboo_calendar.c
- *
- */
- /*********************
- * INCLUDES
- *********************/
- #include "lvgl/lvgl.h"
- /*********************
- * DEFINES
- *********************/
- /**********************
- * TYPEDEFS
- **********************/
- /**********************
- * STATIC PROTOTYPES
- **********************/
- /**********************
- * STATIC VARIABLES
- **********************/
- /**********************
- * MACROS
- **********************/
- /**********************
- * GLOBAL FUNCTIONS
- **********************/
- /**
- * Initializes the calendar styles and create a calendar
- * @param parent create the calendar on this parent
- * @aparam x position in x
- * @aparam y position in y
- * @aparam w width
- * @aparam h height
- * @return the created calendar object (lv_calendar)
- */
- lv_obj_t * oboo_calendar_create(lv_obj_t * parent, uint32_t x, uint32_t y, uint32_t w, uint32_t h)
- {
- /*Background style*/
- static lv_style_t style_calendar_bg;
- lv_style_copy(&style_calendar_bg, &lv_style_plain);
- style_calendar_bg.body.main_color = LV_COLOR_HEX(0xeef3f9);
- style_calendar_bg.body.grad_color = LV_COLOR_HEX(0xf0f3f4);
- style_calendar_bg.body.padding.hor = LV_DPI / 12; /*Margin on the left and right of the rows of date numbers*/
- style_calendar_bg.body.padding.inner = LV_DPI / 6; /*Margin above the date numbers*/
- style_calendar_bg.body.padding.ver = LV_DPI / 10; /*Margin below the date numbers*/
- style_calendar_bg.body.border.color = LV_COLOR_HEX3(0x888);
- style_calendar_bg.body.border.width = 1;
- style_calendar_bg.body.border.part = LV_BORDER_LEFT | LV_BORDER_RIGHT | LV_BORDER_BOTTOM;
- style_calendar_bg.text.color = LV_COLOR_HEX3(0x666);
- /*Inactive day's style (prev/next month)*/
- static lv_style_t style_calendar_inactive_days;
- lv_style_copy(&style_calendar_inactive_days, &style_calendar_bg);
- style_calendar_inactive_days.text.color = LV_COLOR_HEX3(0xbbb);
- /*Header style*/
- static lv_style_t style_calendar_header;
- lv_style_copy(&style_calendar_header, &lv_style_plain);
- style_calendar_header.body.main_color = LV_COLOR_HEX(0xee8065);
- style_calendar_header.body.grad_color = style_calendar_header.body.main_color;
- style_calendar_header.body.padding.hor = LV_DPI / 10; /*Margin next to the arrows*/
- style_calendar_header.body.border.color = LV_COLOR_HEX(0x8e3823);
- style_calendar_header.body.radius = 0;
- style_calendar_header.body.border.width = 1;
- style_calendar_header.body.border.part = LV_BORDER_LEFT | LV_BORDER_RIGHT | LV_BORDER_TOP;
- style_calendar_header.text.font = LV_FONT_DEFAULT;
- style_calendar_header.text.color = LV_COLOR_WHITE;
- /*Arrow's pressed style (on the header)*/
- static lv_style_t style_calendar_header_pr;
- lv_style_copy(&style_calendar_header_pr, &style_calendar_header);
- style_calendar_header_pr.text.color = LV_COLOR_HEX(0x8e3823); /*Dark orange for pressed arrows*/
- /*Day's name style (Sun..Sat)*/
- static lv_style_t style_calendar_day_names;
- lv_style_copy(&style_calendar_day_names, &lv_style_plain);
- style_calendar_day_names.body.padding.ver = LV_DPI / 8; /*Space above the day names*/
- style_calendar_day_names.body.padding.hor = LV_DPI / 12; /*Space on the left and right*/
- style_calendar_day_names.text.color = LV_COLOR_HEX(0x62afd8);
- // style_calendar_day_names.text.font = &lv_font_dejavu_10;
- style_calendar_day_names.text.font = &lv_font_dejavu_20;
- /*Highlighted day's style*/
- static lv_style_t style_calendar_highlighted_days;
- lv_style_copy(&style_calendar_highlighted_days, &lv_style_plain);
- style_calendar_highlighted_days.text.color = LV_COLOR_HEX(0xee8065);
- /*"Week box" style*/
- static lv_style_t style_calendar_week_box;
- lv_style_copy(&style_calendar_week_box, &lv_style_pretty);
- style_calendar_week_box.body.main_color = LV_COLOR_HEX(0xb0dcec);
- style_calendar_week_box.body.grad_color = style_calendar_week_box.body.main_color;
- style_calendar_week_box.body.radius = LV_DPI / 30;
- style_calendar_week_box.body.border.width = 2;
- style_calendar_week_box.body.padding.ver = LV_DPI / 30;
- style_calendar_week_box.body.padding.hor = 0;
- style_calendar_week_box.text.color = LV_COLOR_HEX(0x6da0b5);
- /*"Today box" style*/
- static lv_style_t style_calendar_today_box;
- lv_style_copy(&style_calendar_today_box, &lv_style_pretty);
- style_calendar_today_box.body.main_color = LV_COLOR_HEX(0x46baeb);
- style_calendar_today_box.body.grad_color = style_calendar_today_box.body.main_color;
- style_calendar_today_box.body.radius = LV_DPI / 30;
- style_calendar_today_box.body.border.width = 2;
- style_calendar_today_box.body.padding.ver = LV_DPI / 16;
- style_calendar_today_box.body.padding.hor = 0;
- style_calendar_today_box.text.color = LV_COLOR_HEX(0xd4edf3);
- /*Create a calendar*/
- lv_obj_t * calendar = lv_calendar_create(parent, NULL);
- lv_obj_set_size(calendar, 230, 200);
- lv_obj_set_pos(calendar, 5, 5);
- lv_calendar_set_style(calendar, LV_CALENDAR_STYLE_BG, &style_calendar_bg);
- lv_calendar_set_style(calendar, LV_CALENDAR_STYLE_INACTIVE_DAYS, &style_calendar_inactive_days);
- lv_calendar_set_style(calendar, LV_CALENDAR_STYLE_HEADER, &style_calendar_header);
- lv_calendar_set_style(calendar, LV_CALENDAR_STYLE_DAY_NAMES, &style_calendar_day_names);
- lv_calendar_set_style(calendar, LV_CALENDAR_STYLE_HIGHLIGHTED_DAYS, &style_calendar_highlighted_days);
- lv_calendar_set_style(calendar, LV_CALENDAR_STYLE_HEADER_PR, &style_calendar_header_pr);
- lv_calendar_set_style(calendar, LV_CALENDAR_STYLE_WEEK_BOX, &style_calendar_week_box);
- lv_calendar_set_style(calendar, LV_CALENDAR_STYLE_TODAY_BOX, &style_calendar_today_box);
-
- /*Set the day names*/
- static const char * day_names[7] = {"S", "M", "T", "W", "T", "F", "S"}; /*Must be static or global because only it's pointer will be saved*/
- lv_calendar_set_day_names(calendar, day_names);
- /* position and size */
- lv_obj_set_pos(calendar, x, y);
- lv_obj_set_size(calendar, w, h);
- return calendar;
- }
- /**
- * Set some day
- * @param calendar pointer to calendar (return value of `oboo_calendar_create`)
- * @param year the current year (e.g. 2018)
- * @param month the current month (e.g. 7 [1..12])
- * @param day the current day (e.g. 23 [1..31])
- */
- void oboo_calendar_set_day(lv_obj_t * calendar, uint32_t year, uint8_t month, uint8_t day)
- {
- lv_calendar_date_t date;
- date.year = year;
- date.month = month;
- date.day = day;
- lv_calendar_set_today_date(calendar, &date);
- lv_calendar_set_showed_date(calendar, &date);
- }
- /**
- * Set events for the calendar
- * @param calendar pointer to calendar (return value of `oboo_calendar_create`)
- * @param events an array with the events. Only the pointer is saved so the array can't be a local variable
- * @param event_cnt number of events in the array
- */
- void oboo_calendar_set_events(lv_obj_t * calendar, lv_calendar_date_t * events, uint32_t event_cnt)
- {
- lv_calendar_set_highlighted_dates(calendar, events, event_cnt);
- }
- /**
- * Clear the events
- * @param calendar pointer to calendar (return value of `oboo_calendar_create`)
- */
- void obbo_calendar_clear_events(lv_obj_t * calendar)
- {
- lv_calendar_set_highlighted_dates(calendar, NULL, 0);
- }
- /**********************
- * STATIC FUNCTIONS
- **********************/
|