summaryrefslogtreecommitdiff
path: root/sc/source/ui/view/gridwin.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/ui/view/gridwin.cxx')
-rw-r--r--sc/source/ui/view/gridwin.cxx28
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.