sc/inc/conditio.hxx | 6 ++++++ sc/source/core/data/conditio.cxx | 20 ++++++++++++++++---- sc/source/filter/xml/xmlcondformat.cxx | 11 +++++++++++ sc/source/filter/xml/xmlcondformat.hxx | 2 ++ 4 files changed, 35 insertions(+), 4 deletions(-)
New commits: commit eb240530443b964ea45bf80a5e3711e11a3f09c5 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Mon Nov 12 07:16:05 2012 +0100 remove conditional formats withiout range after import, related fdo#56983 Change-Id: I9a8c02369c3e5a12310a46229bdc1671f75593ad diff --git a/sc/inc/conditio.hxx b/sc/inc/conditio.hxx index afcfd01..d60da24 100644 --- a/sc/inc/conditio.hxx +++ b/sc/inc/conditio.hxx @@ -409,6 +409,12 @@ public: void InsertNew( ScConditionalFormat* pNew ) { maConditionalFormats.insert(pNew); } + /** + * Checks that all cond formats have a non empty range. + * Deletes empty cond formats. + * @return true if all cond formats were valid + */ + bool CheckAllEntries(); ScConditionalFormat* GetFormat( sal_uInt32 nKey ); diff --git a/sc/source/core/data/conditio.cxx b/sc/source/core/data/conditio.cxx index f164cc4..ecece73 100644 --- a/sc/source/core/data/conditio.cxx +++ b/sc/source/core/data/conditio.cxx @@ -1975,20 +1975,32 @@ void ScConditionalFormatList::UpdateMoveTab( SCTAB nOldPos, SCTAB nNewPos ) itr->UpdateMoveTab( nOldPos, nNewPos ); } -void ScConditionalFormatList::DeleteArea( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 ) +bool ScConditionalFormatList::CheckAllEntries() { - for( iterator itr = begin(); itr != end(); ++itr) - itr->DeleteArea( nCol1, nRow1, nCol2, nRow2 ); - + bool bValid = true; + // // need to check which must be deleted iterator itr = begin(); while(itr != end()) { if(itr->GetRange().empty()) + { + bValid = false; maConditionalFormats.erase(itr++); + } else ++itr; } + + return bValid; +} + +void ScConditionalFormatList::DeleteArea( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 ) +{ + for( iterator itr = begin(); itr != end(); ++itr) + itr->DeleteArea( nCol1, nRow1, nCol2, nRow2 ); + + CheckAllEntries(); } void ScConditionalFormatList::SourceChanged( const ScAddress& rAddr ) diff --git a/sc/source/filter/xml/xmlcondformat.cxx b/sc/source/filter/xml/xmlcondformat.cxx index 5c9bbe4..8b97a78 100644 --- a/sc/source/filter/xml/xmlcondformat.cxx +++ b/sc/source/filter/xml/xmlcondformat.cxx @@ -65,6 +65,17 @@ SvXMLImportContext* ScXMLConditionalFormatsContext::CreateChildContext( sal_uInt return pContext; } +void ScXMLConditionalFormatsContext::EndElement() +{ + ScDocument* pDoc = GetScImport().GetDocument(); + + SCTAB nTab = GetScImport().GetTables().GetCurrentSheet(); + ScConditionalFormatList* pCondFormatList = pDoc->GetCondFormList(nTab); + bool bDeleted = !pCondFormatList->CheckAllEntries(); + + SAL_WARN_IF(bDeleted, "sc", "conditional formats have been deleted because they contained empty range info"); +} + ScXMLConditionalFormatContext::ScXMLConditionalFormatContext( ScXMLImport& rImport, sal_uInt16 nPrfx, const ::rtl::OUString& rLName, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList>& xAttrList): SvXMLImportContext( rImport, nPrfx, rLName ) diff --git a/sc/source/filter/xml/xmlcondformat.hxx b/sc/source/filter/xml/xmlcondformat.hxx index 45513ce..0ace1eb 100644 --- a/sc/source/filter/xml/xmlcondformat.hxx +++ b/sc/source/filter/xml/xmlcondformat.hxx @@ -51,6 +51,8 @@ public: const ::rtl::OUString& rLocalName, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList>& xAttrList ); + + virtual void EndElement(); }; class ScXMLConditionalFormatContext : public SvXMLImportContext _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits