sc/source/filter/inc/condformatbuffer.hxx |    2 ++
 sc/source/filter/oox/condformatbuffer.cxx |   12 ++++++++++++
 2 files changed, 14 insertions(+)

New commits:
commit f16b722d7386b47fdc7afa5dfb21a948cb1a4969
Author:     Henry Castro <hcas...@collabora.com>
AuthorDate: Fri Mar 17 15:07:42 2023 -0400
Commit:     Henry Castro <hcas...@collabora.com>
CommitDate: Wed Jun 14 21:15:33 2023 +0200

    sc: filter: oox: update databar format before clone
    
    The ScDataBarFormatData should update from import (finalizeImport)
    before cloning, otherwise it loose data.
    
    Signed-off-by: Henry Castro <hcas...@collabora.com>
    Change-Id: I4af8b79e93eed8091bf01244bacac1d12e591c45
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149068
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153068
    Tested-by: Jenkins

diff --git a/sc/source/filter/inc/condformatbuffer.hxx 
b/sc/source/filter/inc/condformatbuffer.hxx
index cdc8d4727baf..d5d5ebac2ab5 100644
--- a/sc/source/filter/inc/condformatbuffer.hxx
+++ b/sc/source/filter/inc/condformatbuffer.hxx
@@ -271,6 +271,7 @@ public:
     void importAxisColor(  const AttributeList& rAttribs );
     void importCfvo(  const AttributeList& rAttribs );
     ExCfRuleModel& getModel() { return maModel; }
+    const ScDataBarFormatData* GetDataBarData() { return mpTarget; }
 };
 
 class ExtCfCondFormat
@@ -311,6 +312,7 @@ public:
     void                finalizeImport();
 private:
     CondFormatRef       createCondFormat();
+    void                updateImport(const ScDataBarFormatData* pTarget);
 
 private:
     typedef RefVector< CondFormat > CondFormatVec;
diff --git a/sc/source/filter/oox/condformatbuffer.cxx 
b/sc/source/filter/oox/condformatbuffer.cxx
index 2662b5213a34..4c55792779af 100644
--- a/sc/source/filter/oox/condformatbuffer.cxx
+++ b/sc/source/filter/oox/condformatbuffer.cxx
@@ -1197,6 +1197,16 @@ public:
 
 }
 
+void CondFormatBuffer::updateImport(const ScDataBarFormatData* pTarget)
+{
+    for ( const auto& rRule : maCfRules )
+    {
+        if ( rRule && rRule->GetDataBarData() == pTarget )
+            rRule->finalizeImport();
+    }
+}
+
+
 void CondFormatBuffer::finalizeImport()
 {
     std::unordered_set<size_t> aDoneExtCFs;
@@ -1224,6 +1234,8 @@ void CondFormatBuffer::finalizeImport()
             for (const auto& rxEntry : rEntries)
             {
                 CondFormatRuleRef xRule = rCondFormat.createRule();
+                if (ScDataBarFormat *pData = 
dynamic_cast<ScDataBarFormat*>(rxEntry.get()))
+                    updateImport(pData->GetDataBarData());
                 ScFormatEntry* pNewEntry = rxEntry->Clone(pDoc);
                 sal_Int32 nPriority = rPriorities[nEntryIdx];
                 if (nPriority == -1)

Reply via email to