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)