diff options
author | Samuel Mehrbrodt <samuel.mehrbrodt@allotropia.de> | 2021-08-30 16:01:02 +0200 |
---|---|---|
committer | Xisco Fauli <xiscofauli@libreoffice.org> | 2021-09-24 14:20:48 +0200 |
commit | 52596dedfe629a008e198d023ffcae45a8a791ee (patch) | |
tree | 82a86009439894f6407fa8975a7eef9ad12cbc67 | |
parent | 63b004d4cab295c708686989869c9033ec91e449 (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.cxx | 34 | ||||
-rw-r--r-- | sc/source/core/data/table3.cxx | 24 |
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); } |