Skip to content

Instantly share code, notes, and snippets.

@geojeff
Created May 12, 2013 08:37
Show Gist options
  • Save geojeff/5562863 to your computer and use it in GitHub Desktop.
Save geojeff/5562863 to your computer and use it in GitHub Desktop.
class RangeObservingList(ObservableList):
'''Adds range-observing intelligence to ObservableList'''
range_change = ObjectProperty(None)
def __init__(self, *largs):
super(RangeObservingList, self).__init__(*largs)
def __setitem__(self, key, value):
self.range_change = None
super(RangeObservingList, self).__setitem__(key, value)
def __delitem__(self, key):
index = self.index(key)
self.range_change = ('delete', (index, index))
super(RangeObservingList, self).__delitem__(key)
def __setslice__(self, *largs):
self.range_change = None
super(RangeObservingList, self).__setslice__(*largs)
def __delslice__(self, *largs):
start_index = largs[0]
end_index = largs[-1]
self.range_change = ('delete', (start_index, end_index))
super(RangeObservingList, self).__delslice__(*largs)
def __iadd__(self, *largs):
self.range_change = None
super(RangeObservingList, self).__iadd__(*largs)
def __imul__(self, *largs):
self.range_change = None
super(RangeObservingList, self).__imul__(*largs)
def append(self, *largs):
index = len(self)
self.range_change = ('add', (index, index))
super(RangeObservingList, self).append(*largs)
def remove(self, *largs):
index = self.index(largs[0])
self.range_change = ('delete', (index, index))
super(RangeObservingList, self).remove(*largs)
def insert(self, *largs):
index = self.index(largs[0])
self.range_change = ('insert', (index, index))
super(RangeObservingList, self).insert(*largs)
def pop(self, *largs):
if largs[0]:
index = self.index(largs[0])
else:
index = len(self) - 1
self.range_change = ('remove', (index, index))
return super(RangeObservingList, self).pop(*largs)
def extend(self, *largs):
start_index = len(self)
end_index = start_index + len(largs) - 1
self.range_change = ('add', (start_index, end_index))
super(RangeObservingList, self).extend(*largs)
def sort(self, *largs):
self.range_change = ('sort', (0, len(self) - 1))
super(RangeObservingList, self).sort(*largs)
def reverse(self, *largs):
self.range_change = ('sort', (0, len(self) - 1))
super(RangeObservingList, self).reverse(*largs)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment