1
0
mirror of https://github.com/lvgl/lvgl.git synced 2025-01-28 07:03:00 +08:00

feat(chart): add lv_chart_remove_series and lv_chart_hide_series

This commit is contained in:
Gabor Kiss-Vamosi 2020-12-09 14:15:56 +01:00
parent 6d4de78756
commit 861f07bb77
3 changed files with 65 additions and 0 deletions

View File

@ -3,6 +3,7 @@
## v7.9.0
### New features
- feat(chart) add lv_chart_remove_series and lv_chart_hide_series
### Bugfixes

View File

@ -195,6 +195,7 @@ lv_chart_series_t * lv_chart_add_series(lv_obj_t * chart, lv_color_t color)
ser->start_point = 0;
ser->ext_buf_assigned = false;
ser->hidden = 0;
ser->y_axis = LV_CHART_AXIS_PRIMARY_Y;
uint16_t i;
@ -207,6 +208,33 @@ lv_chart_series_t * lv_chart_add_series(lv_obj_t * chart, lv_color_t color)
return ser;
}
/**
* Deallocate and remove a data series from a chart
* @param chart pointer to a chart object
* @param series pointer to a data series on 'chart'
*/
void lv_chart_remove_series(lv_obj_t * chart, lv_chart_series_t * series)
{
LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
LV_ASSERT_NULL(series);
if(chart == NULL || series == NULL) return;
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
if(!series->ext_buf_assigned && series->points) lv_mem_free(series->points);
_lv_ll_remove(&ext->series_ll, series);
lv_mem_free(series);
return;
}
/**
* Add a cursor with a given color
* @param chart pointer to chart object
* @param color color of the cursor
* @param dir direction of the cursor. `LV_CHART_CURSOR_RIGHT/LEFT/TOP/DOWN`. OR-ed values are possible
* @return pointer to the created cursor
*/
lv_chart_cursor_t * lv_chart_add_cursor(lv_obj_t * chart, lv_color_t color, lv_cursor_direction_t axes)
{
LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
@ -246,6 +274,22 @@ void lv_chart_clear_series(lv_obj_t * chart, lv_chart_series_t * series)
series->start_point = 0;
}
/**
* Hide/Unhide a single series of a chart.
* @param chart pointer to a chart object.
* @param series pointer to a series object
* @param hide true: hide the series
*/
void lv_chart_hide_series(lv_obj_t * chart, lv_chart_series_t * series, bool hide)
{
LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
LV_ASSERT_NULL(series);
series->hidden = hide ? 1 : 0;
lv_chart_refresh(chart);
}
/*=====================
* Setter functions
*====================*/
@ -666,6 +710,7 @@ void lv_chart_set_cursor_point(lv_obj_t * chart, lv_chart_cursor_t * cursor, lv_
lv_chart_refresh(chart);
}
/*=====================
* Getter functions
*====================*/
@ -1135,6 +1180,7 @@ static void draw_series_line(lv_obj_t * chart, const lv_area_t * series_area, co
/*Go through all data lines*/
_LV_LL_READ_BACK(ext->series_ll, ser) {
if (ser->hidden) continue;
line_dsc.color = ser->color;
point_dsc.bg_color = ser->color;
area_dsc.bg_color = ser->color;
@ -1271,6 +1317,7 @@ static void draw_series_column(lv_obj_t * chart, const lv_area_t * series_area,
/*Draw the current point of all data line*/
_LV_LL_READ_BACK(ext->series_ll, ser) {
if (ser->hidden) continue;
lv_coord_t start_point = ext->update_mode == LV_CHART_UPDATE_MODE_SHIFT ? ser->start_point : 0;
col_a.x1 = x_act;

View File

@ -74,6 +74,7 @@ typedef struct {
lv_color_t color;
uint16_t start_point;
uint8_t ext_buf_assigned : 1;
uint8_t hidden : 1;
lv_chart_axis_t y_axis : 1;
} lv_chart_series_t;
@ -153,6 +154,13 @@ lv_obj_t * lv_chart_create(lv_obj_t * par, const lv_obj_t * copy);
*/
lv_chart_series_t * lv_chart_add_series(lv_obj_t * chart, lv_color_t color);
/**
* Deallocate and remove a data series from a chart
* @param chart pointer to a chart object
* @param series pointer to a data series on 'chart'
*/
void lv_chart_remove_series(lv_obj_t * chart, lv_chart_series_t * series);
/**
* Add a cursor with a given color
* @param chart pointer to chart object
@ -169,6 +177,15 @@ lv_chart_cursor_t * lv_chart_add_cursor(lv_obj_t * chart, lv_color_t color, lv_c
*/
void lv_chart_clear_series(lv_obj_t * chart, lv_chart_series_t * series);
/**
* Hide/Unhide a single series of a chart.
* @param chart pointer to a chart object.
* @param series pointer to a series object
* @param hide true: hide the series
*/
void lv_chart_hide_series(lv_obj_t * chart, lv_chart_series_t * series, bool hide);
/*=====================
* Setter functions
*====================*/