Refactor chart axis label alignment.

Issue #186
This commit is contained in:
John McNamara 2018-09-01 20:58:31 +01:00
parent 3d3bd12abe
commit f7f32def45
6 changed files with 75 additions and 31 deletions

View file

@ -533,14 +533,14 @@ typedef enum lxw_chart_axis_label_position {
* @brief Axis label alignments. * @brief Axis label alignments.
*/ */
typedef enum lxw_chart_axis_label_alignment { typedef enum lxw_chart_axis_label_alignment {
/** Series data label alignment: center. */ /** Chart axis label alignment: center. */
LXW_CHART_AXIS_LABEL_ALIGNMENT_CENTER, LXW_CHART_AXIS_LABEL_ALIGN_CENTER,
/** Series data label alignment: left. */ /** Chart axis label alignment: left. */
LXW_CHART_AXIS_LABEL_ALIGNMENT_LEFT, LXW_CHART_AXIS_LABEL_ALIGN_LEFT,
/** Series data label alignment: right. */ /** Chart axis label alignment: right. */
LXW_CHART_AXIS_LABEL_ALIGNMENT_RIGHT LXW_CHART_AXIS_LABEL_ALIGN_RIGHT
} lxw_chart_axis_label_alignment; } lxw_chart_axis_label_alignment;
/** /**
@ -1000,8 +1000,8 @@ typedef struct lxw_chart_axis {
uint8_t is_value; uint8_t is_value;
uint8_t axis_position; uint8_t axis_position;
uint8_t position_axis; uint8_t position_axis;
uint8_t label_alignment;
uint8_t label_position; uint8_t label_position;
uint8_t label_align;
uint8_t hidden; uint8_t hidden;
uint8_t reverse; uint8_t reverse;
@ -2588,7 +2588,7 @@ void chart_axis_set_position(lxw_chart_axis *axis, uint8_t position);
* *
* @code * @code
* chart_axis_set_label_position(chart->x_axis, LXW_CHART_AXIS_LABEL_POSITION_HIGH); * chart_axis_set_label_position(chart->x_axis, LXW_CHART_AXIS_LABEL_POSITION_HIGH);
chart_axis_set_label_position(chart->y_axis, LXW_CHART_AXIS_LABEL_POSITION_HIGH); * chart_axis_set_label_position(chart->y_axis, LXW_CHART_AXIS_LABEL_POSITION_HIGH);
* @endcode * @endcode
* *
* @image html chart_label_position2.png * @image html chart_label_position2.png
@ -2612,25 +2612,28 @@ void chart_axis_set_position(lxw_chart_axis *axis, uint8_t position);
void chart_axis_set_label_position(lxw_chart_axis *axis, uint8_t position); void chart_axis_set_label_position(lxw_chart_axis *axis, uint8_t position);
/** /**
* @brief Position the alignment of axis labels. * @brief Set the alignment of the axis labels.
* *
* @param axis A pointer to a chart #lxw_chart_axis object. * @param axis A pointer to a chart #lxw_chart_axis object.
* @param alignment A #lxw_chart_label_alignment value. * @param align A #lxw_chart_axis_label_alignment value.
* *
* Position the axis labels for the chart. The labels are the numbers, or * Position the category axis labels for the chart. The labels are the numbers, or
* strings or dates, on the axis that indicate the categories or values of * strings or dates, on the axis that indicate the categories of the axis.
* the axis. * The allowable values:
* *
* - #LXW_CHART_AXIS_LABEL_ALIGNMENT_CENTER - Align label center (default). * The allowable values:
* - #LXW_CHART_AXIS_LABEL_ALIGNMENT_LEFT - Align label left.
* - #LXW_CHART_AXIS_LABEL_ALIGNMENT_RIGHT - Align label right.
* *
* @image html chart_label_alignment1.png * - #LXW_CHART_AXIS_LABEL_ALIGN_CENTER - Align label center (default).
* - #LXW_CHART_AXIS_LABEL_ALIGN_LEFT - Align label left.
* - #LXW_CHART_AXIS_LABEL_ALIGN_RIGHT - Align label right.
* *
* **Axis types**: This function is applicable to to all axes types. * @code
* chart_axis_set_label_align(chart->x_axis, LXW_CHART_AXIS_LABEL_ALIGN_RIGHT);
* @endcode
*
* **Axis types**: This function is applicable to category axes only.
* See @ref ww_charts_axes. * See @ref ww_charts_axes.
*/ */
void chart_axis_set_label_alignment(lxw_chart_axis *axis, uint8_t alignment); void chart_axis_set_label_align(lxw_chart_axis *axis, uint8_t align);
/** /**
* @brief Set the minimum value for a chart axis. * @brief Set the minimum value for a chart axis.

View file

@ -3208,9 +3208,9 @@ _chart_write_label_align(lxw_chart *self, lxw_chart_axis *axis)
LXW_INIT_ATTRIBUTES(); LXW_INIT_ATTRIBUTES();
if (axis->label_alignment == LXW_CHART_AXIS_LABEL_ALIGNMENT_LEFT) if (axis->label_align == LXW_CHART_AXIS_LABEL_ALIGN_LEFT)
LXW_PUSH_ATTRIBUTES_STR("val", "l"); LXW_PUSH_ATTRIBUTES_STR("val", "l");
else if (axis->label_alignment == LXW_CHART_AXIS_LABEL_ALIGNMENT_RIGHT) else if (axis->label_align == LXW_CHART_AXIS_LABEL_ALIGN_RIGHT)
LXW_PUSH_ATTRIBUTES_STR("val", "r"); LXW_PUSH_ATTRIBUTES_STR("val", "r");
else else
LXW_PUSH_ATTRIBUTES_STR("val", "ctr"); LXW_PUSH_ATTRIBUTES_STR("val", "ctr");
@ -6054,12 +6054,12 @@ chart_axis_minor_gridlines_set_line(lxw_chart_axis *axis,
} }
/* /*
* Set the labels alignement. * Set the chart axis label alignment.
*/ */
void void
chart_axis_set_label_alignment(lxw_chart_axis *axis, uint8_t alignment) chart_axis_set_label_align(lxw_chart_axis *axis, uint8_t align)
{ {
axis->label_alignment = alignment; axis->label_align = align;
} }
/* /*

View file

@ -16,8 +16,8 @@ int main() {
lxw_chart *chart = workbook_add_chart(workbook, LXW_CHART_COLUMN); lxw_chart *chart = workbook_add_chart(workbook, LXW_CHART_COLUMN);
/* For testing, copy the randomly generated axis ids in the target file. */ /* For testing, copy the randomly generated axis ids in the target file. */
chart->axis_id_1 = 43704320; chart->axis_id_1 = 61296640;
chart->axis_id_2 = 43706624; chart->axis_id_2 = 61298560;
uint8_t data[5][3] = { uint8_t data[5][3] = {
{1, 2, 3}, {1, 2, 3},
@ -36,10 +36,7 @@ int main() {
chart_add_series(chart, NULL, "=Sheet1!$B$1:$B$5"); chart_add_series(chart, NULL, "=Sheet1!$B$1:$B$5");
chart_add_series(chart, NULL, "=Sheet1!$C$1:$C$5"); chart_add_series(chart, NULL, "=Sheet1!$C$1:$C$5");
chart_axis_set_name(chart->x_axis, "XXX"); chart_axis_set_label_align(chart->x_axis, LXW_CHART_AXIS_LABEL_ALIGN_RIGHT);
chart_axis_set_name(chart->y_axis, "YYY");
chart_axis_set_label_alignment(chart->x_axis, LXW_CHART_AXIS_LABEL_ALIGNMENT_RIGHT);
worksheet_insert_chart(worksheet, CELL("E9"), chart); worksheet_insert_chart(worksheet, CELL("E9"), chart);

View file

@ -0,0 +1,44 @@
/*****************************************************************************
* Test cases for libxlsxwriter.
*
* Test to compare output against Excel files.
*
* Copyright 2014-2018, John McNamara, jmcnamara@cpan.org
*
*/
#include "xlsxwriter.h"
int main() {
lxw_workbook *workbook = new_workbook("test_chart_axis43.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
lxw_chart *chart = workbook_add_chart(workbook, LXW_CHART_COLUMN);
/* For testing, copy the randomly generated axis ids in the target file. */
chart->axis_id_1 = 61296640;
chart->axis_id_2 = 61298560;
uint8_t data[5][3] = {
{1, 2, 3},
{2, 4, 6},
{3, 6, 9},
{4, 8, 12},
{5, 10, 15}
};
int row, col;
for (row = 0; row < 5; row++)
for (col = 0; col < 3; col++)
worksheet_write_number(worksheet, row, col, data[row][col], NULL);
chart_add_series(chart, NULL, "=Sheet1!$A$1:$A$5");
chart_add_series(chart, NULL, "=Sheet1!$B$1:$B$5");
chart_add_series(chart, NULL, "=Sheet1!$C$1:$C$5");
chart_axis_set_label_align(chart->x_axis, LXW_CHART_AXIS_LABEL_ALIGN_RIGHT);
worksheet_insert_chart(worksheet, CELL("E9"), chart);
return workbook_close(workbook);
}

Binary file not shown.