Rebased ref, commits from common ancestor:
commit b67e70ce2f57b12a1cf3d0228565b957416a9bd6
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Fri Feb 25 11:57:15 2022 +0900
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Sat Feb 26 10:46:50 2022 +0900
sc: use enums instead strings for some SparklineGroup props.
Change-Id: I082c0a7693c97a67bc4972398224bce4bdae85eb
diff --git a/sc/inc/SparklineGroup.hxx b/sc/inc/SparklineGroup.hxx
index abc1cc71333c..32e4b757378f 100644
--- a/sc/inc/SparklineGroup.hxx
+++ b/sc/inc/SparklineGroup.hxx
@@ -16,6 +16,27 @@
namespace sc
{
+enum class SparklineType
+{
+ Line,
+ Column,
+ Stacked
+};
+
+enum class AxisType
+{
+ Individual,
+ Group,
+ Custom
+};
+
+enum class DisplayEmptyCellAs
+{
+ Span,
+ Gap,
+ Zero
+};
+
class SC_DLLPUBLIC SparklineGroup
{
public:
@@ -28,16 +49,16 @@ public:
Color m_aColorHigh;
Color m_aColorLow;
- OUString m_sMinAxisType; // individual, group, custom
- OUString m_sMaxAxisType;
+ 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; // span, gap, zero
bool m_bMarkers;
bool m_bHigh;
diff --git a/sc/qa/extras/SparklineTest.cxx b/sc/qa/extras/SparklineTest.cxx
index a7170e8a5944..6fb4217a76a1 100644
--- a/sc/qa/extras/SparklineTest.cxx
+++ b/sc/qa/extras/SparklineTest.cxx
@@ -53,7 +53,7 @@ void SparklineTest::testSparklines()
sc::Sparkline* pSparkline = rDocument.GetSparkline(ScAddress(0, 1,
0)); // A2
CPPUNIT_ASSERT(pSparkline);
auto pSparklineGroup = pSparkline->getSparklineGroup();
- CPPUNIT_ASSERT_EQUAL(OUString("line"), pSparklineGroup->m_sType);
+ CPPUNIT_ASSERT_EQUAL(sc::SparklineType::Line,
pSparklineGroup->m_eType);
CPPUNIT_ASSERT_EQUAL(Color(0x376092), pSparklineGroup->m_aColorSeries);
CPPUNIT_ASSERT_EQUAL(Color(0x00b050),
pSparklineGroup->m_aColorNegative);
@@ -66,7 +66,7 @@ void SparklineTest::testSparklines()
CPPUNIT_ASSERT_EQUAL(1.0, pSparklineGroup->m_fLineWeight);
CPPUNIT_ASSERT_EQUAL(false, pSparklineGroup->m_bDateAxis);
- CPPUNIT_ASSERT_EQUAL(OUString("gap"),
pSparklineGroup->m_sDisplayEmptyCellsAs);
+ CPPUNIT_ASSERT_EQUAL(sc::DisplayEmptyCellAs::Gap,
pSparklineGroup->m_eDisplayEmptyCellsAs);
CPPUNIT_ASSERT_EQUAL(true, pSparklineGroup->m_bMarkers);
CPPUNIT_ASSERT_EQUAL(true, pSparklineGroup->m_bHigh);
@@ -86,7 +86,7 @@ void SparklineTest::testSparklines()
sc::Sparkline* pSparkline = rDocument.GetSparkline(ScAddress(0, 2,
0)); // A3
CPPUNIT_ASSERT(pSparkline);
auto pSparklineGroup = pSparkline->getSparklineGroup();
- CPPUNIT_ASSERT_EQUAL(OUString("column"), pSparklineGroup->m_sType);
+ CPPUNIT_ASSERT_EQUAL(sc::SparklineType::Column,
pSparklineGroup->m_eType);
CPPUNIT_ASSERT_EQUAL(Color(0x376092), pSparklineGroup->m_aColorSeries);
CPPUNIT_ASSERT_EQUAL(Color(0xff0000),
pSparklineGroup->m_aColorNegative);
@@ -99,7 +99,7 @@ void SparklineTest::testSparklines()
CPPUNIT_ASSERT_EQUAL(0.75, pSparklineGroup->m_fLineWeight);
CPPUNIT_ASSERT_EQUAL(false, pSparklineGroup->m_bDateAxis);
- CPPUNIT_ASSERT_EQUAL(OUString("gap"),
pSparklineGroup->m_sDisplayEmptyCellsAs);
+ CPPUNIT_ASSERT_EQUAL(sc::DisplayEmptyCellAs::Gap,
pSparklineGroup->m_eDisplayEmptyCellsAs);
CPPUNIT_ASSERT_EQUAL(false, pSparklineGroup->m_bMarkers);
CPPUNIT_ASSERT_EQUAL(true, pSparklineGroup->m_bHigh);
@@ -119,14 +119,14 @@ void SparklineTest::testSparklines()
sc::Sparkline* pSparkline = rDocument.GetSparkline(ScAddress(1, 0,
1)); //B1
CPPUNIT_ASSERT(pSparkline);
auto pSparklineGroup = pSparkline->getSparklineGroup();
- CPPUNIT_ASSERT_EQUAL(OUString("column"), pSparklineGroup->m_sType);
+ CPPUNIT_ASSERT_EQUAL(sc::SparklineType::Column,
pSparklineGroup->m_eType);
}
// Sparkline at Sheet2:B2
{
sc::Sparkline* pSparkline = rDocument.GetSparkline(ScAddress(1, 1,
1)); //B2
CPPUNIT_ASSERT(pSparkline);
auto pSparklineGroup = pSparkline->getSparklineGroup();
- CPPUNIT_ASSERT_EQUAL(OUString("line"), pSparklineGroup->m_sType);
+ CPPUNIT_ASSERT_EQUAL(sc::SparklineType::Line,
pSparklineGroup->m_eType);
}
// Sparkline doesn't exists at A4
{
diff --git a/sc/source/filter/oox/SparklineFragment.cxx
b/sc/source/filter/oox/SparklineFragment.cxx
index bfc5a259a883..b4c5089dbfa1 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(OUString const& rString)
+{
+ if (rString == "column")
+ return sc::SparklineType::Column;
+ else if (rString == "stacked")
+ return sc::SparklineType::Stacked;
+ return sc::SparklineType::Line;
+}
+
+sc::DisplayEmptyCellAs parseDisplayEmptyCellAs(OUString const& rString)
+{
+ if (rString == "span")
+ return sc::DisplayEmptyCellAs::Span;
+ else if (rString == "gap")
+ return sc::DisplayEmptyCellAs::Gap;
+ return sc::DisplayEmptyCellAs::Zero;
+}
+
+sc::AxisType parseAxisType(OUString const& rString)
+{
+ if (rString == "group")
+ return sc::AxisType::Group;
+ else if (rString == "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 51535123e208..eab2d0dceb61 100644
--- a/sc/source/ui/view/output.cxx
+++ b/sc/source/ui/view/output.cxx
@@ -2432,12 +2432,13 @@ void drawSparkline(sc::Sparkline* pSparkline,
vcl::RenderContext& rRenderContext
}
}
- if (pSparklineGroup->m_sType == "column")
+ if (pSparklineGroup->m_eType == sc::SparklineType::Line)
{
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)
@@ -2445,7 +2446,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::Column)
{
drawLine(rRenderContext, rRectangle, aValues, nMin, nMax);
}
commit dddc6d3c378446f42de1cd8b02c5c4658d9bbac8
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Thu Feb 24 18:04:37 2022 +0900
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Sat Feb 26 10:43:48 2022 +0900
sc: first simple test for Sparklines
Change-Id: I513571de398be419074d54c5861374effae07709
diff --git a/sc/CppunitTest_sc_sparkline_test.mk
b/sc/CppunitTest_sc_sparkline_test.mk
new file mode 100644
index 000000000000..edf7a3cac7da
--- /dev/null
+++ b/sc/CppunitTest_sc_sparkline_test.mk
@@ -0,0 +1,60 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#*************************************************************************
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+#*************************************************************************
+
+$(eval $(call gb_CppunitTest_CppunitTest,sc_sparkline_test))
+
+$(eval $(call gb_CppunitTest_use_common_precompiled_header,sc_sparkline_test))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,sc_sparkline_test, \
+ sc/qa/extras/SparklineTest \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,sc_sparkline_test, \
+ basegfx \
+ comphelper \
+ cppu \
+ cppuhelper \
+ sal \
+ salhelper \
+ sax \
+ sc \
+ scqahelper \
+ sfx \
+ subsequenttest \
+ test \
+ tl \
+ unotest \
+ vcl \
+))
+
+$(eval $(call gb_CppunitTest_set_include,sc_sparkline_test,\
+ -I$(SRCDIR)/sc/source/ui/inc \
+ -I$(SRCDIR)/sc/inc \
+ $$(INCLUDE) \
+))
+
+$(eval $(call gb_CppunitTest_use_api,sc_sparkline_test,\
+ offapi \
+ udkapi \
+))
+
+$(eval $(call gb_CppunitTest_use_sdk_api,sc_sparkline_test))
+
+$(eval $(call gb_CppunitTest_use_ure,sc_sparkline_test))
+$(eval $(call gb_CppunitTest_use_vcl,sc_sparkline_test))
+
+$(eval $(call gb_CppunitTest_use_rdb,sc_sparkline_test,services))
+
+$(eval $(call gb_CppunitTest_use_components,sc_sparkline_test))
+
+$(eval $(call gb_CppunitTest_use_configuration,sc_sparkline_test))
+
+# vim: set noet sw=4 ts=4:
diff --git a/sc/Module_sc.mk b/sc/Module_sc.mk
index c37b37dd2a14..d877627b20e2 100644
--- a/sc/Module_sc.mk
+++ b/sc/Module_sc.mk
@@ -204,6 +204,7 @@ $(eval $(call gb_Module_add_subsequentcheck_targets,sc,\
CppunitTest_sc_sheetlinkobj \
CppunitTest_sc_sheetlinksobj \
CppunitTest_sc_sortdescriptorbaseobj \
+ CppunitTest_sc_sparkline_test \
CppunitTest_sc_spreadsheetsettings \
CppunitTest_sc_spreadsheetsettingsobj \
CppunitTest_sc_styleobj \
diff --git a/sc/qa/extras/SparklineTest.cxx b/sc/qa/extras/SparklineTest.cxx
new file mode 100644
index 000000000000..a7170e8a5944
--- /dev/null
+++ b/sc/qa/extras/SparklineTest.cxx
@@ -0,0 +1,145 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <test/calc_unoapi_test.hxx>
+
+#include <com/sun/star/lang/XComponent.hpp>
+#include <docsh.hxx>
+#include <Sparkline.hxx>
+
+using namespace css;
+
+namespace sc_apitest
+{
+class SparklineTest : public CalcUnoApiTest
+{
+ uno::Reference<lang::XComponent> mxComponent;
+
+public:
+ SparklineTest();
+
+ void testSparklines();
+
+ CPPUNIT_TEST_SUITE(SparklineTest);
+ CPPUNIT_TEST(testSparklines);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+SparklineTest::SparklineTest()
+ : CalcUnoApiTest("sc/qa/extras/testdocuments")
+{
+}
+
+void SparklineTest::testSparklines()
+{
+ OUString aFileURL;
+ createFileURL(u"Sparklines.xlsx", aFileURL);
+ mxComponent = loadFromDesktop(aFileURL);
+
+ SfxObjectShell* pFoundShell =
SfxObjectShell::GetShellFromComponent(mxComponent);
+ CPPUNIT_ASSERT_MESSAGE("Failed to access document shell", pFoundShell);
+ ScDocShellRef xDocSh = dynamic_cast<ScDocShell*>(pFoundShell);
+ CPPUNIT_ASSERT(xDocSh);
+
+ ScDocument& rDocument = xDocSh->GetDocument();
+ // Sparkline at Sheet1:A2
+ {
+ sc::Sparkline* pSparkline = rDocument.GetSparkline(ScAddress(0, 1,
0)); // A2
+ CPPUNIT_ASSERT(pSparkline);
+ auto pSparklineGroup = pSparkline->getSparklineGroup();
+ CPPUNIT_ASSERT_EQUAL(OUString("line"), pSparklineGroup->m_sType);
+
+ CPPUNIT_ASSERT_EQUAL(Color(0x376092), pSparklineGroup->m_aColorSeries);
+ CPPUNIT_ASSERT_EQUAL(Color(0x00b050),
pSparklineGroup->m_aColorNegative);
+ CPPUNIT_ASSERT_EQUAL(Color(0x000000), pSparklineGroup->m_aColorAxis);
+ CPPUNIT_ASSERT_EQUAL(Color(0x000000),
pSparklineGroup->m_aColorMarkers);
+ CPPUNIT_ASSERT_EQUAL(Color(0x7030a0), pSparklineGroup->m_aColorFirst);
+ CPPUNIT_ASSERT_EQUAL(Color(0xff0000), pSparklineGroup->m_aColorLast);
+ CPPUNIT_ASSERT_EQUAL(Color(0x92d050), pSparklineGroup->m_aColorHigh);
+ CPPUNIT_ASSERT_EQUAL(Color(0x00b0f0), pSparklineGroup->m_aColorLow);
+
+ CPPUNIT_ASSERT_EQUAL(1.0, pSparklineGroup->m_fLineWeight);
+ CPPUNIT_ASSERT_EQUAL(false, pSparklineGroup->m_bDateAxis);
+ CPPUNIT_ASSERT_EQUAL(OUString("gap"),
pSparklineGroup->m_sDisplayEmptyCellsAs);
+
+ CPPUNIT_ASSERT_EQUAL(true, pSparklineGroup->m_bMarkers);
+ CPPUNIT_ASSERT_EQUAL(true, pSparklineGroup->m_bHigh);
+ CPPUNIT_ASSERT_EQUAL(true, pSparklineGroup->m_bLow);
+ CPPUNIT_ASSERT_EQUAL(true, pSparklineGroup->m_bFirst);
+ CPPUNIT_ASSERT_EQUAL(true, pSparklineGroup->m_bLast);
+ CPPUNIT_ASSERT_EQUAL(true, pSparklineGroup->m_bNegative);
+ CPPUNIT_ASSERT_EQUAL(true, pSparklineGroup->m_bDisplayXAxis);
+ CPPUNIT_ASSERT_EQUAL(false, pSparklineGroup->m_bDisplayHidden);
+ CPPUNIT_ASSERT_EQUAL(false, pSparklineGroup->m_bRightToLeft);
+
+ CPPUNIT_ASSERT_EQUAL(false, bool(pSparklineGroup->m_aManualMax));
+ CPPUNIT_ASSERT_EQUAL(false, bool(pSparklineGroup->m_aManualMin));
+ }
+ // Sparkline at Sheet1:A3
+ {
+ sc::Sparkline* pSparkline = rDocument.GetSparkline(ScAddress(0, 2,
0)); // A3
+ CPPUNIT_ASSERT(pSparkline);
+ auto pSparklineGroup = pSparkline->getSparklineGroup();
+ CPPUNIT_ASSERT_EQUAL(OUString("column"), pSparklineGroup->m_sType);
+
+ CPPUNIT_ASSERT_EQUAL(Color(0x376092), pSparklineGroup->m_aColorSeries);
+ CPPUNIT_ASSERT_EQUAL(Color(0xff0000),
pSparklineGroup->m_aColorNegative);
+ CPPUNIT_ASSERT_EQUAL(Color(0x000000), pSparklineGroup->m_aColorAxis);
+ CPPUNIT_ASSERT_EQUAL(Color(0xd00000),
pSparklineGroup->m_aColorMarkers);
+ CPPUNIT_ASSERT_EQUAL(Color(0x92d050), pSparklineGroup->m_aColorFirst);
+ CPPUNIT_ASSERT_EQUAL(Color(0x00b0f0), pSparklineGroup->m_aColorLast);
+ CPPUNIT_ASSERT_EQUAL(Color(0x7030a0), pSparklineGroup->m_aColorHigh);
+ CPPUNIT_ASSERT_EQUAL(Color(0xffc000), pSparklineGroup->m_aColorLow);
+
+ CPPUNIT_ASSERT_EQUAL(0.75, pSparklineGroup->m_fLineWeight);
+ CPPUNIT_ASSERT_EQUAL(false, pSparklineGroup->m_bDateAxis);
+ CPPUNIT_ASSERT_EQUAL(OUString("gap"),
pSparklineGroup->m_sDisplayEmptyCellsAs);
+
+ CPPUNIT_ASSERT_EQUAL(false, pSparklineGroup->m_bMarkers);
+ CPPUNIT_ASSERT_EQUAL(true, pSparklineGroup->m_bHigh);
+ CPPUNIT_ASSERT_EQUAL(true, pSparklineGroup->m_bLow);
+ CPPUNIT_ASSERT_EQUAL(true, pSparklineGroup->m_bFirst);
+ CPPUNIT_ASSERT_EQUAL(true, pSparklineGroup->m_bLast);
+ CPPUNIT_ASSERT_EQUAL(true, pSparklineGroup->m_bNegative);
+ CPPUNIT_ASSERT_EQUAL(false, pSparklineGroup->m_bDisplayXAxis);
+ CPPUNIT_ASSERT_EQUAL(false, pSparklineGroup->m_bDisplayHidden);
+ CPPUNIT_ASSERT_EQUAL(false, pSparklineGroup->m_bRightToLeft);
+
+ CPPUNIT_ASSERT_EQUAL(false, bool(pSparklineGroup->m_aManualMax));
+ CPPUNIT_ASSERT_EQUAL(false, bool(pSparklineGroup->m_aManualMin));
+ }
+ // Sparkline at Sheet2:B1
+ {
+ sc::Sparkline* pSparkline = rDocument.GetSparkline(ScAddress(1, 0,
1)); //B1
+ CPPUNIT_ASSERT(pSparkline);
+ auto pSparklineGroup = pSparkline->getSparklineGroup();
+ CPPUNIT_ASSERT_EQUAL(OUString("column"), pSparklineGroup->m_sType);
+ }
+ // Sparkline at Sheet2:B2
+ {
+ sc::Sparkline* pSparkline = rDocument.GetSparkline(ScAddress(1, 1,
1)); //B2
+ CPPUNIT_ASSERT(pSparkline);
+ auto pSparklineGroup = pSparkline->getSparklineGroup();
+ CPPUNIT_ASSERT_EQUAL(OUString("line"), pSparklineGroup->m_sType);
+ }
+ // Sparkline doesn't exists at A4
+ {
+ sc::Sparkline* pSparkline = rDocument.GetSparkline(ScAddress(0, 3,
0)); //A4
+ CPPUNIT_ASSERT(!pSparkline);
+ }
+
+ closeDocument(mxComponent);
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(SparklineTest);
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/qa/extras/testdocuments/Sparklines.xlsx
b/sc/qa/extras/testdocuments/Sparklines.xlsx
new file mode 100644
index 000000000000..e1a149712bc2
Binary files /dev/null and b/sc/qa/extras/testdocuments/Sparklines.xlsx differ