[Libreoffice-commits] core.git: sc/source
Markus Mohrhard
markus.mohrhard at googlemail.com
Fri Feb 23 17:26:07 UTC 2018
sc/source/core/data/table2.cxx | 40 +++++++++++++++++++++++++++++++---------
1 file changed, 31 insertions(+), 9 deletions(-)
New commits:
commit aae1b8f47f7fd4d88e4ded348ee3afdbb5208855
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Fri Feb 23 00:42:00 2018 +0100
deduplicate cond format against source format if possible
Change-Id: Ie4bbbb078f2d0456cd5f3ad6e2c5627aca9fbaa9
Reviewed-on: https://gerrit.libreoffice.org/50216
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx
index 2c5ed4149566..a4deda8bc1db 100644
--- a/sc/source/core/data/table2.cxx
+++ b/sc/source/core/data/table2.cxx
@@ -565,6 +565,31 @@ void ScTable::CopyCellToDocument(SCCOL nSrcCol, SCROW nSrcRow, SCCOL nDestCol, S
rSrcCol.CopyCellToDocument(nSrcRow, nDestRow, rDestCol);
}
+namespace {
+
+bool CheckAndDeduplicateCondFormat(ScDocument* pDocument, ScConditionalFormat* pOldFormat, ScConditionalFormat* pNewFormat, SCTAB nTab)
+{
+ if (!pOldFormat)
+ return false;
+
+ if (pOldFormat->EqualEntries(*pNewFormat, true))
+ {
+ pDocument->RemoveCondFormatData(pOldFormat->GetRange(), nTab, pOldFormat->GetKey());
+ const ScRangeList& rNewRangeList = pNewFormat->GetRange();
+ ScRangeList& rDstRangeList = pOldFormat->GetRangeList();
+ for (size_t i = 0; i < rNewRangeList.size(); ++i)
+ {
+ rDstRangeList.Join(*rNewRangeList[i]);
+ }
+ pDocument->AddCondFormatData(pOldFormat->GetRange(), nTab, pOldFormat->GetKey());
+ return true;
+ }
+
+ return false;
+}
+
+}
+
void ScTable::CopyConditionalFormat( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
SCCOL nDx, SCROW nDy, const ScTable* pTable)
{
@@ -591,6 +616,11 @@ void ScTable::CopyConditionalFormat( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCRO
aRefCxt.mnTabDelta = nTab - pTable->nTab;
pNewFormat->UpdateReference(aRefCxt, true);
+ if (bSameDoc && pTable->nTab == nTab && CheckAndDeduplicateCondFormat(pDocument, mpCondFormatList->GetFormat((*itr)->GetKey()), pNewFormat, nTab))
+ {
+ delete pNewFormat;
+ continue;
+ }
sal_uLong nMax = 0;
bool bDuplicate = false;
for(ScConditionalFormatList::const_iterator itrCond = mpCondFormatList->begin();
@@ -598,17 +628,9 @@ void ScTable::CopyConditionalFormat( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCRO
{
// Check if there is the same format in the destination
// If there is, then simply expand its range
- if ((*itrCond)->EqualEntries(*pNewFormat, true))
+ if (CheckAndDeduplicateCondFormat(pDocument, (*itrCond).get(), pNewFormat, nTab))
{
bDuplicate = true;
- pDocument->RemoveCondFormatData((*itrCond)->GetRange(), nTab, (*itrCond)->GetKey());
- const ScRangeList& rNewRangeList = pNewFormat->GetRange();
- ScRangeList& rDstRangeList = (*itrCond)->GetRangeList();
- for (size_t i = 0; i < rNewRangeList.size(); ++i)
- {
- rDstRangeList.Join(*rNewRangeList[i]);
- }
- pDocument->AddCondFormatData((*itrCond)->GetRange(), nTab, (*itrCond)->GetKey());
break;
}
More information about the Libreoffice-commits
mailing list