OK, as promised here is a very basic example of a three column treeview: import gintro/[glib, gobject, gtk] import gintro/gio except ListStore const GroceryList = [(true, 1, "Paper Towels"), (true, 2, "Bread"), (false, 1, "Butter"), (true, 1, "Milk"), (false, 3, "Chips"), (true, 4, "Soda")] ## Add three columns to the GtkTreeView. All three of the columns will be ## displayed as text, although one is a gboolean value and another is an integer. proc setupTreeView(treeview: TreeView) = var renderer: CellRendererText var column: TreeViewColumn ## Create a new GtkCellRendererText, add it to the tree view column and ## append the column to the tree view. for i, t in ["Buy", "Count", "Product"]: renderer = newCellRendererText() column = newTreeViewColumn() column.title = t column.packStart(renderer, true) column.addAttribute(renderer, "text", i) discard treeview.appendColumn(column) proc appActivate(app: Application) = let window = newApplicationWindow(app) window.title = "Grocery List" window.borderWidth = 10 window.position = WindowPosition.center window.setSizeRequest(250, 175) let treeview = newTreeView() setupTreeView(treeview) ## Create a new tree model with three columns, as string, gint and guint. ## store = gtk_list_store_new(, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_STRING) var h = [typeFromName("gboolean"), typeFromName("gint"), typeFromName("gchararray")] let store = newListStore(3, cast[pointer]( unsafeaddr h)) # cast due to bug in gtk.nim ## Add all of the products to the GtkListStore. for el in GroceryList: var val: Value var iter: TreeIter var gtype: GType let buy = el[0] let quantity = el[1] let product = el[2] store.append(iter) gtype = typeFromName("gboolean") discard gValueInit(val, gtype) setBoolean(val, buy) store.setValue(iter, 0, val) gtype = typeFromName("gint") val.unset discard gValueInit(val, gtype) setint(val, quantity) store.setValue(iter, 1, val) gtype = typeFromName("gchararray") val.unset discard gValueInit(val, gtype) setString(val, product) store.setValue(iter, 2, val) let scrolled_win = newScrolledWindow() scrolled_win.setPolicy(PolicyType.automatic, PolicyType.automatic) scrolled_win.add(treeview) window.add(scrolled_win) treeview.setModel(store) showAll(window) proc main = let app = newApplication("org.gtk.example") connect(app, "activate", appActivate) discard run(app) main() Run
I took an old C example from the old GTK2 book of Andrew Krause, applied c2nim, mixed it with the other listview example, and fixed the rest. The ugly cast is still present, I have not touched gintro package yet, sorry. Of course this example does only display the three columns, there is no code for modifying it yet. But adding that should be not that hard, as seen from the first example. I noticed that you asked AT THE SAME Time at stackoverflow. Some consider that a bad habit, maybe you can at least link that one to this forum thread.