(************************************************************ two_column_tree.ml Created : Thu Jun 9 00:21:23 2005 Last modified: Sat Aug 26 10:01:48 2006 Compile: ocamlc -dtypes -I +lablgtk2 -w -s lablgtk.cma gtkInit.cmo two_column_tree.ml -o two_column_tree # FTP Directory: sources/ocaml # ************************************************************) (** @author Takashi Masuyama *) open GtkWindow open GtkTree open Gobject open Gobject.Data type t = Node of string * t list | Leaf of string let show_tree tree = let treestore = TreeStore.create [| Type.from_name "gchararray"; Type.from_name "gchararray" |] in let treeview = TreeView.make_params ~cont:(fun pl () -> (TreeView.create pl)) ~model:(treestore :> Gtk.tree_model) [ param TreeView.P.headers_visible true ] () in let col0 = TreeViewColumn.create [ param TreeViewColumn.P.title "name"; param TreeViewColumn.P.visible true] in let col1 = TreeViewColumn.create [ param TreeViewColumn.P.title "property"; param TreeViewColumn.P.visible true] in let ren = CellRendererText.create [] in let rec f treestore ?parent = function Node(s, lst) -> let iter2 = TreeStore.append ?parent treestore () in TreeStore.set_value treestore ~row:iter2 ~column:0 (to_value string s); TreeStore.set_value treestore ~row:iter2 ~column:1 (to_value string "Node"); List.iter (f treestore ~parent:iter2) lst | Leaf(s) -> let iter2 = TreeStore.append ?parent treestore () in TreeStore.set_value treestore ~row:iter2 ~column:0 (to_value string s); TreeStore.set_value treestore ~row:iter2 ~column:1 (to_value string "Leaf"); () in begin TreeViewColumn.pack_start col0 ren false; TreeViewColumn.add_attribute col0 ren "text" 0; TreeViewColumn.pack_start col1 ren true; (* expand *) TreeViewColumn.add_attribute col1 ren "text" 1; TreeView.append_column treeview col0; TreeView.append_column treeview col1; f treestore tree; treeview end let _ = let window = Window.create ~kind:`TOPLEVEL [] in let treeview = show_tree (Node("yosui", [Node("mamewo", [Leaf("takashi")]); Leaf("tak")])) in GtkBase.Container.add window treeview; GtkBase.Widget.show_all window; GtkMain.Main.main () ;; (* * Local Variables: * namazu-default-dir "/home/tak/.indexes/ocaml" * End: *)