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);
     }

Reply via email to