def do_search(self, query, event_flag):
def get_icon(n):
if n not in self.parser.members: # no check for undeclared class
icon = gtk.STOCK_DELETE
elif '(' in n:
icon = gtk.STOCK_EXECUTE
elif ':' in n:
icon = gtk.STOCK_SELECT_FONT
else:
icon = gtk.STOCK_FILE
return icon
def append_row(parent, names, depth, call_info):
name = names[0]
call_info_str = call_info.select_from_call_types(u'?????') \
.replace(u'??', u'?') \
.replace(u'??', u'?')
it = self.store.append(parent, (
name, # class/method/field name
get_icon(name), # icon
'b' if name in toplevel else '',
# bold (in root) or not
call_info_str
))
# Append children
d = depth + 1
if d >= self._max_tree_depth:
self.store.append(it, (' ...maximum depth (%d) reached' %
self._max_tree_depth, gtk.STOCK_INFO, 'i',
call_info_str))
return
for caller, info in self.parser.callers.get(name, {}).items():
if event_flag.is_set(): # stopped earlier
return
if caller not in names:
names.appendleft(caller)
append_row(it, names, d, info)
names.popleft()
else:
self.store.append(it, (' ...recursive ' + caller,
gtk.STOCK_INFO, 'i', call_info_str))
with self.search_lock:
gobject.idle_add(self.treeview.set_model, None)
toplevel = set()
self.store.clear()
for k in self.parser.callers:
if fnmatch.fnmatch(k, query):
toplevel.add(k)
for i in toplevel:
append_row(None, collections.deque((i,)), 0, CallInfo())
# Finalization
if not event_flag.is_set():
event_flag.set()
gobject.idle_add(self.treeview.set_model, self.store)
gobject.idle_add(self.on_search_stop)
评论列表
文章目录