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

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

    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/+/149344
    Tested-by: Andras Timar <andras.ti...@collabora.com>
    Reviewed-by: Andras Timar <andras.ti...@collabora.com>

diff --git a/sc/source/filter/inc/condformatbuffer.hxx 
b/sc/source/filter/inc/condformatbuffer.hxx
index 8ccd7fc12e2c..61271c08441d 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 9b2b10956256..8f289d383f94 100644
--- a/sc/source/filter/oox/condformatbuffer.cxx
+++ b/sc/source/filter/oox/condformatbuffer.cxx
@@ -1195,6 +1195,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;
@@ -1222,6 +1232,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