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.mehrbrodt@allotropia.de>
Reviewed-by: Samuel Mehrbrodt <samuel.mehrbrodt@allotropia.de>
diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
index 2408323..def3e6a 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 a0d62f6..97d761f 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++)