summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Mehrbrodt <samuel.mehrbrodt@allotropia.de>2021-08-24 15:03:10 +0200
committerThorsten Behrens <thorsten.behrens@allotropia.de>2021-09-09 10:58:45 +0200
commit66c025310b0b85cd8fd98b5dcbe77a161fe2ed36 (patch)
treed8e1058fb245ba444fd8b4514bd7e9f2cc91c118
parent3ab444202163700198d3b5435ed79bd77e34ee47 (diff)
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.mehrbrodt@allotropia.de> (cherry picked from commit ba1e42f05e785c30d03553acd5647eebd7cdede6) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/121706 Tested-by: Samuel Mehrbrodt <samuel.mehrbrodt@allotropia.de> Reviewed-by: Thorsten Behrens <thorsten.behrens@allotropia.de>
-rw-r--r--include/xmloff/xmltoken.hxx1
-rw-r--r--sc/inc/strings.hrc2
-rw-r--r--sc/qa/unit/data/ods/autofilter-colors.odsbin9556 -> 10991 bytes
-rw-r--r--sc/qa/unit/subsequent_export-test.cxx35
-rw-r--r--sc/source/core/data/column3.cxx6
-rw-r--r--sc/source/filter/xml/XMLExportDatabaseRanges.cxx17
-rw-r--r--sc/source/filter/xml/xmlfilti.cxx6
-rw-r--r--sc/source/ui/view/gridwin.cxx14
-rw-r--r--xmloff/source/core/xmltoken.cxx1
-rw-r--r--xmloff/source/token/tokens.txt1
10 files changed, 68 insertions, 15 deletions
diff --git a/include/xmloff/xmltoken.hxx b/include/xmloff/xmltoken.hxx
index 5421a90da5cb..cedcce7d2860 100644
--- a/include/xmloff/xmltoken.hxx
+++ b/include/xmloff/xmltoken.hxx
@@ -2083,6 +2083,7 @@ namespace xmloff { namespace 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 95833ec5b2f2..ea550b491521 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")
// "%1 is replaced to column letter, such as 'Column A'"
#define SCSTR_COLUMN NC_("SCSTR_COLUMN", "Column %1")
diff --git a/sc/qa/unit/data/ods/autofilter-colors.ods b/sc/qa/unit/data/ods/autofilter-colors.ods
index d5a88e9299fb..ad7c768412ea 100644
--- a/sc/qa/unit/data/ods/autofilter-colors.ods
+++ b/sc/qa/unit/data/ods/autofilter-colors.ods
Binary files differ
diff --git a/sc/qa/unit/subsequent_export-test.cxx b/sc/qa/unit/subsequent_export-test.cxx
index ff2a2613d466..475dee2fc742 100644
--- a/sc/qa/unit/subsequent_export-test.cxx
+++ b/sc/qa/unit/subsequent_export-test.cxx
@@ -4065,13 +4065,38 @@ void ScExportTest::testAutofilterColorsODF()
ScDocShellRef xDocSh = loadDoc(u"autofilter-colors.", FORMAT_ODS);
CPPUNIT_ASSERT(xDocSh.is());
- xmlDocPtr pDoc = XPathHelper::parseExport2(*this, *xDocSh, m_xSFactory, "content.xml", FORMAT_ODS);
+ xmlDocPtr pDoc
+ = 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/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[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: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 ScExportTest::testAutofilterColorsOOXML()
diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
index 4ee065ad92aa..9923e657f247 100644
--- a/sc/source/core/data/column3.cxx
+++ b/sc/source/core/data/column3.cxx
@@ -2415,13 +2415,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 687168abe5cf..d378bd47e5ba 100644
--- a/sc/source/filter/xml/XMLExportDatabaseRanges.cxx
+++ b/sc/source/filter/xml/XMLExportDatabaseRanges.cxx
@@ -453,9 +453,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 000dbdfaf302..2c2726c45bd7 100644
--- a/sc/source/filter/xml/xmlfilti.cxx
+++ b/sc/source/filter/xml/xmlfilti.cxx
@@ -444,7 +444,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 02a8d9e8f370..7a84eb74405c 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -890,8 +890,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 8c2276ab1251..5f0868b4e5c0 100644
--- a/xmloff/source/core/xmltoken.cxx
+++ b/xmloff/source/core/xmltoken.cxx
@@ -2085,6 +2085,7 @@ namespace xmloff { namespace 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 d2dd36122280..178a5bda3161 100644
--- a/xmloff/source/token/tokens.txt
+++ b/xmloff/source/token/tokens.txt
@@ -2000,6 +2000,7 @@ white
whole-page
widows
width
+window-font-color
word
word-count
wrap