diff --git a/.indent.pro b/.indent.pro index 2cd06365..f759724a 100644 --- a/.indent.pro +++ b/.indent.pro @@ -111,7 +111,7 @@ -T lxw_row_t -T lxw_selection -T lxw_series_data_point --T lxw_series_error_bar +-T lxw_series_error_bars -T lxw_series_range -T lxw_sst -T lxw_styles diff --git a/include/xlsxwriter/chart.h b/include/xlsxwriter/chart.h index 3b6d473b..5b6aab64 100644 --- a/include/xlsxwriter/chart.h +++ b/include/xlsxwriter/chart.h @@ -1758,7 +1758,16 @@ void chart_series_set_labels_num_format(lxw_chart_series *series, void chart_series_set_labels_font(lxw_chart_series *series, lxw_chart_font *font); -void chart_series_set_error_bars_line(lxw_series_error_bars * error_bars, +void chart_series_set_error_bars(lxw_series_error_bars *error_bars, + uint8_t type, double value); + +void chart_series_set_error_bars_direction(lxw_series_error_bars *error_bars, + uint8_t direction); + +void chart_series_set_error_bars_endcap(lxw_series_error_bars *error_bars, + uint8_t endcap); + +void chart_series_set_error_bars_line(lxw_series_error_bars *error_bars, lxw_chart_line *line); /** diff --git a/src/chart.c b/src/chart.c index 00226e4d..256fa4e0 100644 --- a/src/chart.c +++ b/src/chart.c @@ -462,13 +462,13 @@ _chart_axis_set_default_num_format(lxw_chart_axis *axis, char *num_format) * support X error bars. */ lxw_error -_chart_check_error_bars(lxw_series_error_bars * error_bars, char *property) +_chart_check_error_bars(lxw_series_error_bars *error_bars, char *property) { if (error_bars->is_x) { if (error_bars->chart_group != LXW_CHART_SCATTER && error_bars->chart_group != LXW_CHART_BAR) { - LXW_WARN_FORMAT1("chart_series_set_error_bars_%s(): " + LXW_WARN_FORMAT1("chart_series_set_error_bars%s(): " "'X error bar' properties only available for" " Scatter and Bar charts in Excel", property); @@ -477,7 +477,7 @@ _chart_check_error_bars(lxw_series_error_bars * error_bars, char *property) } else { if (error_bars->chart_group == LXW_CHART_BAR) { - LXW_WARN_FORMAT1("chart_series_set_error_bars_%s(): " + LXW_WARN_FORMAT1("chart_series_set_error_bars%s(): " "'Y error bar' properties not available for " "Bar charts in Excel", property); @@ -2390,7 +2390,7 @@ _chart_write_err_dir(lxw_chart *self, uint8_t is_x) * Write the element. */ STATIC void -_chart_write_err_bars(lxw_chart *self, lxw_series_error_bars * error_bars) +_chart_write_err_bars(lxw_chart *self, lxw_series_error_bars *error_bars) { if (!error_bars->is_set) return; @@ -5164,13 +5164,58 @@ chart_series_set_labels_font(lxw_chart_series *series, lxw_chart_font *font) } /* - * Set a line type for a series marker. + * Set the error bars and type for a chart series. */ void -chart_series_set_error_bars_line(lxw_series_error_bars * error_bars, +chart_series_set_error_bars(lxw_series_error_bars *error_bars, + uint8_t type, double value) +{ + if (_chart_check_error_bars(error_bars, "")) + return; + + error_bars->type = type; + error_bars->value = value; + error_bars->has_value = LXW_TRUE; + error_bars->is_set = LXW_TRUE; + + if (type == LXW_CHART_ERROR_BAR_TYPE_STD_ERROR) + error_bars->has_value = LXW_FALSE; +} + +/* + * Set the error bars direction for a chart series. + */ +void +chart_series_set_error_bars_direction(lxw_series_error_bars *error_bars, + uint8_t direction) +{ + if (_chart_check_error_bars(error_bars, "_direction")) + return; + + error_bars->direction = direction; +} + +/* + * Set the error bars end cap type for a chart series. + */ +void +chart_series_set_error_bars_endcap(lxw_series_error_bars *error_bars, + uint8_t endcap) +{ + if (_chart_check_error_bars(error_bars, "_endcap")) + return; + + error_bars->endcap = endcap; +} + +/* + * Set a line type for a series error bars. + */ +void +chart_series_set_error_bars_line(lxw_series_error_bars *error_bars, lxw_chart_line *line) { - if (_chart_check_error_bars(error_bars, "line")) + if (_chart_check_error_bars(error_bars, "_line")) return; if (!line) diff --git a/test/functional/src/test_chart_errorbars01.c b/test/functional/src/test_chart_errorbars01.c index f5d9f70e..ba3f6c62 100644 --- a/test/functional/src/test_chart_errorbars01.c +++ b/test/functional/src/test_chart_errorbars01.c @@ -43,7 +43,8 @@ int main() { ); - series1->y_error_bars->is_set = 1; + chart_series_set_error_bars(series1->y_error_bars, + LXW_CHART_ERROR_BAR_TYPE_STD_ERROR, 0); worksheet_insert_chart(worksheet, CELL("E9"), chart); diff --git a/test/functional/src/test_chart_errorbars02.c b/test/functional/src/test_chart_errorbars02.c index 6f306b4e..cf8439b0 100644 --- a/test/functional/src/test_chart_errorbars02.c +++ b/test/functional/src/test_chart_errorbars02.c @@ -42,19 +42,24 @@ int main() { "=Sheet1!$C$1:$C$5" ); - series1->y_error_bars->is_set = 1; - series1->y_error_bars->type = LXW_CHART_ERROR_BAR_TYPE_FIXED; - series1->y_error_bars->direction = LXW_CHART_ERROR_BAR_DIR_MINUS; - series1->y_error_bars->endcap = LXW_CHART_ERROR_BAR_NO_CAP; - series1->y_error_bars->has_value = 1; - series1->y_error_bars->value = 2; - series2->y_error_bars->is_set = 1; - series2->y_error_bars->type = LXW_CHART_ERROR_BAR_TYPE_PERCENTAGE; - series2->y_error_bars->direction = LXW_CHART_ERROR_BAR_DIR_PLUS; - series2->y_error_bars->endcap = LXW_CHART_ERROR_BAR_END_CAP; - series2->y_error_bars->has_value = 1; - series2->y_error_bars->value = 5; + chart_series_set_error_bars(series1->y_error_bars, + LXW_CHART_ERROR_BAR_TYPE_FIXED, 2); + + chart_series_set_error_bars_direction(series1->y_error_bars, + LXW_CHART_ERROR_BAR_DIR_MINUS); + + chart_series_set_error_bars_endcap(series1->y_error_bars, + LXW_CHART_ERROR_BAR_NO_CAP); + + chart_series_set_error_bars(series2->y_error_bars, + LXW_CHART_ERROR_BAR_TYPE_PERCENTAGE, 5); + + chart_series_set_error_bars_direction(series2->y_error_bars, + LXW_CHART_ERROR_BAR_DIR_PLUS); + + chart_series_set_error_bars_endcap(series2->y_error_bars, + LXW_CHART_ERROR_BAR_END_CAP); worksheet_insert_chart(worksheet, CELL("E9"), chart); diff --git a/test/functional/src/test_chart_errorbars03.c b/test/functional/src/test_chart_errorbars03.c index 34520873..9f5d787d 100644 --- a/test/functional/src/test_chart_errorbars03.c +++ b/test/functional/src/test_chart_errorbars03.c @@ -46,8 +46,9 @@ int main() { lxw_chart_line line = {.color = LXW_COLOR_RED, .dash_type = LXW_CHART_LINE_DASH_ROUND_DOT}; - series1->y_error_bars->is_set = 1; - series1->y_error_bars->type = LXW_CHART_ERROR_BAR_TYPE_STD_ERROR; + chart_series_set_error_bars(series1->y_error_bars, + LXW_CHART_ERROR_BAR_TYPE_STD_ERROR, 0); + chart_series_set_error_bars_line(series1->y_error_bars, &line); worksheet_insert_chart(worksheet, CELL("E9"), chart);