sc/source/core/data/column3.cxx | 14 ++++++++++---- sc/source/core/data/table3.cxx | 16 +++++++++++++++- 2 files changed, 25 insertions(+), 5 deletions(-)
New commits: commit 88e81b3c5f7167d7dfc93617c3f9d9d6633ba0ad Author: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> AuthorDate: Tue Aug 31 10:49:51 2021 +0200 Commit: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> CommitDate: Mon Sep 6 11:06:48 2021 +0200 tdf#142579 Consider cond. format background colors in color filter In addition to color scale, consider background colors set by a conditional style. Change-Id: I203c4a5ae87aa7b47c2caafcac703b0a0c1a677c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/121474 Tested-by: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> Reviewed-by: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx index 240832316ec5..def3e6aea483 100644 --- a/sc/source/core/data/column3.cxx +++ b/sc/source/core/data/column3.cxx @@ -2436,9 +2436,12 @@ class FilterEntriesHandler // Colors ScAddress aPos(rColumn.GetCol(), nRow, rColumn.GetTab()); - // Text color + Color backgroundColor; + bool bHasConditionalBackgroundColor = false; + Color textColor; bool bHasConditionalTextColor = false; + // Check text & background color from cond. formatting const ScPatternAttr* pPattern = mrColumn.GetDoc().GetPattern(aPos.Col(), aPos.Row(), aPos.Tab()); if (pPattern) @@ -2450,8 +2453,13 @@ class FilterEntriesHandler const SvxColorItem* pColor = &pPattern->GetItem(ATTR_FONT_COLOR, pCondSet); textColor = pColor->GetValue(); bHasConditionalTextColor = true; + + const SvxBrushItem* pBackgroundColor = &pPattern->GetItem(ATTR_BACKGROUND, pCondSet); + backgroundColor = pBackgroundColor->GetColor(); + bHasConditionalBackgroundColor = true; } } + if (!bHasConditionalTextColor) { const SvxColorItem* pColor = rColumn.GetDoc().GetAttr(aPos, ATTR_FONT_COLOR); @@ -2459,9 +2467,7 @@ class FilterEntriesHandler } mrFilterEntries.addTextColor(textColor); - // Background color - Color backgroundColor; - bool bHasConditionalBackgroundColor = false; + // Color scale needs a different handling ScConditionalFormat* pCondFormat = rColumn.GetDoc().GetCondFormat(aPos.Col(), aPos.Row(), aPos.Tab()); if (pCondFormat) diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx index a0d62f6eaff6..97d761f2479b 100644 --- a/sc/source/core/data/table3.cxx +++ b/sc/source/core/data/table3.cxx @@ -2738,9 +2738,23 @@ public: { ScAddress aPos(nCol, nRow, nTab); Color color; + // Background color can be set via conditional formatting - check that first - ScConditionalFormat* pCondFormat = mrDoc.GetCondFormat(nCol, nRow, nTab); bool bHasConditionalColor = false; + const ScPatternAttr* pPattern = mrDoc.GetPattern(nCol, nRow, nTab); + if (pPattern) + { + if (!pPattern->GetItem(ATTR_CONDITIONAL).GetCondFormatData().empty()) + { + const SfxItemSet* pCondSet + = mrDoc.GetCondResult(nCol, nRow, nTab); + const SvxBrushItem* pBackgroundColor = &pPattern->GetItem(ATTR_BACKGROUND, pCondSet); + color = pBackgroundColor->GetColor(); + bHasConditionalColor = true; + } + } + + ScConditionalFormat* pCondFormat = mrDoc.GetCondFormat(nCol, nRow, nTab); if (pCondFormat) { for (size_t i = 0; i < pCondFormat->size(); i++)