summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Mehrbrodt <samuel.mehrbrodt@allotropia.de>2021-08-30 16:01:02 +0200
committerXisco Fauli <xiscofauli@libreoffice.org>2021-09-24 14:20:48 +0200
commit52596dedfe629a008e198d023ffcae45a8a791ee (patch)
tree82a86009439894f6407fa8975a7eef9ad12cbc67
parent63b004d4cab295c708686989869c9033ec91e449 (diff)
tdf#142580 Consider cond. format text colors in color filter
When using a conditional style to override the text color in conditional formatting, the color from the style overrides directly applied text color. Consider this in the color filter. Change-Id: Ieaa1c475d87866de1e2d497127be9d06d1f3d3f1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/121311 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt <samuel.mehrbrodt@allotropia.de> Signed-off-by: Xisco Fauli <xiscofauli@libreoffice.org> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122466
-rw-r--r--sc/source/core/data/column3.cxx34
-rw-r--r--sc/source/core/data/table3.cxx24
2 files changed, 49 insertions, 9 deletions
diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
index 905fa65a0f08..6532996d7b71 100644
--- a/sc/source/core/data/column3.cxx
+++ b/sc/source/core/data/column3.cxx
@@ -46,6 +46,7 @@
#include <filterentries.hxx>
#include <conditio.hxx>
#include <colorscale.hxx>
+#include <stlpool.hxx>
#include <editeng/brushitem.hxx>
#include <editeng/colritem.hxx>
@@ -2433,14 +2434,34 @@ class FilterEntriesHandler
// Colors
ScAddress aPos(rColumn.GetCol(), nRow, rColumn.GetTab());
- const SvxColorItem* pColor = rColumn.GetDoc().GetAttr(aPos, ATTR_FONT_COLOR);
- Color textColor = pColor->GetValue();
+
+ // Text color
+ Color textColor;
+ bool bHasConditionalTextColor = false;
+ const ScPatternAttr* pPattern
+ = mrColumn.GetDoc().GetPattern(aPos.Col(), aPos.Row(), aPos.Tab());
+ if (pPattern)
+ {
+ if (!pPattern->GetItem(ATTR_CONDITIONAL).GetCondFormatData().empty())
+ {
+ const SfxItemSet* pCondSet
+ = mrColumn.GetDoc().GetCondResult(aPos.Col(), aPos.Row(), aPos.Tab());
+ const SvxColorItem* pColor = &pPattern->GetItem(ATTR_FONT_COLOR, pCondSet);
+ textColor = pColor->GetValue();
+ bHasConditionalTextColor = true;
+ }
+ }
+ if (!bHasConditionalTextColor)
+ {
+ const SvxColorItem* pColor = rColumn.GetDoc().GetAttr(aPos, ATTR_FONT_COLOR);
+ textColor = pColor->GetValue();
+ }
if (textColor != COL_AUTO)
mrFilterEntries.addTextColor(textColor);
- // Background color can be set via conditional formatting - check that first
+ // Background color
Color backgroundColor;
- bool bHasConditionalColor = false;
+ bool bHasConditionalBackgroundColor = false;
ScConditionalFormat* pCondFormat
= rColumn.GetDoc().GetCondFormat(aPos.Col(), aPos.Row(), aPos.Tab());
if (pCondFormat)
@@ -2453,12 +2474,11 @@ class FilterEntriesHandler
const ScColorScaleFormat* pColFormat
= static_cast<const ScColorScaleFormat*>(aEntry);
backgroundColor = *(pColFormat->GetColor(aPos));
- bHasConditionalColor = true;
+ bHasConditionalBackgroundColor = true;
}
}
}
-
- if (!bHasConditionalColor)
+ if (!bHasConditionalBackgroundColor)
{
const SvxBrushItem* pBrush = rColumn.GetDoc().GetAttr(aPos, ATTR_BACKGROUND);
backgroundColor = pBrush->GetColor();
diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx
index d41c53a08532..553223c685e9 100644
--- a/sc/source/core/data/table3.cxx
+++ b/sc/source/core/data/table3.cxx
@@ -2819,8 +2819,28 @@ public:
const ScQueryEntry::Item& rItem)
{
ScAddress aPos(nCol, nRow, nTab);
- const SvxColorItem* pColor = mrDoc.GetAttr(aPos, ATTR_FONT_COLOR);
- Color color = pColor->GetValue();
+ Color color;
+ bool bHasConditionalColor = false;
+ // Text color can be set via conditional formatting - check that first
+ 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 SvxColorItem* pColor = &pPattern->GetItem(ATTR_FONT_COLOR, pCondSet);
+ color = pColor->GetValue();
+ bHasConditionalColor = true;
+ }
+ }
+
+ if (!bHasConditionalColor)
+ {
+ const SvxColorItem* pColor = mrDoc.GetAttr(aPos, ATTR_FONT_COLOR);
+ color = pColor->GetValue();
+ }
+
bool bMatch = rItem.maColor == color;
return std::pair<bool, bool>(bMatch, false);
}