diff options
Diffstat (limited to 'sc/source/ui/view/gridwin.cxx')
-rw-r--r-- | sc/source/ui/view/gridwin.cxx | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx index de77ce84cb57..e9f0fde3f4df 100644 --- a/sc/source/ui/view/gridwin.cxx +++ b/sc/source/ui/view/gridwin.cxx @@ -544,14 +544,18 @@ public: class AddSelectedItemString { - std::unordered_set<OUString>& mrSet; + std::unordered_set<OUString>& mrSetString; + std::unordered_set<double>& mrSetValue; public: - explicit AddSelectedItemString(std::unordered_set<OUString>& r) : - mrSet(r) {} + explicit AddSelectedItemString(std::unordered_set<OUString>& rString, std::unordered_set<double>& rValue) : + mrSetString(rString), mrSetValue(rValue) {} void operator() (const ScQueryEntry::Item& rItem) { - mrSet.insert(rItem.maString.getString()); + if( rItem.meType == ScQueryEntry::QueryType::ByValue ) + mrSetValue.insert(rItem.mfVal); + else + mrSetString.insert(rItem.maString.getString()); } }; @@ -659,13 +663,14 @@ void ScGridWindow::LaunchAutoFilterMenu(SCCOL nCol, SCROW nRow) ScQueryParam aParam; pDBData->GetQueryParam(aParam); std::vector<ScQueryEntry*> aEntries = aParam.FindAllEntriesByField(nCol); - std::unordered_set<OUString> aSelected; + std::unordered_set<OUString> aSelectedString; + std::unordered_set<double> aSelectedValue; for (ScQueryEntry* pEntry : aEntries) { if (pEntry && pEntry->bDoQuery && pEntry->eOp == SC_EQUAL) { ScQueryEntry::QueryItemsType& rItems = pEntry->GetQueryItems(); - std::for_each(rItems.begin(), rItems.end(), AddSelectedItemString(aSelected)); + std::for_each(rItems.begin(), rItems.end(), AddSelectedItemString(aSelectedString, aSelectedValue)); } } @@ -673,14 +678,15 @@ void ScGridWindow::LaunchAutoFilterMenu(SCCOL nCol, SCROW nRow) rControl.setMemberSize(aFilterEntries.size()); for (const auto& rEntry : aFilterEntries) { - const OUString& aVal = rEntry.GetString(); + const OUString& aStringVal = rEntry.GetString(); + const double aDoubleVal = rEntry.GetValue(); bool bSelected = true; - if (!aSelected.empty()) - bSelected = aSelected.count(aVal) > 0; + if (!aSelectedValue.empty() || !aSelectedString.empty()) + bSelected = aSelectedValue.count(aDoubleVal) > 0 || aSelectedString.count(aStringVal) > 0; if ( rEntry.IsDate() ) - rControl.addDateMember( aVal, rEntry.GetValue(), bSelected ); + rControl.addDateMember( aStringVal, rEntry.GetValue(), bSelected ); else - rControl.addMember(aVal, bSelected); + rControl.addMember(aStringVal, bSelected); } // Populate the menu. |