sc/inc/conditio.hxx | 6 ++++-- sc/source/core/data/conditio.cxx | 4 +++- sc/source/filter/xml/xmlcondformat.cxx | 9 ++++++++- sc/source/filter/xml/xmlcondformat.hxx | 3 +++ 4 files changed, 18 insertions(+), 4 deletions(-)
New commits: commit 0ab136c65ee184bf1cd790ee7347cd572fdf56aa Author: Caolán McNamara <caol...@redhat.com> Date: Fri Mar 2 10:01:45 2018 +0000 forcepoint #15 notify FormatsContext if Format deleted Change-Id: Icb7b0c3b1fc3d38e2d7e44e0a8bdb03529c5b41d Reviewed-on: https://gerrit.libreoffice.org/50621 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> diff --git a/sc/inc/conditio.hxx b/sc/inc/conditio.hxx index 77a066740ebd..072e6e328d5a 100644 --- a/sc/inc/conditio.hxx +++ b/sc/inc/conditio.hxx @@ -35,6 +35,7 @@ #include <rtl/math.hxx> #include <tools/date.hxx> +#include <tools/link.hxx> #include <map> #include <memory> @@ -604,10 +605,11 @@ public: /** * Checks that all cond formats have a non empty range. - * Deletes empty cond formats. + * Deletes empty cond formats. Optionall call rLink + * on the empty format before deleting it. * @return true if all cond formats were valid */ - bool CheckAllEntries(); + bool CheckAllEntries(const Link<ScConditionalFormat*,void>& rLink = Link<ScConditionalFormat*,void>()); ScConditionalFormat* GetFormat( sal_uInt32 nKey ); const ScConditionalFormat* GetFormat( sal_uInt32 nKey ) const; diff --git a/sc/source/core/data/conditio.cxx b/sc/source/core/data/conditio.cxx index eb86f3e4bc61..c09e5e90b250 100644 --- a/sc/source/core/data/conditio.cxx +++ b/sc/source/core/data/conditio.cxx @@ -2146,7 +2146,7 @@ void ScConditionalFormatList::RenameCellStyle( const OUString& rOld, const OUStr } } -bool ScConditionalFormatList::CheckAllEntries() +bool ScConditionalFormatList::CheckAllEntries(const Link<ScConditionalFormat*,void>& rLink) { bool bValid = true; @@ -2157,6 +2157,8 @@ bool ScConditionalFormatList::CheckAllEntries() if ((*itr)->GetRange().empty()) { bValid = false; + if (rLink.IsSet()) + rLink.Call(itr->get()); itr = m_ConditionalFormats.erase(itr); } else diff --git a/sc/source/filter/xml/xmlcondformat.cxx b/sc/source/filter/xml/xmlcondformat.cxx index f7b43c5cced4..be215df81d72 100644 --- a/sc/source/filter/xml/xmlcondformat.cxx +++ b/sc/source/filter/xml/xmlcondformat.cxx @@ -49,13 +49,20 @@ css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL ScXMLConditio return pContext; } +IMPL_LINK(ScXMLConditionalFormatsContext, FormatDeletedHdl, ScConditionalFormat*, pFormat, void) +{ + mvCondFormatData.erase(std::remove_if(mvCondFormatData.begin(), mvCondFormatData.end(), + [pFormat](CondFormatData& r){ return r.mpFormat == pFormat; }), + mvCondFormatData.end()); +} + void SAL_CALL ScXMLConditionalFormatsContext::endFastElement( sal_Int32 /*nElement*/ ) { ScDocument* pDoc = GetScImport().GetDocument(); SCTAB nTab = GetScImport().GetTables().GetCurrentSheet(); ScConditionalFormatList* pCondFormatList = pDoc->GetCondFormList(nTab); - bool bDeleted = !pCondFormatList->CheckAllEntries(); + bool bDeleted = !pCondFormatList->CheckAllEntries(LINK(this, ScXMLConditionalFormatsContext, FormatDeletedHdl)); SAL_WARN_IF(bDeleted, "sc", "conditional formats have been deleted because they contained empty range info"); diff --git a/sc/source/filter/xml/xmlcondformat.hxx b/sc/source/filter/xml/xmlcondformat.hxx index fc253081ff0d..ed979d273985 100644 --- a/sc/source/filter/xml/xmlcondformat.hxx +++ b/sc/source/filter/xml/xmlcondformat.hxx @@ -12,6 +12,7 @@ #include <array> #include <memory> +#include <tools/link.hxx> #include <xmloff/xmlictxt.hxx> #include "xmlimprt.hxx" #include "importcontext.hxx" @@ -41,6 +42,8 @@ private: SCTAB mnTab; }; + DECL_LINK(FormatDeletedHdl, ScConditionalFormat*, void); + public: ScXMLConditionalFormatsContext( ScXMLImport& rImport ); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits