sc/inc/SparklineGroup.hxx | 32 ++++++++++++++++++--- sc/source/filter/oox/SparklineFragment.cxx | 44 +++++++++++++++++++++++++---- sc/source/ui/view/output.cxx | 7 ++-- 3 files changed, 70 insertions(+), 13 deletions(-)
New commits: commit 055fcef3fe3c3f74ed485a35451c48f6723991b6 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Fri Feb 25 11:57:15 2022 +0900 Commit: Tomaž Vajngerl <qui...@gmail.com> CommitDate: Tue Mar 15 04:26:19 2022 +0100 sc: use enums instead strings for some SparklineGroup props. Change-Id: I082c0a7693c97a67bc4972398224bce4bdae85eb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131489 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <qui...@gmail.com> diff --git a/sc/inc/SparklineGroup.hxx b/sc/inc/SparklineGroup.hxx index 4e1cd782abf0..620a5ae0bf4a 100644 --- a/sc/inc/SparklineGroup.hxx +++ b/sc/inc/SparklineGroup.hxx @@ -16,6 +16,30 @@ namespace sc { +/** Supported sparkline types */ +enum class SparklineType +{ + Line, + Column, + Stacked +}; + +/** The method of calculating the axis min or max value */ +enum class AxisType +{ + Individual, // calculate the min/max of a sparkline + Group, // calculate the min or max of the whole sparkline group + Custom // user defined +}; + +/** Determines how to display the empty cells */ +enum class DisplayEmptyCellAs +{ + Span, + Gap, + Zero // empty cell equals zero +}; + /** Common properties for a group of sparklines */ class SC_DLLPUBLIC SparklineGroup { @@ -29,16 +53,16 @@ public: Color m_aColorHigh; Color m_aColorLow; - OUString m_sMinAxisType; // individual, group, custom - OUString m_sMaxAxisType; // individual, group, custom + AxisType m_eMinAxisType; + AxisType m_eMaxAxisType; double m_fLineWeight; // In pt - OUString m_sType; // line, column, stacked + SparklineType m_eType; bool m_bDateAxis; - OUString m_sDisplayEmptyCellsAs; // span, gap, zero + DisplayEmptyCellAs m_eDisplayEmptyCellsAs; bool m_bMarkers; bool m_bHigh; diff --git a/sc/source/filter/oox/SparklineFragment.cxx b/sc/source/filter/oox/SparklineFragment.cxx index 54ef0df3c6ec..0e65a192af54 100644 --- a/sc/source/filter/oox/SparklineFragment.cxx +++ b/sc/source/filter/oox/SparklineFragment.cxx @@ -90,6 +90,33 @@ void addColorsToSparklineGroup(sc::SparklineGroup& rSparklineGroup, sal_Int32 nE } } +sc::SparklineType parseSparklineType(std::u16string_view rString) +{ + if (rString == u"column") + return sc::SparklineType::Column; + else if (rString == u"stacked") + return sc::SparklineType::Stacked; + return sc::SparklineType::Line; +} + +sc::DisplayEmptyCellAs parseDisplayEmptyCellAs(std::u16string_view rString) +{ + if (rString == u"span") + return sc::DisplayEmptyCellAs::Span; + else if (rString == u"gap") + return sc::DisplayEmptyCellAs::Gap; + return sc::DisplayEmptyCellAs::Zero; +} + +sc::AxisType parseAxisType(std::u16string_view rString) +{ + if (rString == u"group") + return sc::AxisType::Group; + else if (rString == u"custom") + return sc::AxisType::Custom; + return sc::AxisType::Individual; +} + void addAttributesToSparklineGroup(sc::SparklineGroup& rSparklineGroup, const AttributeList& rAttribs) { @@ -98,11 +125,13 @@ void addAttributesToSparklineGroup(sc::SparklineGroup& rSparklineGroup, rSparklineGroup.m_fLineWeight = rAttribs.getDouble(XML_lineWeight, 0.75); - rSparklineGroup.m_sType = rAttribs.getString(XML_type, "line"); + OUString sType = rAttribs.getString(XML_type, "line"); + rSparklineGroup.m_eType = parseSparklineType(sType); rSparklineGroup.m_bDateAxis = rAttribs.getBool(XML_dateAxis, false); - rSparklineGroup.m_sDisplayEmptyCellsAs = rAttribs.getString(XML_displayEmptyCellsAs, "zero"); + OUString sDisplayEmptyCellsAs = rAttribs.getString(XML_displayEmptyCellsAs, "zero"); + rSparklineGroup.m_eDisplayEmptyCellsAs = parseDisplayEmptyCellAs(sDisplayEmptyCellsAs); rSparklineGroup.m_bMarkers = rAttribs.getBool(XML_markers, false); rSparklineGroup.m_bHigh = rAttribs.getBool(XML_high, false); @@ -113,16 +142,19 @@ void addAttributesToSparklineGroup(sc::SparklineGroup& rSparklineGroup, rSparklineGroup.m_bDisplayXAxis = rAttribs.getBool(XML_displayXAxis, false); rSparklineGroup.m_bDisplayHidden = rAttribs.getBool(XML_displayHidden, false); - rSparklineGroup.m_sMinAxisType = rAttribs.getString(XML_minAxisType, "individual"); - rSparklineGroup.m_sMaxAxisType = rAttribs.getString(XML_maxAxisType, "individual"); + OUString sMinAxisType = rAttribs.getString(XML_minAxisType, "individual"); + rSparklineGroup.m_eMinAxisType = parseAxisType(sMinAxisType); + + OUString sMaxAxisType = rAttribs.getString(XML_maxAxisType, "individual"); + rSparklineGroup.m_eMaxAxisType = parseAxisType(sMaxAxisType); rSparklineGroup.m_bRightToLeft = rAttribs.getBool(XML_rightToLeft, false); rSparklineGroup.m_sUID = rAttribs.getString(XML_uid, OUString()); - if (rSparklineGroup.m_sMaxAxisType == "custom") + if (rSparklineGroup.m_eMaxAxisType == sc::AxisType::Custom) rSparklineGroup.m_aManualMax = oManualMax.get(); - if (rSparklineGroup.m_sMinAxisType == "custom") + if (rSparklineGroup.m_eMinAxisType == sc::AxisType::Custom) rSparklineGroup.m_aManualMin = oManualMin.get(); } diff --git a/sc/source/ui/view/output.cxx b/sc/source/ui/view/output.cxx index d986460bca52..6888775df3f7 100644 --- a/sc/source/ui/view/output.cxx +++ b/sc/source/ui/view/output.cxx @@ -2440,12 +2440,13 @@ void drawSparkline(sc::Sparkline* pSparkline, vcl::RenderContext& rRenderContext } } - if (pSparklineGroup->m_sType == "column") + if (pSparklineGroup->m_eType == sc::SparklineType::Column) { drawColumn(rRenderContext, rRectangle, aValues, nMin, nMax); } - else if (pSparklineGroup->m_sType == "stacked") + else if (pSparklineGroup->m_eType == sc::SparklineType::Stacked) { + // transform the data to 1, -1 for (auto & rValue : aValues) { if (rValue != 0.0) @@ -2453,7 +2454,7 @@ void drawSparkline(sc::Sparkline* pSparkline, vcl::RenderContext& rRenderContext } drawColumn(rRenderContext, rRectangle, aValues, -1, 1); } - else if (pSparklineGroup->m_sType == "line") + else if (pSparklineGroup->m_eType == sc::SparklineType::Line) { drawLine(rRenderContext, rRectangle, aValues, nMin, nMax); }