summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Ward <ian@excess.org>2014-10-17 11:19:09 -0400
committerIan Ward <ian@excess.org>2014-10-17 11:19:09 -0400
commitd4c553dee24a090b63245a07fef4f1bf6f052a72 (patch)
tree5d2a6c6675aec52723b95ff537e3e60f96114ab8
parentd060224342e466dddfcecaed1fb18df2b2670e5c (diff)
parent2985ed71b01a8fe1bf0a64715930a1bf597d3d0a (diff)
downloadurwid-d4c553dee24a090b63245a07fef4f1bf6f052a72.tar.gz
Merge pull request #85 from hkoof/negative-indices
Fix negative indices in MonitoredFocusList
-rwxr-xr-xurwid/monitored_list.py67
1 files changed, 22 insertions, 45 deletions
diff --git a/urwid/monitored_list.py b/urwid/monitored_list.py
index a1a6326..f9170ca 100755
--- a/urwid/monitored_list.py
+++ b/urwid/monitored_list.py
@@ -265,8 +265,10 @@ class MonitoredFocusList(MonitoredList):
def __delitem__(self, y):
"""
- >>> ml = MonitoredFocusList([0,1,2,3], focus=2)
+ >>> ml = MonitoredFocusList([0,1,2,3,4], focus=2)
>>> del ml[3]; ml
+ MonitoredFocusList([0, 1, 2, 4], focus=2)
+ >>> del ml[-1]; ml
MonitoredFocusList([0, 1, 2], focus=2)
>>> del ml[0]; ml
MonitoredFocusList([1, 2], focus=1)
@@ -279,11 +281,19 @@ class MonitoredFocusList(MonitoredList):
MonitoredFocusList([5, 6, 5, 6, 5], focus=2)
>>> del ml[::2]; ml
MonitoredFocusList([6, 6], focus=1)
+ >>> ml = MonitoredFocusList([0,1,2,3,4,6,7], focus=2)
+ >>> del ml[-2:]; ml
+ MonitoredFocusList([0, 1, 2, 3, 4], focus=2)
+ >>> del ml[-4:-2]; ml
+ MonitoredFocusList([0, 3, 4], focus=1)
+ >>> del ml[:]; ml
+ MonitoredFocusList([], focus=None)
"""
if isinstance(y, slice):
focus = self._adjust_focus_on_contents_modified(y)
else:
- focus = self._adjust_focus_on_contents_modified(slice(y, y+1))
+ focus = self._adjust_focus_on_contents_modified(slice(y,
+ y+1 or None))
rval = super(MonitoredFocusList, self).__delitem__(y)
self._set_focus(focus)
return rval
@@ -308,6 +318,14 @@ class MonitoredFocusList(MonitoredList):
range(1, 4, 2) <- [12, 13]
>>> ml[::2] = [10, 11]
range(0, 4, 2) <- [10, 11]
+ >>> ml[-3:-1] = [21, 22, 23]
+ range(1, 3, 1) <- [21, 22, 23]
+ >>> ml
+ MonitoredFocusList([10, 21, 22, 23, 13], focus=2)
+ >>> ml[:] = []
+ range(0, 5, 1) <- []
+ >>> ml
+ MonitoredFocusList([], focus=None)
"""
if isinstance(i, slice):
focus = self._adjust_focus_on_contents_modified(i, y)
@@ -319,51 +337,10 @@ class MonitoredFocusList(MonitoredList):
if not PYTHON3:
def __delslice__(self, i, j):
- """
- >>> def modified(indices, new_items):
- ... print "range%r <- %r" % (indices, list(new_items))
- >>> ml = MonitoredFocusList([0,1,2,3,4], focus=2)
- >>> ml.set_validate_contents_modified(modified)
- >>> del ml[3:5]
- range(3, 5, 1) <- []
- >>> ml
- MonitoredFocusList([0, 1, 2], focus=2)
- >>> del ml[:1]
- range(0, 1, 1) <- []
- >>> ml
- MonitoredFocusList([1, 2], focus=1)
- >>> del ml[1:]; ml
- range(1, 2, 1) <- []
- MonitoredFocusList([1], focus=0)
- >>> del ml[:]; ml
- range(0, 1, 1) <- []
- MonitoredFocusList([], focus=None)
- """
- focus = self._adjust_focus_on_contents_modified(slice(i, j))
- rval = super(MonitoredFocusList, self).__delslice__(i, j)
- self._set_focus(focus)
- return rval
+ return self.__delitem__(slice(i,j))
def __setslice__(self, i, j, y):
- """
- >>> ml = MonitoredFocusList([0,1,2,3,4], focus=2)
- >>> ml[3:5] = [-1]; ml
- MonitoredFocusList([0, 1, 2, -1], focus=2)
- >>> ml[0:1] = []; ml
- MonitoredFocusList([1, 2, -1], focus=1)
- >>> ml[1:] = [3, 4]; ml
- MonitoredFocusList([1, 3, 4], focus=1)
- >>> ml[1:] = [2]; ml
- MonitoredFocusList([1, 2], focus=1)
- >>> ml[0:1] = [9,9,9]; ml
- MonitoredFocusList([9, 9, 9, 2], focus=3)
- >>> ml[:] = []; ml
- MonitoredFocusList([], focus=None)
- """
- focus = self._adjust_focus_on_contents_modified(slice(i, j), y)
- rval = super(MonitoredFocusList, self).__setslice__(i, j, y)
- self._set_focus(focus)
- return rval
+ return self.__setitem__(slice(i, j), y)
def __imul__(self, n):
"""