[Libreoffice-commits] core.git: 2 commits - sc/Module_sc.mk sc/qa sc/source sc/UITest_autofilter.mk
Markus Mohrhard
markus.mohrhard at googlemail.com
Mon Mar 27 00:52:16 UTC 2017
sc/Module_sc.mk | 1
sc/UITest_autofilter.mk | 15 ++++++++
sc/qa/uitest/autofilter/autofilter.py | 51 ++++++++++++++++++++++++++++
sc/qa/uitest/autofilter/data/autofilter.ods |binary
sc/source/ui/cctrl/checklistmenu.cxx | 10 +++--
sc/source/ui/inc/checklistmenu.hxx | 13 ++++++-
sc/source/ui/view/gridwin.cxx | 24 +++++--------
sc/source/ui/view/gridwin2.cxx | 14 +++----
8 files changed, 102 insertions(+), 26 deletions(-)
New commits:
commit 5d420856d432ff178560b2be37d33c6ddc439397
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sun Mar 26 23:00:24 2017 +0200
add test for tdf#106214
Change-Id: I9998aa40c3831a6033d4d61a6eab90d639ec5aa9
Reviewed-on: https://gerrit.libreoffice.org/35731
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
diff --git a/sc/Module_sc.mk b/sc/Module_sc.mk
index 31c1a58b7d81..4659f55ebfeb 100644
--- a/sc/Module_sc.mk
+++ b/sc/Module_sc.mk
@@ -141,6 +141,7 @@ $(eval $(call gb_Module_add_uicheck_targets,sc,\
UITest_conditional_format \
UITest_range_name \
UITest_hide_cols \
+ UITest_autofilter \
))
# vim: set noet sw=4 ts=4:
diff --git a/sc/UITest_autofilter.mk b/sc/UITest_autofilter.mk
new file mode 100644
index 000000000000..93bf17200bb1
--- /dev/null
+++ b/sc/UITest_autofilter.mk
@@ -0,0 +1,15 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_UITest_UITest,autofilter))
+
+$(eval $(call gb_UITest_add_modules,autofilter,$(SRCDIR)/sc/qa/uitest,\
+ autofilter/ \
+))
+# vim: set noet sw=4 ts=4:
diff --git a/sc/qa/uitest/autofilter/autofilter.py b/sc/qa/uitest/autofilter/autofilter.py
new file mode 100644
index 000000000000..ece49657d0c9
--- /dev/null
+++ b/sc/qa/uitest/autofilter/autofilter.py
@@ -0,0 +1,51 @@
+# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*-
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+from uitest.framework import UITestCase
+from uitest.path import get_srcdir_url
+
+from libreoffice.uno.propertyvalue import mkPropertyValues
+from libreoffice.calc.document import get_row
+
+import time
+
+def get_url_for_data_file(file_name):
+ return get_srcdir_url() + "/sc/qa/uitest/autofilter/data/" + file_name
+
+def is_row_hidden(doc, index):
+ row = get_row(doc, index)
+ val = row.getPropertyValue("IsVisible")
+ return not val
+
+class AutofilterTest(UITestCase):
+
+ def test_tdf106214(self):
+ doc = self.ui_test.load_file(get_url_for_data_file("autofilter.ods"))
+
+ xGridWin = self.xUITest.getTopFocusWindow().getChild("grid_window")
+ xGridWin.executeAction("LAUNCH", mkPropertyValues({"AUTOFILTER": "", "COL": "0", "ROW": "0"}))
+
+ xFloatWindow = self.xUITest.getFloatWindow()
+ xCheckListMenu = xFloatWindow.getChild("check_list_menu")
+
+ xTreeList = xCheckListMenu.getChild("check_list_box")
+ xFirstEntry = xTreeList.getChild("0")
+
+ xFirstEntry.executeAction("CLICK", tuple())
+
+ xOkBtn = xFloatWindow.getChild("ok")
+ xOkBtn.executeAction("CLICK", tuple())
+
+ self.assertFalse(is_row_hidden(doc, 0))
+ self.assertFalse(is_row_hidden(doc, 1))
+ self.assertFalse(is_row_hidden(doc, 2))
+ self.assertTrue(is_row_hidden(doc, 3))
+ self.assertFalse(is_row_hidden(doc, 4))
+
+ self.ui_test.close_doc()
+
+# vim: set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/sc/qa/uitest/autofilter/data/autofilter.ods b/sc/qa/uitest/autofilter/data/autofilter.ods
new file mode 100644
index 000000000000..49285933cec3
Binary files /dev/null and b/sc/qa/uitest/autofilter/data/autofilter.ods differ
commit b3d498755238cb0d9a7a3e33b6070c1e4c0e3482
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sun Mar 26 22:50:18 2017 +0200
handle date autofilter entries correctly, tdf#106214
Change-Id: I8fd2896c8998e79794a0ccaae1c2442caf8b89ac
Reviewed-on: https://gerrit.libreoffice.org/35730
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
diff --git a/sc/source/ui/cctrl/checklistmenu.cxx b/sc/source/ui/cctrl/checklistmenu.cxx
index ce637818191c..dba72366b4aa 100644
--- a/sc/source/ui/cctrl/checklistmenu.cxx
+++ b/sc/source/ui/cctrl/checklistmenu.cxx
@@ -1916,12 +1916,14 @@ void ScCheckListMenuWindow::getResult(ResultType& rResult)
if (aLabel.isEmpty())
aLabel = ScGlobal::GetRscString(STR_EMPTYDATA);
bool bState = maChecks->IsChecked( aLabel, maMembers[i].mpParent );
- OUString sName;
+ ResultEntry aResultEntry;
+ aResultEntry.bValid = bState;
if ( maMembers[i].mbDate )
- sName = maMembers[i].maRealName;
+ aResultEntry.aName = maMembers[i].maRealName;
else
- sName = maMembers[i].maName;
- aResult.insert(ResultType::value_type(sName, bState));
+ aResultEntry.aName = maMembers[i].maName;
+ aResultEntry.bDate = maMembers[i].mbDate;
+ aResult.insert(aResultEntry);
}
}
rResult.swap(aResult);
diff --git a/sc/source/ui/inc/checklistmenu.hxx b/sc/source/ui/inc/checklistmenu.hxx
index f2e208ad4f6b..1864415b6aaa 100644
--- a/sc/source/ui/inc/checklistmenu.hxx
+++ b/sc/source/ui/inc/checklistmenu.hxx
@@ -292,7 +292,18 @@ struct ScCheckListMember
class ScCheckListMenuWindow : public ScMenuFloatingWindow
{
public:
- typedef std::unordered_map<OUString, bool, OUStringHash> ResultType;
+ struct ResultEntry
+ {
+ OUString aName;
+ bool bValid;
+ bool bDate;
+
+ bool operator<(const ResultEntry& rhs) const
+ {
+ return aName < rhs.aName;
+ }
+ };
+ typedef std::set<ResultEntry> ResultType;
/**
* Extended data that the client code may need to store. Create a
diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx
index bfbae1242a84..c590bc336b0d 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -590,13 +590,16 @@ class AddItemToEntry : public std::unary_function<OUString, void>
public:
AddItemToEntry(ScQueryEntry::QueryItemsType& rItems, svl::SharedStringPool& rPool) :
mrItems(rItems), mrPool(rPool) {}
- void operator() (const OUString& rSelected)
+ void operator() (const ScCheckListMenuWindow::ResultEntry& rEntry)
{
- ScQueryEntry::Item aNew;
- aNew.maString = mrPool.intern(rSelected);
- aNew.meType = ScQueryEntry::ByString;
- aNew.mfVal = 0.0;
- mrItems.push_back(aNew);
+ if (rEntry.bValid)
+ {
+ ScQueryEntry::Item aNew;
+ aNew.maString = mrPool.intern(rEntry.aName);
+ aNew.meType = rEntry.bDate ? ScQueryEntry::ByDate : ScQueryEntry::ByString;
+ aNew.mfVal = 0.0;
+ mrItems.push_back(aNew);
+ }
}
};
@@ -800,17 +803,10 @@ void ScGridWindow::UpdateAutoFilterFromMenu(AutoFilterMode eMode)
ScCheckListMenuWindow::ResultType aResult;
mpAutoFilterPopup->getResult(aResult);
- std::vector<OUString> aSelected;
- ScCheckListMenuWindow::ResultType::const_iterator itr = aResult.begin(), itrEnd = aResult.end();
- for (; itr != itrEnd; ++itr)
- {
- if (itr->second)
- aSelected.push_back(itr->first);
- }
ScQueryEntry::QueryItemsType& rItems = pEntry->GetQueryItems();
rItems.clear();
- std::for_each(aSelected.begin(), aSelected.end(), AddItemToEntry(rItems, rPool));
+ std::for_each(aResult.begin(), aResult.end(), AddItemToEntry(rItems, rPool));
}
break;
case Top10:
diff --git a/sc/source/ui/view/gridwin2.cxx b/sc/source/ui/view/gridwin2.cxx
index 1cdef6e1b205..59d70bdb2164 100644
--- a/sc/source/ui/view/gridwin2.cxx
+++ b/sc/source/ui/view/gridwin2.cxx
@@ -568,29 +568,29 @@ void ScGridWindow::UpdateDPFromFieldPopupMenu()
ScCheckListMenuWindow::ResultType aRawResult;
mpDPFieldPopup->getResult(aRawResult);
- ScCheckListMenuWindow::ResultType aResult;
+ std::unordered_map<OUString, bool, OUStringHash> aResult;
ScCheckListMenuWindow::ResultType::const_iterator itr = aRawResult.begin(), itrEnd = aRawResult.end();
for (; itr != itrEnd; ++itr)
{
- MemNameMapType::const_iterator itrNameMap = aMemNameMap.find(itr->first);
+ MemNameMapType::const_iterator itrNameMap = aMemNameMap.find(itr->aName);
if (itrNameMap == aMemNameMap.end())
{
// This is an original member name. Use it as-is.
- OUString aName = itr->first;
+ OUString aName = itr->aName;
if (aName.equals(ScGlobal::GetRscString(STR_EMPTYDATA)))
// Translate the special empty name into an empty string.
aName.clear();
aResult.insert(
- ScCheckListMenuWindow::ResultType::value_type(
- aName, itr->second));
+ std::unordered_map<OUString, bool, OUStringHash>::value_type(
+ aName, itr->bValid));
}
else
{
// This is a layout name. Get the original member name and use it.
aResult.insert(
- ScCheckListMenuWindow::ResultType::value_type(
- itrNameMap->second, itr->second));
+ std::unordered_map<OUString, bool, OUStringHash>::value_type(
+ itrNameMap->second, itr->bValid));
}
}
pDim->UpdateMemberVisibility(aResult);
More information about the Libreoffice-commits
mailing list