sc/inc/conditio.hxx                    |    6 ++++++
 sc/source/core/data/conditio.cxx       |   20 ++++++++++++++++----
 sc/source/filter/xml/xmlcondformat.cxx |    7 +++++++
 3 files changed, 29 insertions(+), 4 deletions(-)

New commits:
commit 4d65f5fae0cbdb551c6bffc13bfab60a1301756e
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
    
    (cherry picked from commit eb240530443b964ea45bf80a5e3711e11a3f09c5)
    
    Change-Id: I9a8c02369c3e5a12310a46229bdc1671f75593ad

diff --git a/sc/inc/conditio.hxx b/sc/inc/conditio.hxx
index 80a8e62..c94f145 100644
--- a/sc/inc/conditio.hxx
+++ b/sc/inc/conditio.hxx
@@ -336,6 +336,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 994a199..d0c40e9 100644
--- a/sc/source/core/data/conditio.cxx
+++ b/sc/source/core/data/conditio.cxx
@@ -1713,20 +1713,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 a8a47f1..dbb5028 100644
--- a/sc/source/filter/xml/xmlcondformat.cxx
+++ b/sc/source/filter/xml/xmlcondformat.cxx
@@ -72,6 +72,13 @@ SvXMLImportContext* 
ScXMLConditionalFormatsContext::CreateChildContext( sal_uInt
 
 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,
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to