#!/usr/bin/python2.2 import gobject import gtk import sys def quitCB(widget, data): gtk.mainquit() sys.exit(0) def resetCB(widget, data): (cardstore, cardview) = data setCurrent(cardstore, cardview, "SP3") def setCurrent(cardstore, cardview, name): parent = None iter = cardstore.get_iter_first() next = 1 # iterate over the list, looking for the current mouse selection while next: # if this is a parent node, get the first child and iter over them if cardstore.iter_has_child(iter): parent = iter iter = cardstore.iter_children(parent) continue # if it's not a parent node and the mouse matches, select it. elif cardstore.get_value(iter, 0) == name: path = cardstore.get_path(parent) cardview.expand_row(path, gtk.TRUE) selection = cardview.get_selection() selection.unselect_all() selection.select_iter(iter) path = cardstore.get_path(iter) col = cardview.get_column(0) cardview.set_cursor(path, col, gtk.FALSE) cardview.scroll_to_cell(path, col, gtk.TRUE, 0.0, 0.5) break # get the next row. next = cardstore.iter_next(iter) # if there isn't a next row and we had a parent, go to the node # after the parent we've just gotten the children of. if not next and parent: next = cardstore.iter_next(parent) iter = parent # # MAIN Start # win = gtk.Window() cardstore = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_STRING) man=[ ("Hugco", ["XP200", "XP300", "XP400"]), ("SmallCo", ["SP3", "SP4", "SP5"])] for (m, dl) in man: p = cardstore.append(None) cardstore.set_value(p, 0, m) for d in dl: i = cardstore.append(p) cardstore.set_value(i, 0, d) cardview = gtk.TreeView(cardstore) cardview.set_size_request (500, 300) cardview.set_property("headers-visible", gtk.FALSE) col = gtk.TreeViewColumn(None, gtk.CellRendererText(), text=0) cardview.append_column(col) setCurrent(cardstore, cardview, "SP3") sw = gtk.ScrolledWindow() sw.add(cardview) vbox = gtk.VBox() vbox.pack_start(sw, gtk.FALSE, gtk.FALSE) hbox = gtk.HBox() b = gtk.Button("Reset") b.connect("clicked", resetCB, (cardstore, cardview)) hbox.pack_start(b, gtk.FALSE, gtk.FALSE) b = gtk.Button("Quit") b.connect("clicked", quitCB, None) hbox.pack_start(b, gtk.FALSE, gtk.FALSE) vbox.pack_start(hbox, gtk.FALSE, gtk.FALSE) win.add(vbox) win.show_all() gtk.main()