mirror of
https://github.com/lvgl/lvgl.git
synced 2025-01-21 06:53:01 +08:00
81 lines
3.2 KiB
Markdown
81 lines
3.2 KiB
Markdown
```eval_rst
|
|
.. include:: /header.rst
|
|
:github_url: |github_link_base|/widgets/calendar.md
|
|
```
|
|
# Calendar (lv_calendar)
|
|
|
|
## Overview
|
|
|
|
The Calendar object is a classic calendar which can:
|
|
- can show the days of any month in a 7x7 matrix
|
|
- Show the name of the days
|
|
- highlight the current day
|
|
- highlight any user-defined dates
|
|
|
|
The Calendar is added to the deafult group (if it is set). Besides the Calendar is an editable object to allow selecting and clicing the dates with encoder navigation too.
|
|
|
|
To make the Calendar flexible, by default it doesn't show the curent year or month. Instead, there external "headers" that can be attached to the calendar.
|
|
|
|
## Parts and Styles
|
|
The calendar object uses the [Button matrix](/widgets/btnmatrix) object under the hood to arrange the days into a matrix.
|
|
- `LV_PART_MAIN`
|
|
- `LV_PART_ITEMS` Refers to the dates and day names. Button matrix control flags are set the to differentiate the buttons and a custom drawer event modifies the properties of the buttons
|
|
- day names haev no border, no background, drawn with a grey color
|
|
- days of the previous and next month have `LV_BTNMATRIX_CTRL_DISABLED` flag
|
|
- today has a ticker border with the themes primary color
|
|
- highlighted day have 40% opacity with the themes primary color.
|
|
|
|
## Usage
|
|
|
|
Some funnctions uses the `lv_calendar_date_t` type is used which is a structure with `year`, `month` and `day` fields.
|
|
|
|
### Current date
|
|
To set the current date (today), use the `lv_calendar_set_today_date(calendar, year, month, day)` function. `month` needs to be in 1..12 range and `day` in 1..31 range
|
|
|
|
### Shown date
|
|
To set the shown date, use `lv_calendar_set_shown_date(calendar, year, month)`;
|
|
|
|
### Highlighted days
|
|
|
|
The list of highlighted dates should be stored in a `lv_calendar_date_t` array loaded by `lv_calendar_set_highlighted_dates(calendar, highlighted_dates, date_num)`.
|
|
Only the arrays pointer will be saved so the array should be a static or global variable.
|
|
|
|
### Name of the days
|
|
The name of the days can be adjusted with `lv_calendar_set_day_names(calendar, day_names)` where `day_names` looks like `const char * day_names[7] = {"Su", "Mo", ...};`
|
|
Only the pointer of the day names is saved so the array should be a static, global or constant variables.
|
|
|
|
## Headers
|
|
|
|
### Arrow buttons
|
|
|
|
`lv_calendar_header_arrow_create(parent, calendar, button_size)` creates a header that contains a left and right arrow on the sides and atext with the current year and month between them.
|
|
|
|
### Dropdown
|
|
`lv_calendar_header_dropdown_create(parent, calendar)` creates a header that contains 2 drop-drown lists: one for the year and an other for the month.
|
|
|
|
## Events
|
|
- `LV_EVENT_VALUE_CHANGED` Sent is a data is clicked. `lv_calendar_get_pressed_date(calendar, &date)` tells which day is currently being pressed. Returns `LV_RES_OK` if theres is valid pressed data, else `LV_RES_INV`.
|
|
|
|
## Keys
|
|
- `LV_KEY_RIGHT/UP/LEFT/RIGHT` To navigate among the buttons to dates
|
|
- `LV_KEY_ENTER` To press/release the selected date
|
|
|
|
Learn more about [Keys](/overview/indev).
|
|
|
|
## Example
|
|
|
|
```eval_rst
|
|
|
|
.. include:: /lv_examples/src/lv_ex_widgets/lv_ex_calendar/index.rst
|
|
|
|
```
|
|
|
|
## API
|
|
|
|
```eval_rst
|
|
|
|
.. doxygenfile:: lv_calendar.h
|
|
:project: lvgl
|
|
|
|
```
|