def super_model_changed_range (self):
range_model = self.super_model
- old_start, old_end = self.__old_super_model_range
- super_start, super_end = range_model.line_index_range
+ old_start, old_stop = self.__old_super_model_range
+ old_end = old_stop - 1
+ super_start, super_stop = range_model.line_index_range
+ super_end = super_stop - 1
super_start_offset = super_start - old_start
if super_start_offset < 0:
for i in range (len (self.super_index)):
self.super_index[i] -= super_start_offset
- self.__old_super_model_range = (super_start, super_end,)
+ self.__old_super_model_range = (super_start, super_stop,)
def __remove_range (self, start, end):
class SubRange (object):
- def __init__ (self, l, start, end):
+ __slots__ = ("l", "start", "stop",)
- if start > end:
- raise ValueError ("need start <= end")
+ def __init__ (self, l, start, stop):
+
+ if start > stop:
+ raise ValueError ("need start <= stop (got %r, %r)" % (start, stop,))
self.l = l
self.start = start
- self.end = end
+ self.stop = stop
def __getitem__ (self, i):
def __len__ (self):
- return self.end - self.start + 1
+ return self.stop - self.start
def __iter__ (self):
# FIXME: Use itertools, should be faster!
l = self.l
i = self.start
- while i <= self.end:
+ while i < self.stop:
yield l[i]
i += 1
self.line_index_range = None
- def set_range (self, start_index, last_index):
+ def set_range (self, start_index, stop_index):
- self.logger.debug ("setting range to first = %i, last = %i",
- start_index, last_index)
+ self.logger.debug ("setting range to start = %i, stop = %i",
+ start_index, stop_index)
- self.line_index_range = (start_index, last_index,)
+ self.line_index_range = (start_index, stop_index,)
self.line_offsets = SubRange (self.super_model.line_offsets,
- start_index, last_index)
+ start_index, stop_index)
self.line_levels = SubRange (self.super_model.line_levels,
- start_index, last_index)
+ start_index, stop_index)
def reset (self):
self.logger.debug ("reset")
- first_index = 0
- last_index = len (self.super_model) - 1
+ start_index = 0
+ stop_index = len (self.super_model)
- self.set_range (first_index, last_index,)
+ self.set_range (start_index, stop_index,)
def line_index_to_super (self, line_index):
def line_index_from_super (self, li):
- start, end = self.line_index_range
+ start, stop = self.line_index_range
- if li < start or li > end:
+ if li < start or li >= stop:
raise IndexError ("not in range")
return li - start
def handle_log_view_selection_changed (self, selection):
+ line_model = self.line_view.props.model
+ if line_model is None or len (line_model) == 0:
+ return
+
model, tree_iter = selection.get_selected ()
if tree_iter is None:
path = model.get_path (tree_iter)
line_index = model.line_index_to_super (path[0])
- line_model = self.line_view.props.model
- if line_model is None:
- return
if len (line_model) == 0:
line_model.insert_line (0, line_index)
else:
last_index)
self.push_view_state ()
- self.log_range.set_range (first_index, last_index)
+ start_index = first_index
+ stop_index = last_index + 1
+ self.log_range.set_range (start_index, stop_index)
if self.log_filter:
self.log_filter.super_model_changed_range ()
self.update_model ()
from GstDebugViewer import Common, Data, GUI
+class TestSubRange (TestCase):
+
+ def test_len (self):
+
+ l = range (20)
+
+ sr = GUI.SubRange (l, 0, 20)
+ self.assertEquals (len (sr), 20)
+
+ sr = GUI.SubRange (l, 10, 20)
+ self.assertEquals (len (sr), 10)
+
+ sr = GUI.SubRange (l, 0, 10)
+ self.assertEquals (len (sr), 10)
+
+ sr = GUI.SubRange (l, 5, 15)
+ self.assertEquals (len (sr), 10)
+
+ def test_iter (self):
+
+ l = range (20)
+
+ sr = GUI.SubRange (l, 0, 20)
+ self.assertEquals (list (sr), l)
+
+ sr = GUI.SubRange (l, 10, 20)
+ self.assertEquals (list (sr), range (10, 20))
+
+ sr = GUI.SubRange (l, 0, 10)
+ self.assertEquals (list (sr), range (0, 10))
+
+ sr = GUI.SubRange (l, 5, 15)
+ self.assertEquals (list (sr), range (5, 15))
+
class Model (GUI.LogModelBase):
def __init__ (self):
self.assertEquals (row_list (ranged_model), range (20))
self.assertEquals (row_list (filtered_model), range (20))
- ranged_model.set_range (5, 15)
+ ranged_model.set_range (5, 16)
filtered_model.super_model_changed_range ()
self.assertEquals (row_list (ranged_model), range (5, 16))
filtered_model.add_filter (IdentityFilter (),
Common.Data.DefaultDispatcher ())
- ranged_model.set_range (5, 15)
+ ranged_model.set_range (5, 16)
filtered_model.super_model_changed_range ()
self.assertEquals (row_list (ranged_model), range (5, 16))
for i in range (10)],
range (1, 20, 2))
- ranged_model.set_range (1, 19)
- self.__dump_model (ranged_model, "ranged (1, 19)")
+ ranged_model.set_range (1, 20)
+ self.__dump_model (ranged_model, "ranged (1, 20)")
filtered_model.super_model_changed_range ()
self.__dump_model (filtered_model, "filtered range")
for i in range (10)],
range (1, 20, 2))
- ranged_model.set_range (2, 19)
- self.__dump_model (ranged_model, "ranged (2, 19)")
+ ranged_model.set_range (2, 20)
+ self.__dump_model (ranged_model, "ranged (2, 20)")
filtered_model.super_model_changed_range ()
self.__dump_model (filtered_model, "filtered range")
for i in range (20)],
range (20))
- ranged_model.set_range (5, 15)
- self.__dump_model (ranged_model, "ranged model (5, 15)")
+ ranged_model.set_range (5, 16)
+ self.__dump_model (ranged_model, "ranged model (5, 16)")
filtered_model.super_model_changed_range ()
rows_ranged = row_list (ranged_model)
for i in range (5, 16, 2)],
range (6))
- ranged_model.set_range (7, 12)
- self.__dump_model (ranged_model, "ranged model (7, 12)")
+ ranged_model.set_range (7, 13)
+ self.__dump_model (ranged_model, "ranged model (7, 13)")
filtered_model.super_model_changed_range ()
self.assertEquals (row_list (ranged_model), range (7, 13))
random_rows = row_list (filtered_model)
self.__dump_model (filtered_model)
- ranged_model.set_range (10, 19)
- self.__dump_model (ranged_model, "ranged_model (10, 19)")
+ ranged_model.set_range (10, 20)
+ self.__dump_model (ranged_model, "ranged_model (10, 20)")
self.assertEquals (row_list (ranged_model), range (10, 20))
filtered_model.super_model_changed_range ()
self.__dump_model (filtered_model)
self.assertEquals (row_list (filtered_model), [x for x in range (10, 20) if x in random_rows])
- ranged_model.set_range (0, 19)
+ ranged_model.set_range (0, 20)
self.assertEquals (row_list (ranged_model), range (0, 20))
ranged_model = GUI.RangeFilteredLogModel (full_model)
self.__dump_model (filtered_model, "filtered model")
self.assertEquals (row_list (filtered_model), random_rows)
- ranged_model.set_range (0, 9)
- self.__dump_model (ranged_model, "ranged model (0, 9)")
+ ranged_model.set_range (0, 10)
+ self.__dump_model (ranged_model, "ranged model (0, 10)")
filtered_model.super_model_changed_range ()
self.assertEquals (row_list (ranged_model), range (0, 10))
self.__dump_model (filtered_model)