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/

Reply via email to