sc/qa/unit/data/xlsx/condformat_databar.xlsx |binary
 sc/qa/unit/subsequent_filters_test.cxx       |   27 +++++++++++++++++++++++++++
 sc/source/filter/oox/extlstcontext.cxx       |   18 +++++++++++++++---
 3 files changed, 42 insertions(+), 3 deletions(-)

New commits:
commit cd262cf8585e3b7d2258703dd257cfd23c2ae44d
Author:     Henry Castro <hcas...@collabora.com>
AuthorDate: Fri Mar 17 15:49:45 2023 -0400
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Thu Mar 23 07:15:54 2023 +0000

    sc: qa: add databar unit test
    
    <x14:dataBar maxLength="100" minLength="0" border="1" 
axisPosition="automatic" direction="context" 
negativeBarBorderColorSameAsPositive="0">
     <x14:cfvo type="num">
      <xm:f>0</xm:f>
     </x14:cfvo>
     <x14:cfvo type="num">
      <xm:f>1</xm:f>
     </x14:cfvo>
     <x14:fillColor rgb="FF63C384"/>
     <x14:borderColor rgb="FF63C384"/>
     <x14:negativeFillColor indexed="2"/>
     <x14:negativeBorderColor indexed="2"/>
     <x14:axisColor indexed="64"/>
    </x14:dataBar>
    
    Signed-off-by: Henry Castro <hcas...@collabora.com>
    Change-Id: Ib57dac07027e2c3c01ee556a3df791f49637be54
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149346
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Andras Timar <andras.ti...@collabora.com>

diff --git a/sc/qa/unit/data/xlsx/condformat_databar.xlsx 
b/sc/qa/unit/data/xlsx/condformat_databar.xlsx
new file mode 100644
index 000000000000..2d2d727322b7
Binary files /dev/null and b/sc/qa/unit/data/xlsx/condformat_databar.xlsx differ
diff --git a/sc/qa/unit/subsequent_filters_test.cxx 
b/sc/qa/unit/subsequent_filters_test.cxx
index 0f4923716490..c2c3ba68add2 100644
--- a/sc/qa/unit/subsequent_filters_test.cxx
+++ b/sc/qa/unit/subsequent_filters_test.cxx
@@ -166,6 +166,7 @@ public:
     void testCondFormatImportCellIs();
     void testCondFormatThemeColor2XLSX(); // negative bar color and axis color
     void testCondFormatThemeColor3XLSX(); // theme index 2 and 3 are switched
+    void testCondFormatCfvoScaleValueXLSX();
     void testComplexIconSetsXLSX();
     void testTdf101104();
     void testTdf64401();
@@ -288,6 +289,7 @@ public:
     CPPUNIT_TEST(testCondFormatImportCellIs);
     CPPUNIT_TEST(testCondFormatThemeColor2XLSX);
     CPPUNIT_TEST(testCondFormatThemeColor3XLSX);
+    CPPUNIT_TEST(testCondFormatCfvoScaleValueXLSX);
     CPPUNIT_TEST(testComplexIconSetsXLSX);
     CPPUNIT_TEST(testTdf101104);
     CPPUNIT_TEST(testTdf64401);
@@ -2572,6 +2574,31 @@ void ScFiltersTest::testCondFormatThemeColor2XLSX()
     xDocSh->DoClose();
 }
 
+void ScFiltersTest::testCondFormatCfvoScaleValueXLSX()
+{
+    ScDocShellRef xDocSh = ScBootstrapFixture::loadDoc(u"condformat_databar.", 
FORMAT_XLSX);
+
+    CPPUNIT_ASSERT_MESSAGE("Failed to load condformat_databar.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(ScFormatEntry::Type::Databar, pEntry->GetType());
+    const ScDataBarFormat* pDataBar = static_cast<const 
ScDataBarFormat*>(pEntry);
+    const ScDataBarFormatData* pDataBarFormatData = pDataBar->GetDataBarData();
+    const ScColorScaleEntry* pLower = pDataBarFormatData->mpLowerLimit.get();
+    const ScColorScaleEntry* pUpper = pDataBarFormatData->mpUpperLimit.get();
+
+    CPPUNIT_ASSERT_EQUAL(COLORSCALE_VALUE, pLower->GetType());
+    CPPUNIT_ASSERT_EQUAL(COLORSCALE_VALUE, pUpper->GetType());
+
+    CPPUNIT_ASSERT_EQUAL(double(0.0), pLower->GetValue());
+    CPPUNIT_ASSERT_EQUAL(double(1.0), pUpper->GetValue());
+
+    xDocSh->DoClose();
+}
+
 namespace {
 
 void checkDatabarPositiveColor(const ScConditionalFormat* pFormat, const 
Color& rColor)
commit 9d18195cc0bed315c260edc28b1b81ec33c3f091
Author:     Henry Castro <hcas...@collabora.com>
AuthorDate: Fri Mar 17 11:07:14 2023 -0400
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Thu Mar 23 07:15:42 2023 +0000

    sc: filter: oox: insert a new entry ScDataBarFormat if Id attribute...
    
    does not exist:
    
    <x14:cfRule type="dataBar" priority="1" 
id="{006000A4-0067-40D4-A5EF-00D900B80077}">
     <x14:dataBar maxLength="100" minLength="0" border="1" 
axisPosition="automatic" direction="context" 
negativeBarBorderColorSameAsPositive="0">
      <x14:cfvo type="num">
       <xm:f>0</xm:f>
      </x14:cfvo>
      <x14:cfvo type="num">
       <xm:f>1</xm:f>
      </x14:cfvo>
      <x14:fillColor rgb="FF63C384"/>
      <x14:borderColor rgb="FF63C384"/>
      <x14:negativeFillColor indexed="2"/>
      <x14:negativeBorderColor indexed="2"/>
      <x14:axisColor indexed="64"/>
     </x14:dataBar>
    </x14:cfRule>
    
    Signed-off-by: Henry Castro <hcas...@collabora.com>
    Change-Id: Ie2c1ba2c85d9eead963f4d9b1684d72b64fe815d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149345
    Tested-by: Andras Timar <andras.ti...@collabora.com>
    Reviewed-by: Andras Timar <andras.ti...@collabora.com>

diff --git a/sc/source/filter/oox/extlstcontext.cxx 
b/sc/source/filter/oox/extlstcontext.cxx
index eb40c575f1b1..945e6dbfd988 100644
--- a/sc/source/filter/oox/extlstcontext.cxx
+++ b/sc/source/filter/oox/extlstcontext.cxx
@@ -165,11 +165,23 @@ ContextHandlerRef 
ExtConditionalFormattingContext::onCreateContext(sal_Int32 nEl
         if (aType == "dataBar")
         {
             // an ext entry does not need to have an existing corresponding 
entry
+            ScDataBarFormatData* pInfo;
             ExtLst::const_iterator aExt = getExtLst().find( aId );
-            if(aExt == getExtLst().end())
-                return nullptr;
+            if (aExt == getExtLst().end())
+            {
+                pInfo = new ScDataBarFormatData();
+                if (pInfo)
+                {
+                    auto pFormat = 
std::make_unique<ScDataBarFormat>(&getScDocument());
+                    pFormat->SetDataBarData(pInfo);
+                    maEntries.push_back(std::move(pFormat));
+                }
+            }
+            else
+            {
+                pInfo = aExt->second;
+            }
 
-            ScDataBarFormatData* pInfo = aExt->second;
             if (!pInfo)
             {
                 return nullptr;

Reply via email to