import pygtk
pygtk.require('2.0')
import gtk
+import itertools
class ThreadListModel(gtk.GenericTreeModel):
"lastModified", "average"]
column_width = [0, 30, 330, 50, 50, 200, 50]
- def __init__(self, list=None, sort_column_name="num", sort_reverse=False,
- filter_func=None):
+ def __init__(self):
gtk.GenericTreeModel.__init__(self)
- if list:
- self.original_list = list[:]
- else:
- self.original_list = []
-
- self.sort_column_name = sort_column_name
- self.sort_reverse = sort_reverse
- self.filter_func = filter_func
+ self.original_list = []
+ self.list = []
+ self.order_dict = {}
+ self.sort_column_name = "num"
+ self.sort_reverse = False
+ self.filter_func = None
- self.do_filter()
- self.do_sort(self.sort_column_name, self.sort_reverse)
+ self.set_list([])
def modify_row(self, dict):
id = dict["id"]
target_dict[name] = dict[name]
self.row_changed(index, self.get_iter(index))
- def refilter(self):
+ def refilter(self, filter_func):
before_size = len(self.list)
- self.do_filter()
+ self.do_filter(filter_func)
after_size = len(self.list)
self.do_sort(self.sort_column_name, self.sort_reverse)
self.list_modified(before_size, after_size)
def set_list(self, newlist):
self.original_list = newlist[:]
- self.refilter()
-
- def set_filter_func(self, func):
- self.filter_func = func
+ self.refilter(self.filter_func)
def build_order_dict(self):
# key: thread id, value: index in self.list
for i in range(before_size, after_size):
self.row_inserted(i, self.get_iter(i))
- def do_filter(self):
- if not self.filter_func:
+ def do_filter(self, filter_func):
+ # Set filter_func to self.filter_func after successful filtering.
+ # successful means no exception.
+
+ if not filter_func:
self.list = self.original_list[:]
+ self.filter_func = filter_func
return
- self.list = []
- for item in self.original_list:
- if self.filter_func(self, item):
- self.list.append(item)
+ predicate = lambda item: filter_func(self, item)
+ iterable = itertools.ifilter(predicate, self.original_list)
+ self.list = [item for item in iterable]
+ self.filter_func = filter_func
def compare(self, v1, v2, reverse):
if not reverse: