From 1e30e556699989011aabc90fcbfecf15b44fb7b2 Mon Sep 17 00:00:00 2001 From: Jakob Ketterl Date: Tue, 16 Jan 2024 18:32:03 +0100 Subject: [PATCH] implement filter translation --- owrx/active/list/__init__.py | 14 +++++++++-- test/owrx/active/list/test_active_list.py | 29 +++++++++++++++++------ 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/owrx/active/list/__init__.py b/owrx/active/list/__init__.py index 0301744c..d888be22 100644 --- a/owrx/active/list/__init__.py +++ b/owrx/active/list/__init__.py @@ -161,8 +161,18 @@ class ActiveListFilterListener(ActiveListListener): for i in range(idx, len(self.keyMap)): self.keyMap[i] -= 1 elif isinstance(change, ActiveListIndexMoved): - idx = self.keyMap.index(change.old_index) - #TODO update keymap, fire change event + start_idx = len([x for x in self.keyMap if x < change.old_index]) + end_idx = len([x for x in self.keyMap if x < change.new_index]) + offset = 0 + if change.old_index in self.keyMap: + self.target.move(start_idx, end_idx) + offset = 1 + if end_idx > start_idx: + for i in reversed(range(start_idx, end_idx + 1)): + self.keyMap[i] = self.keyMap[i + offset] - 1 + else: + for i in range(end_idx + 1, start_idx): + self.keyMap[i] = self.keyMap[i - offset] + 1 def _onMonitor(self, value): idx = self.source.index(value) diff --git a/test/owrx/active/list/test_active_list.py b/test/owrx/active/list/test_active_list.py index e82db745..9aae3115 100644 --- a/test/owrx/active/list/test_active_list.py +++ b/test/owrx/active/list/test_active_list.py @@ -382,13 +382,28 @@ class ActiveListTest(TestCase): self.assertEqual(changes[0].old_index, 1) self.assertEqual(changes[0].new_index, 4) - #def testActiveFilterMove(self): - # list = ActiveList([1, 2, 3, 4, 5]) - # filteredList = list.filter(lambda x: x != 3) - # list.move(1, 4) - # self.assertEqual(len(filteredList), 4) - # self.assertEqual(filteredList[1], 4) - # self.assertEqual(filteredList[3], 2) + def testActiveFilterMove(self): + list = ActiveList([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) + filteredList = list.filter(lambda x: x != 3) + list.move(1, 4) + self.assertEqual(len(filteredList), 9) + self.assertEqual(filteredList[1], 4) + self.assertEqual(filteredList[3], 2) + + def testActiveFilterMoveReverse(self): + list = ActiveList([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) + filteredList = list.filter(lambda x: x != 3) + list.move(4, 1) + self.assertEqual(len(filteredList), 9) + self.assertEqual(filteredList[1], 5) + self.assertEqual(filteredList[3], 4) + + def testActiveFilterMoveFilteredItem(self): + list = ActiveList([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) + filteredList = list.filter(lambda x: x != 3) + list.move(2, 4) + self.assertEqual(len(filteredList), 9) + self.assertEqual(filteredList[2], 4) def testActiveListFlattenMove(self): firstMember = ActiveList([1, 2, 3, 4, 5])