include/xmloff/xmltoken.hxx | 1 sc/inc/strings.hrc | 2 + sc/qa/unit/data/ods/autofilter-colors.ods |binary sc/qa/unit/subsequent_export_test2.cxx | 35 +++++++++++++++++------ sc/source/core/data/column3.cxx | 6 +-- sc/source/filter/xml/XMLExportDatabaseRanges.cxx | 17 +++++++++-- sc/source/filter/xml/xmlfilti.cxx | 6 +++ sc/source/ui/view/gridwin.cxx | 14 +++++++-- xmloff/source/core/xmltoken.cxx | 1 xmloff/source/token/tokens.txt | 1 10 files changed, 65 insertions(+), 18 deletions(-)
New commits: commit ba1e42f05e785c30d03553acd5647eebd7cdede6 Author: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> AuthorDate: Tue Aug 24 15:03:10 2021 +0200 Commit: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> CommitDate: Mon Sep 6 08:34:47 2021 +0200 tdf#142965 color filter: allow filtering by no fill/automatic color Change-Id: Idd0a41cea936fd19adbc07561b0d9c0cba735f0d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120946 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> diff --git a/include/xmloff/xmltoken.hxx b/include/xmloff/xmltoken.hxx index a7a3fc17a4f6..d30f0781b950 100644 --- a/include/xmloff/xmltoken.hxx +++ b/include/xmloff/xmltoken.hxx @@ -2114,6 +2114,7 @@ namespace xmloff::token { XML_WHOLE_PAGE, XML_WIDOWS, XML_WIDTH, + XML_WINDOW_FONT_COLOR, XML_WORD, XML_WORD_COUNT, XML_WRAP, diff --git a/sc/inc/strings.hrc b/sc/inc/strings.hrc index 070c574ba81f..7204a16eb1b6 100644 --- a/sc/inc/strings.hrc +++ b/sc/inc/strings.hrc @@ -37,6 +37,8 @@ #define SCSTR_FILTER_NOTEMPTY NC_("SCSTR_FILTER_NOTEMPTY", "Not Empty") #define SCSTR_FILTER_TEXT_COLOR NC_("SCSTR_FILTER_TEXT_COLOR", "Text color") #define SCSTR_FILTER_BACKGROUND_COLOR NC_("SCSTR_FILTER_BACKGROUND_COLOR", "Background color") +#define SCSTR_FILTER_NO_FILL NC_("SCSTR_FILTER_NO_FILL", "No fill") +#define SCSTR_FILTER_AUTOMATIC_COLOR NC_("SCSTR_FILTER_AUTOMATIC_COLOR", "Automatic") #define SCSTR_NONAME NC_("SCSTR_NONAME", "unnamed") #define SCSTR_INSERT_RTL NC_("SCSTR_INSERT_RTL", "Shift cells left") // "%1 is replaced to column letter, such as 'Column A'" diff --git a/sc/qa/unit/data/ods/autofilter-colors.ods b/sc/qa/unit/data/ods/autofilter-colors.ods index d5a88e9299fb..ad7c768412ea 100644 Binary files a/sc/qa/unit/data/ods/autofilter-colors.ods and b/sc/qa/unit/data/ods/autofilter-colors.ods differ diff --git a/sc/qa/unit/subsequent_export_test2.cxx b/sc/qa/unit/subsequent_export_test2.cxx index a25babe59134..12863985d79e 100644 --- a/sc/qa/unit/subsequent_export_test2.cxx +++ b/sc/qa/unit/subsequent_export_test2.cxx @@ -725,15 +725,34 @@ void ScExportTest2::testAutofilterColorsODF() = XPathHelper::parseExport2(*this, *xDocSh, m_xSFactory, "content.xml", FORMAT_ODS); CPPUNIT_ASSERT(pDoc); - assertXPath(pDoc, "//table:filter/table:filter-and/table:filter-condition[1]", "value", - "#e8f2a1"); - assertXPath(pDoc, "//table:filter/table:filter-and/" + assertXPath(pDoc, + "//table:database-ranges/table:database-range[1]/table:filter/table:filter-and/" + "table:filter-condition[1]", + "value", "#e8f2a1"); + assertXPath(pDoc, + "//table:database-ranges/table:database-range[1]/table:filter/table:filter-and/" + "table:filter-condition[1][@loext:data-type='background-color']"); + assertXPath(pDoc, + "//table:database-ranges/table:database-range[1]/table:filter/table:filter-and/" + "table:filter-condition[2]", + "value", "#3465a4"); + assertXPath(pDoc, "//table:database-ranges/table:database-range[1]/table:filter/" + "table:filter-and/table:filter-condition[2][@loext:data-type='text-color']"); + + // tdf#142965 Check "none" value when automatic text color / no fill was selected + assertXPath(pDoc, "//table:database-ranges/table:database-range[2]/table:filter/" + "table:filter-and/" "table:filter-condition[1][@loext:data-type='background-color']"); - assertXPath(pDoc, "//table:filter/table:filter-and/table:filter-condition[2]", "value", - "#3465a4"); - assertXPath( - pDoc, - "//table:filter/table:filter-and/table:filter-condition[2][@loext:data-type='text-color']"); + assertXPath(pDoc, + "//table:database-ranges/table:database-range[2]/table:filter/table:filter-and/" + "table:filter-condition[1]", + "value", "transparent"); + assertXPath(pDoc, "//table:database-ranges/table:database-range[3]/table:filter/" + "table:filter-and/table:filter-condition[1][@loext:data-type='text-color']"); + assertXPath(pDoc, + "//table:database-ranges/table:database-range[3]/table:filter/table:filter-and/" + "table:filter-condition[1]", + "value", "window-font-color"); } void ScExportTest2::testAutofilterColorsOOXML() diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx index b236eff858c7..d6f5c6e749f6 100644 --- a/sc/source/core/data/column3.cxx +++ b/sc/source/core/data/column3.cxx @@ -2434,13 +2434,11 @@ class FilterEntriesHandler ScAddress aPos(rColumn.GetCol(), nRow, rColumn.GetTab()); const SvxColorItem* pColor = rColumn.GetDoc().GetAttr(aPos, ATTR_FONT_COLOR); Color textColor = pColor->GetValue(); - if (textColor != COL_AUTO) - mrFilterEntries.addTextColor(textColor); + mrFilterEntries.addTextColor(textColor); const SvxBrushItem* pBrush = rColumn.GetDoc().GetAttr(aPos, ATTR_BACKGROUND); Color backgroundColor = pBrush->GetColor(); - if (backgroundColor != COL_AUTO) - mrFilterEntries.addBackgroundColor(backgroundColor); + mrFilterEntries.addBackgroundColor(backgroundColor); if (rCell.hasString()) { diff --git a/sc/source/filter/xml/XMLExportDatabaseRanges.cxx b/sc/source/filter/xml/XMLExportDatabaseRanges.cxx index 437b2704f5a9..92fe12aa24b2 100644 --- a/sc/source/filter/xml/XMLExportDatabaseRanges.cxx +++ b/sc/source/filter/xml/XMLExportDatabaseRanges.cxx @@ -458,9 +458,20 @@ private: XML_BACKGROUND_COLOR); } - OUStringBuffer buffer; - sax::Converter::convertColor(buffer, rItem.maColor); - mrExport.AddAttribute(XML_NAMESPACE_TABLE, XML_VALUE, buffer.makeStringAndClear()); + OUString colorValue; + if (rItem.maColor == COL_AUTO) // tdf#142965 + { + colorValue = rItem.meType == ScQueryEntry::ByTextColor + ? GetXMLToken(XML_WINDOW_FONT_COLOR) + : GetXMLToken(XML_TRANSPARENT); + } + else + { + OUStringBuffer buffer; + sax::Converter::convertColor(buffer, rItem.maColor); + colorValue = buffer.makeStringAndClear(); + } + mrExport.AddAttribute(XML_NAMESPACE_TABLE, XML_VALUE, colorValue); } else { diff --git a/sc/source/filter/xml/xmlfilti.cxx b/sc/source/filter/xml/xmlfilti.cxx index 7fb8b4e13a84..20a89d5763ec 100644 --- a/sc/source/filter/xml/xmlfilti.cxx +++ b/sc/source/filter/xml/xmlfilti.cxx @@ -432,7 +432,11 @@ void SAL_CALL ScXMLConditionContext::endFastElement( sal_Int32 /*nElement*/ ) { rItem.meType = IsXMLToken(sDataType, XML_TEXT_COLOR) ? ScQueryEntry::ByTextColor : ScQueryEntry::ByBackgroundColor; - sax::Converter::convertColor(rItem.maColor, sConditionValue); + if (IsXMLToken(sConditionValue, XML_TRANSPARENT) + || IsXMLToken(sConditionValue, XML_WINDOW_FONT_COLOR)) + rItem.maColor = COL_AUTO; + else + sax::Converter::convertColor(rItem.maColor, sConditionValue); } else { diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx index 2ef44c4f33ab..1b9a0ba1cf6a 100644 --- a/sc/source/ui/view/gridwin.cxx +++ b/sc/source/ui/view/gridwin.cxx @@ -932,8 +932,18 @@ void ScGridWindow::UpdateAutoFilterFromMenu(AutoFilterMode eMode) sal_Int32 nActive = -1; for (auto& rColor : aColors) { - pColorMenu->InsertItem(i, OUString(), MenuItemBits::CHECKABLE); - pColorMenu->SetItemColor(i, rColor); + if (rColor == COL_AUTO) + { + OUString sText = eMode == AutoFilterMode::TextColor + ? ScResId(SCSTR_FILTER_AUTOMATIC_COLOR) + : ScResId(SCSTR_FILTER_NO_FILL); + pColorMenu->InsertItem(i, sText, MenuItemBits::CHECKABLE); + } + else + { + pColorMenu->InsertItem(i, OUString(), MenuItemBits::CHECKABLE); + pColorMenu->SetItemColor(i, rColor); + } auto aItem = pEntry->GetQueryItem(); if (aItem.maColor == rColor && ((eMode == AutoFilterMode::TextColor diff --git a/xmloff/source/core/xmltoken.cxx b/xmloff/source/core/xmltoken.cxx index e3a45924091e..f2f3495671f7 100644 --- a/xmloff/source/core/xmltoken.cxx +++ b/xmloff/source/core/xmltoken.cxx @@ -2120,6 +2120,7 @@ namespace xmloff::token { TOKEN( "whole-page", XML_WHOLE_PAGE ), TOKEN( "widows", XML_WIDOWS ), TOKEN( "width", XML_WIDTH ), + TOKEN( "window-font-color", XML_WINDOW_FONT_COLOR ), TOKEN( "word", XML_WORD ), TOKEN( "word-count", XML_WORD_COUNT ), TOKEN( "wrap", XML_WRAP ), diff --git a/xmloff/source/token/tokens.txt b/xmloff/source/token/tokens.txt index 3fde556acfee..f52e9c492db9 100644 --- a/xmloff/source/token/tokens.txt +++ b/xmloff/source/token/tokens.txt @@ -2027,6 +2027,7 @@ white whole-page widows width +window-font-color word word-count wrap