sc/source/core/data/column3.cxx | 29 +++++++++++++++++++++++++++-- sc/source/core/data/table3.cxx | 29 +++++++++++++++++++++++++++-- 2 files changed, 54 insertions(+), 4 deletions(-)
New commits: commit 1007a026ccbee1e5788e463bb0a69cbae051dbf1 Author: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> AuthorDate: Thu Aug 26 10:54:23 2021 +0200 Commit: Thorsten Behrens <thorsten.behr...@allotropia.de> CommitDate: Thu Sep 9 10:59:11 2021 +0200 tdf#142579 Consider color scale background colors in color filter When using a color scale in conditional formatting, the color from the color scale overrides the cell background color. Consider this in the color filter. Change-Id: Ifbefedbf1152165b65f8fbc3eeff29ffccf29898 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/121074 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> (cherry picked from commit 817ef891cf2bef8fdc82852f73acb422afb89bd2) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/121709 Tested-by: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de> diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx index 9923e657f247..6acb7a80263a 100644 --- a/sc/source/core/data/column3.cxx +++ b/sc/source/core/data/column3.cxx @@ -44,6 +44,8 @@ #include <sharedformula.hxx> #include <listenercontext.hxx> #include <filterentries.hxx> +#include <conditio.hxx> +#include <colorscale.hxx> #include <editeng/brushitem.hxx> #include <editeng/colritem.hxx> @@ -2417,8 +2419,31 @@ class FilterEntriesHandler Color textColor = pColor->GetValue(); mrFilterEntries.addTextColor(textColor); - const SvxBrushItem* pBrush = rColumn.GetDoc()->GetAttr(aPos, ATTR_BACKGROUND); - Color backgroundColor = pBrush->GetColor(); + // Background color can be set via conditional formatting - check that first + Color backgroundColor; + bool bHasConditionalColor = false; + ScConditionalFormat* pCondFormat + = rColumn.GetDoc()->GetCondFormat(aPos.Col(), aPos.Row(), aPos.Tab()); + if (pCondFormat) + { + for (size_t i = 0; i < pCondFormat->size(); i++) + { + auto aEntry = pCondFormat->GetEntry(i); + if (aEntry->GetType() == ScFormatEntry::Type::Colorscale) + { + const ScColorScaleFormat* pColFormat + = static_cast<const ScColorScaleFormat*>(aEntry); + backgroundColor = *(pColFormat->GetColor(aPos)); + bHasConditionalColor = true; + } + } + } + + if (!bHasConditionalColor) + { + const SvxBrushItem* pBrush = rColumn.GetDoc()->GetAttr(aPos, ATTR_BACKGROUND); + backgroundColor = pBrush->GetColor(); + } mrFilterEntries.addBackgroundColor(backgroundColor); if (rCell.hasString()) diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx index 481d74e83f6e..0a50f790d8b6 100644 --- a/sc/source/core/data/table3.cxx +++ b/sc/source/core/data/table3.cxx @@ -66,6 +66,8 @@ #include <bcaslot.hxx> #include <reordermap.hxx> #include <drwlayer.hxx> +#include <conditio.hxx> +#include <colorscale.hxx> #include <svl/sharedstringpool.hxx> @@ -2703,8 +2705,31 @@ public: const ScQueryEntry::Item& rItem) { ScAddress aPos(nCol, nRow, nTab); - const SvxBrushItem* pBrush = mrDoc.GetAttr(aPos, ATTR_BACKGROUND); - Color color = pBrush->GetColor(); + Color color; + // Background color can be set via conditional formatting - check that first + ScConditionalFormat* pCondFormat = mrDoc.GetCondFormat(nCol, nRow, nTab); + bool bHasConditionalColor = false; + if (pCondFormat) + { + for (size_t i = 0; i < pCondFormat->size(); i++) + { + auto aEntry = pCondFormat->GetEntry(i); + if (aEntry->GetType() == ScFormatEntry::Type::Colorscale) + { + const ScColorScaleFormat* pColFormat + = static_cast<const ScColorScaleFormat*>(aEntry); + color = *(pColFormat->GetColor(aPos)); + bHasConditionalColor = true; + } + } + } + + if (!bHasConditionalColor) + { + const SvxBrushItem* pBrush = mrDoc.GetAttr(aPos, ATTR_BACKGROUND); + color = pBrush->GetColor(); + } + bool bMatch = rItem.maColor == color; return std::pair<bool, bool>(bMatch, false); }