implement filter translation

This commit is contained in:
Jakob Ketterl 2024-01-16 18:32:03 +01:00
parent 1fb3ed4066
commit 1e30e55669
2 changed files with 34 additions and 9 deletions

View file

@ -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)

View file

@ -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])