summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sc/inc/colorscale.hxx1
-rw-r--r--sc/qa/unit/data/xlsx/condformat_theme_color.xlsxbin0 -> 8937 bytes
-rw-r--r--sc/qa/unit/subsequent_filters-test.cxx35
-rw-r--r--sc/source/core/data/colorscale.cxx8
4 files changed, 44 insertions, 0 deletions
diff --git a/sc/inc/colorscale.hxx b/sc/inc/colorscale.hxx
index 110a27a7c42c..593a662387d0 100644
--- a/sc/inc/colorscale.hxx
+++ b/sc/inc/colorscale.hxx
@@ -282,6 +282,7 @@ public:
const_iterator end() const;
ScColorScaleEntry* GetEntry(size_t nPos);
+ const ScColorScaleEntry* GetEntry(size_t nPos) const;
size_t size() const;
diff --git a/sc/qa/unit/data/xlsx/condformat_theme_color.xlsx b/sc/qa/unit/data/xlsx/condformat_theme_color.xlsx
new file mode 100644
index 000000000000..8bab237406f4
--- /dev/null
+++ b/sc/qa/unit/data/xlsx/condformat_theme_color.xlsx
Binary files differ
diff --git a/sc/qa/unit/subsequent_filters-test.cxx b/sc/qa/unit/subsequent_filters-test.cxx
index 07b224f3dd7b..dbc5ac173330 100644
--- a/sc/qa/unit/subsequent_filters-test.cxx
+++ b/sc/qa/unit/subsequent_filters-test.cxx
@@ -131,6 +131,7 @@ public:
void testColorScaleXLSX();
void testNewCondFormatODS();
void testNewCondFormatXLSX();
+ void testCondFormatThemeColorXLSX();
void testLiteralInFormulaXLS();
@@ -237,6 +238,7 @@ public:
CPPUNIT_TEST(testColorScaleXLSX);
CPPUNIT_TEST(testNewCondFormatODS);
CPPUNIT_TEST(testNewCondFormatXLSX);
+ CPPUNIT_TEST(testCondFormatThemeColorXLSX);
CPPUNIT_TEST(testLiteralInFormulaXLS);
CPPUNIT_TEST(testNumberFormatHTML);
@@ -2342,6 +2344,39 @@ void ScFiltersTest::testNewCondFormatXLSX()
xDocSh->DoClose();
}
+void ScFiltersTest::testCondFormatThemeColorXLSX()
+{
+ ScDocShellRef xDocSh = ScBootstrapFixture::loadDoc( "condformat_theme_color.", XLSX );
+
+ CPPUNIT_ASSERT_MESSAGE("Failed to load condformat_theme_color.xlsx", xDocSh.Is());
+
+ ScDocument& rDoc = xDocSh->GetDocument();
+ ScConditionalFormat* pFormat = rDoc.GetCondFormat(0, 0, 0);
+ const ScFormatEntry* pEntry = pFormat->GetEntry(0);
+ CPPUNIT_ASSERT(pEntry);
+ CPPUNIT_ASSERT_EQUAL(pEntry->GetType(), condformat::DATABAR);
+ const ScDataBarFormat* pDataBar = static_cast<const ScDataBarFormat*>(pEntry);
+ const ScDataBarFormatData* pDataBarFormatData = pDataBar->GetDataBarData();
+
+ CPPUNIT_ASSERT_EQUAL(Color(157, 195, 230), pDataBarFormatData->maPositiveColor);
+ CPPUNIT_ASSERT(pDataBarFormatData->mpNegativeColor.get());
+ CPPUNIT_ASSERT_EQUAL(Color(COL_LIGHTRED), *pDataBarFormatData->mpNegativeColor.get());
+
+ pFormat = rDoc.GetCondFormat(0, 0, 1);
+ pEntry = pFormat->GetEntry(0);
+ CPPUNIT_ASSERT(pEntry);
+ CPPUNIT_ASSERT_EQUAL(pEntry->GetType(), condformat::COLORSCALE);
+ const ScColorScaleFormat* pColorScale = static_cast<const ScColorScaleFormat*>(pEntry);
+ CPPUNIT_ASSERT_EQUAL(size_t(2), pColorScale->size());
+ const ScColorScaleEntry* pColorScaleEntry = pColorScale->GetEntry(0);
+ CPPUNIT_ASSERT(pColorScaleEntry);
+ CPPUNIT_ASSERT_EQUAL(Color(255, 230, 153), pColorScaleEntry->GetColor());
+
+ pColorScaleEntry = pColorScale->GetEntry(1);
+ CPPUNIT_ASSERT(pColorScaleEntry);
+ CPPUNIT_ASSERT_EQUAL(Color(157, 195, 230), pColorScaleEntry->GetColor());
+}
+
void ScFiltersTest::testLiteralInFormulaXLS()
{
ScDocShellRef xDocSh = loadDoc("shared-string/literal-in-formula.", XLS);
diff --git a/sc/source/core/data/colorscale.cxx b/sc/source/core/data/colorscale.cxx
index 15fc61626b10..c41fc687bf14 100644
--- a/sc/source/core/data/colorscale.cxx
+++ b/sc/source/core/data/colorscale.cxx
@@ -679,6 +679,14 @@ ScColorScaleEntry* ScColorScaleFormat::GetEntry(size_t nPos)
return &maColorScales[nPos];
}
+const ScColorScaleEntry* ScColorScaleFormat::GetEntry(size_t nPos) const
+{
+ if (maColorScales.size() <= nPos)
+ return NULL;
+
+ return &maColorScales[nPos];
+}
+
size_t ScColorScaleFormat::size() const
{
return maColorScales.size();