Further to the previous post, here is the debug tree code and test case.
Stephen.
#!/usr/bin/python
import gtk
class DebugTreeModel(gtk.GenericTreeModel):
def __init__(self, model):
gtk.GenericTreeModel.__init__(self)
#self.method_prefix = ("","on_")[issubclass(type(model), gtk.GenericTreeModel)]
self.method_prefix = ""
self.functions_enabled = {
"get_column_type":0
}
self.functions_enabled_default = True
self.model = model
#for sig in "row-changed row-deleted row-has-child-toggled row-inserted".split():
for sig in "row-changed row-deleted row-has-child-toggled row-inserted rows-reordered".split():
self.model.connect(sig, lambda *args : self.forward(sig, *args))
print dir(self)
def forward(self, sig, *args):
print sig, args
func = getattr(self, sig.replace("-","_"))
return func(*args[1:])
def call(self, func, *args):
get = getattr(self.model, self.method_prefix+func)
if self.functions_enabled.get(func, self.functions_enabled_default):
print "%45s" % ("%s %s" % (func,args)),
ret = get(*args)
print ret
return ret
return get(*args)
def on_get_flags(self):
return 0 #self.call("get_flags")
def on_get_n_columns(self):
return self.call("get_n_columns")
def on_get_column_type(self, index):
return self.call("get_column_type", index)
def on_get_path(self, node):
return self.call("get_path", node)
def on_get_iter(self, path):
return self.call("get_iter", path)
def on_get_value(self, node, column):
return self.call("get_value", node, column)
def on_iter_next(self, node):
return self.call("iter_next", node)
def on_iter_children(self, node):
return self.call("iter_children", node)
def on_iter_has_child(self, node):
return self.call("iter_has_child", node)
def on_iter_n_children(self, node):
return self.call("iter_n_children", node)
def on_iter_nth_child(self, node, n):
return self.call("iter_nth_child", node, n)
def on_iter_parent(self, node):
return self.call("iter_parent", node)
def main():
tree = gtk.TreeStore(type(""))
model = tree
for i in range(5):
model.append( None, ("hello %i"%i,) )
model = DebugTreeModel(model)
view = gtk.TreeView(model)
cell = gtk.CellRendererText()
view.insert_column_with_attributes(-1,"text",cell,text=0)
window = gtk.Window()
window.add(view)
window.connect("delete-event", gtk.main_quit)
window.set_size_request(400,400)
window.show_all()
def add_row(m):
for i in range(5):
m.append( None, ("hello %i"%i,) )
yield 1
gtk.timeout_add(1000, add_row(tree).next )
gtk.main()
if __name__=="__main__":
main()
_______________________________________________
pygtk mailing list [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/