[Libreoffice-commits] core.git: Branch 'libreoffice-4-4' - sc/inc sc/source

Eike Rathke erack at redhat.com
Thu Jul 9 13:17:05 PDT 2015


 sc/inc/conditio.hxx              |    1 +
 sc/source/core/data/conditio.cxx |    5 +++++
 sc/source/core/data/documen7.cxx |   12 ++++++++++--
 3 files changed, 16 insertions(+), 2 deletions(-)

New commits:
commit 25bc5473e15c85fefb22f52a878b0e04ca352af7
Author: Eike Rathke <erack at redhat.com>
Date:   Thu Jul 9 21:05:20 2015 +0200

    execute the terrible bottle neck loop only if there are conditional formats
    
    (cherry picked from commit 2aefb89b299e7ebdca5bb35aa4e9059e59805715)
    
    Conflicts:
    	sc/source/core/data/documen7.cxx
    
    Change-Id: Ic8bd65a728289c9fa1a0721b0ecbd9b4a48672ca
    Reviewed-on: https://gerrit.libreoffice.org/16903
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
    Tested-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/sc/inc/conditio.hxx b/sc/inc/conditio.hxx
index 743c950..48e50f2 100644
--- a/sc/inc/conditio.hxx
+++ b/sc/inc/conditio.hxx
@@ -496,6 +496,7 @@ public:
     const_iterator end() const;
 
     size_t size() const;
+    bool empty() const;
 
     void erase(sal_uLong nIndex);
 
diff --git a/sc/source/core/data/conditio.cxx b/sc/source/core/data/conditio.cxx
index 35a827f..cbc7fd8 100644
--- a/sc/source/core/data/conditio.cxx
+++ b/sc/source/core/data/conditio.cxx
@@ -2314,6 +2314,11 @@ size_t ScConditionalFormatList::size() const
     return maConditionalFormats.size();
 }
 
+bool ScConditionalFormatList::empty() const
+{
+    return maConditionalFormats.empty();
+}
+
 void ScConditionalFormatList::erase( sal_uLong nIndex )
 {
     for( iterator itr = begin(); itr != end(); ++itr )
diff --git a/sc/source/core/data/documen7.cxx b/sc/source/core/data/documen7.cxx
index ea06c2a..6d024b8 100644
--- a/sc/source/core/data/documen7.cxx
+++ b/sc/source/core/data/documen7.cxx
@@ -149,12 +149,20 @@ void ScDocument::BroadcastCells( const ScRange& rRange, sal_uLong nHint )
             continue;
 
         ScConditionalFormatList* pCondFormList = GetCondFormList(nTab);
-        if (pCondFormList)
+        if (pCondFormList && !pCondFormList->empty())
         {
+            /* TODO: looping over all possible cells is a terrible bottle neck,
+             * for each cell looping over all conditional formats even worse,
+             * this certainly needs a better method. */
+            ScAddress aAddress( 0, 0, nTab);
             for (SCROW nRow = nRow1; nRow <= nRow2; ++nRow)
             {
+                aAddress.SetRow(nRow);
                 for (SCCOL nCol = nCol1; nCol <= nCol2; ++nCol)
-                    pCondFormList->SourceChanged(ScAddress(nCol,nRow,nTab));
+                {
+                    aAddress.SetCol(nCol);
+                    pCondFormList->SourceChanged(aAddress);
+                }
             }
         }
     }


More information about the Libreoffice-commits mailing list