sc/source/core/data/queryevaluator.cxx | 59 +-------------------------------- sc/source/core/data/table5.cxx | 16 ++++++++ 2 files changed, 18 insertions(+), 57 deletions(-)
New commits: commit 240c2410973e5eec1793656538619560a28a500f Author: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> AuthorDate: Thu Apr 27 11:01:02 2023 +0200 Commit: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> CommitDate: Mon May 8 12:12:15 2023 +0200 tdf#144549 Consider number format colors when filtering/sorting by color Change-Id: Ie2e7aa42c15967c1ce04157163b37798522f7349 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151091 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> diff --git a/sc/source/core/data/queryevaluator.cxx b/sc/source/core/data/queryevaluator.cxx index 2562e513c670..a8a08d9edfd9 100644 --- a/sc/source/core/data/queryevaluator.cxx +++ b/sc/source/core/data/queryevaluator.cxx @@ -593,26 +593,7 @@ std::pair<bool, bool> ScQueryEvaluator::compareByTextColor(SCCOL nCol, SCROW nRo const ScQueryEntry::Item& rItem) { ScAddress aPos(nCol, nRow, mrTab.GetTab()); - Color color; - bool bHasConditionalColor = false; - // Text color can be set via conditional formatting - check that first - const ScPatternAttr* pPattern = mrDoc.GetPattern(nCol, nRow, mrTab.GetTab()); - if (pPattern) - { - if (!pPattern->GetItem(ATTR_CONDITIONAL).GetCondFormatData().empty()) - { - const SfxItemSet* pCondSet = mrDoc.GetCondResult(nCol, nRow, mrTab.GetTab()); - 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(); - } + Color color = mrTab.GetCellTextColor(aPos); bool bMatch = rItem.maColor == color; return std::pair<bool, bool>(bMatch, false); @@ -622,43 +603,7 @@ std::pair<bool, bool> ScQueryEvaluator::compareByBackgroundColor(SCCOL nCol, SCR const ScQueryEntry::Item& rItem) { ScAddress aPos(nCol, nRow, mrTab.GetTab()); - Color color; - - // Background color can be set via conditional formatting - check that first - bool bHasConditionalColor = false; - const ScPatternAttr* pPattern = mrDoc.GetPattern(nCol, nRow, mrTab.GetTab()); - if (pPattern) - { - if (!pPattern->GetItem(ATTR_CONDITIONAL).GetCondFormatData().empty()) - { - const SfxItemSet* pCondSet = mrDoc.GetCondResult(nCol, nRow, mrTab.GetTab()); - const SvxBrushItem* pBackgroundColor = &pPattern->GetItem(ATTR_BACKGROUND, pCondSet); - color = pBackgroundColor->GetColor(); - bHasConditionalColor = true; - } - } - - ScConditionalFormat* pCondFormat = mrDoc.GetCondFormat(nCol, nRow, mrTab.GetTab()); - 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(); - } + Color color = mrTab.GetCellBackgroundColor(aPos); bool bMatch = rItem.maColor == color; return std::pair<bool, bool>(bMatch, false); diff --git a/sc/source/core/data/table5.cxx b/sc/source/core/data/table5.cxx index be866aa634ea..a238cde6c32d 100644 --- a/sc/source/core/data/table5.cxx +++ b/sc/source/core/data/table5.cxx @@ -39,12 +39,15 @@ #include <userdat.hxx> #include <conditio.hxx> #include <colorscale.hxx> +#include <cellform.hxx> #include <com/sun/star/sheet/TablePageBreakData.hpp> #include <editeng/brushitem.hxx> #include <editeng/colritem.hxx> #include <osl/diagnose.h> +#include <svl/numformat.hxx> +#include <svl/zformat.hxx> #include <algorithm> #include <limits> @@ -1100,6 +1103,19 @@ Color ScTable::GetCellTextColor(ScAddress aPos) const const SvxColorItem* pColor = &pPattern->GetItem(ATTR_FONT_COLOR, pCondSet); return pColor->GetValue(); } + + if (pPattern->GetItem(ATTR_VALUE_FORMAT).GetValue()) + { + SvNumberFormatter* pNumberFormatter = GetDoc().GetFormatTable(); + const SfxUInt32Item pItem = pPattern->GetItem(ATTR_VALUE_FORMAT); + auto& rDoc = const_cast<ScDocument&>(GetDoc()); + const Color* pColor; + ScRefCellValue aCell(rDoc, aPos); + ScCellFormat::GetString(rDoc, aPos, pItem.GetValue(), &pColor, *pNumberFormatter, false, + false); + if (pColor) + return *pColor; + } } const SvxColorItem* pColor = GetDoc().GetAttr(aPos, ATTR_FONT_COLOR);