ObservableList.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from . import Observable
  2. class ObservableList(list, Observable):
  3. def __init__(self, lst: list, parent: Observable = None, key: int = None):
  4. list.__init__(self)
  5. Observable.__init__(self, parent, key)
  6. for element in lst:
  7. list.append(self, Observable.create(element, self, key))
  8. def __getitem__(self, value):
  9. return super().__getitem__(int(value))
  10. def __setitem__(self, key, value):
  11. super().__setitem__(key, Observable.create(value, self, key))
  12. Observable.notify(self, [key])
  13. def __delitem__(self, key):
  14. super().__delitem__(key)
  15. Observable.notify(self, [key])
  16. def append(self, value):
  17. key = len(self)
  18. obs = Observable.create(value, self, key)
  19. super().append(obs)
  20. Observable.notify(self, [key])
  21. return obs
  22. def __copy__(self):
  23. def c(e):
  24. if isinstance(e, (ObservableDict, ObservableList)):
  25. return e.copy()
  26. else:
  27. return e
  28. return list(map(c, self))
  29. from . import ObservableDict