(* $Id$ *) open Gaux open Gtk open Tags open GtkBase module TreeItem = struct let cast w : tree_item obj = Object.try_cast w "GtkTreeItem" external create : unit -> tree_item obj = "ml_gtk_tree_item_new" external create_with_label : string -> tree_item obj = "ml_gtk_tree_item_new_with_label" let create ?label () = match label with None -> create () | Some label -> create_with_label label external set_subtree : [>`treeitem] obj -> [>`widget] obj -> unit = "ml_gtk_tree_item_set_subtree" external remove_subtree : [>`treeitem] obj -> unit = "ml_gtk_tree_item_remove_subtree" external expand : [>`treeitem] obj -> unit = "ml_gtk_tree_item_expand" external collapse : [>`treeitem] obj -> unit = "ml_gtk_tree_item_collapse" external subtree : [>`treeitem] obj -> tree obj = "ml_GTK_TREE_ITEM_SUBTREE" module Signals = struct open GtkSignal let expand : ([>`treeitem],_) t = { name = "expand"; marshaller = marshal_unit } let collapse : ([>`treeitem],_) t = { name = "collapse"; marshaller = marshal_unit } end end module Tree = struct let cast w : tree obj = Object.try_cast w "GtkTree" external coerce : [>`tree] obj -> tree obj = "%identity" external create : unit -> tree obj = "ml_gtk_tree_new" external insert : [>`tree] obj -> [>`treeitem] obj -> pos:int -> unit = "ml_gtk_tree_insert" external remove_items : [>`tree] obj -> [>`treeitem] obj list -> unit = "ml_gtk_tree_remove_items" external clear_items : [>`tree] obj -> start:int -> stop:int -> unit = "ml_gtk_tree_clear_items" external select_item : [>`tree] obj -> pos:int -> unit = "ml_gtk_tree_select_item" external unselect_item : [>`tree] obj -> pos:int -> unit = "ml_gtk_tree_unselect_item" external child_position : [>`tree] obj -> [>`treeitem] obj -> int = "ml_gtk_tree_child_position" external set_selection_mode : [>`tree] obj -> selection_mode -> unit = "ml_gtk_tree_set_selection_mode" external set_view_mode : [>`tree] obj -> [`LINE|`ITEM] -> unit = "ml_gtk_tree_set_view_mode" external set_view_lines : [>`tree] obj -> bool -> unit = "ml_gtk_tree_set_view_lines" external selection : [>`tree] obj -> tree_item obj list = "ml_gtk_tree_selection" let set ?selection_mode ?view_mode ?view_lines w = let may_set f = may ~f:(f w) in may_set set_selection_mode selection_mode; may_set set_view_mode view_mode; may_set set_view_lines view_lines module Signals = struct open GtkSignal let selection_changed : ([>`tree],_) t = { name = "selection_changed"; marshaller = marshal_unit } let select_child : ([>`tree],_) t = { name = "select_child"; marshaller = Widget.Signals.marshal } let unselect_child : ([>`tree],_) t = { name = "unselect_child"; marshaller = Widget.Signals.marshal } end end (* module CTree = struct type t type node = [`ctree] obj * t let cast w : ctree obj = Object.try_cast w "GtkCTree" external create : cols:int -> treecol:int -> ctree obj = "ml_gtk_ctree_new" external insert_node : [>`ctree] obj -> ?parent:node -> ?sibling:node -> titles:optstring array -> spacing:int -> ?pclosed:Gdk.pixmap -> ?mclosed:Gdk.bitmap obj -> ?popened:Gdk.pixmap -> ?mopened:Gdk.bitmap obj -> is_leaf:bool -> expanded:bool -> node = "ml_gtk_ctree_insert_node_bc" "ml_gtk_ctree_insert_node" let insert_node' w ?parent ?sibling ?(spacing = 0) ?(is_leaf = true) ?(expanded = false) ?pclosed ?mclosed ?popened ?mopened titles = let len = GtkList.CList.get_columns w in if List.length titles > len then invalid_arg "CTree.insert_node"; let arr = Array.create ~len None in List.fold_left titles ~acc:0 ~f:(fun ~acc text -> arr.(acc) <- Some text; acc+1); insert_node w ?parent ?sibling ~titles:(Array.map ~f:optstring arr) ~spacing ~is_leaf ~expanded ?pclosed ?mclosed ?popened ?mopened external node_set_row_data : [>`ctree] obj -> node:node -> Obj.t -> unit = "ml_gtk_ctree_node_set_row_data" external node_get_row_data : [>`ctree] obj -> node:node -> Obj.t = "ml_gtk_ctree_node_get_row_data" external set_indent : [>`ctree] obj -> int -> unit = "ml_gtk_ctree_set_indent" module Signals = struct open GtkSignal let marshal_select f argv = let node : node = match GtkArgv.get_pointer argv ~pos:0 with Some p -> Obj.magic p | None -> invalid_arg "GtkTree.CTree.Signals.marshal_select" in f ~node ~column:(GtkArgv.get_int argv ~pos:1) let tree_select_row : ([>`ctree],_) t = { name = "tree_select_row"; marshaller = marshal_select } let tree_unselect_row : ([>`ctree],_) t = { name = "tree_unselect_row"; marshaller = marshal_select } end end *)