sig
  type ('a, 'b) column =
      ?title:string -> 'b list -> ('-> 'b list) -> GTree.view_column
  class type virtual ['a] custom =
    object
      val id : int
      val obj : Gtk.tree_model_custom
      method as_model : Gtk.tree_model
      method coerce : GTree.model
      method connect : GTree.model_signals
      method virtual custom_decode_iter : '-> unit -> unit -> 'a
      method virtual custom_encode_iter : '-> 'a * unit * unit
      method custom_flags : GtkEnums.tree_model_flags list
      method custom_get_column_type : int -> Gobject.g_type
      method virtual custom_get_iter : Gtk.tree_path -> 'a option
      method virtual custom_get_path : '-> Gtk.tree_path
      method custom_get_value : '-> int -> Gobject.g_value -> unit
      method virtual custom_iter_children : 'a option -> 'a option
      method virtual custom_iter_has_child : '-> bool
      method virtual custom_iter_n_children : 'a option -> int
      method virtual custom_iter_next : '-> 'a option
      method virtual custom_iter_nth_child : 'a option -> int -> 'a option
      method virtual custom_iter_parent : '-> 'a option
      method custom_n_columns : int
      method custom_ref_node : '-> unit
      method custom_row_changed : Gtk.tree_path -> '-> unit
      method custom_row_deleted : Gtk.tree_path -> unit
      method custom_row_has_child_toggled : Gtk.tree_path -> '-> unit
      method custom_row_inserted : Gtk.tree_path -> '-> unit
      method custom_rows_reordered :
        Gtk.tree_path -> 'a option -> int array -> unit
      method custom_unref_node : '-> unit
      method virtual custom_value :
        Gobject.g_type -> '-> column:int -> Gobject.basic
      method flags : GtkEnums.tree_model_flags list
      method foreach : (Gtk.tree_path -> Gtk.tree_iter -> bool) -> unit
      method get : row:Gtk.tree_iter -> column:'GTree.column -> 'b
      method get_column_type : int -> Gobject.g_type
      method get_iter : Gtk.tree_path -> Gtk.tree_iter
      method get_iter_first : Gtk.tree_iter option
      method get_path : Gtk.tree_iter -> Gtk.tree_path
      method get_row_reference : Gtk.tree_path -> GTree.row_reference
      method iter_children :
        ?nth:int -> Gtk.tree_iter option -> Gtk.tree_iter
      method iter_has_child : Gtk.tree_iter -> bool
      method iter_n_children : Gtk.tree_iter option -> int
      method iter_next : Gtk.tree_iter -> bool
      method iter_parent : Gtk.tree_iter -> Gtk.tree_iter option
      method misc : GObj.gobject_ops
      method n_columns : int
      method reload : unit
      method row_changed : Gtk.tree_path -> Gtk.tree_iter -> unit
    end
  class type ['a] columns =
    object
      method add_column_empty : GTree.view_column
      method add_column_pixbuf :
        ('a, GTree.cell_properties_pixbuf) Gtk_helper.Custom.column
      method add_column_text :
        ('a, GTree.cell_properties_text) Gtk_helper.Custom.column
      method add_column_toggle :
        ('a, GTree.cell_properties_toggle) Gtk_helper.Custom.column
      method coerce : GObj.widget
      method count_selected : int
      method insert_row : '-> unit
      method is_selected : '-> bool
      method iter_selected : ('-> unit) -> unit
      method on_click : ('-> GTree.view_column -> unit) -> unit
      method on_double_click : ('-> GTree.view_column -> unit) -> unit
      method on_right_click : ('-> GTree.view_column -> unit) -> unit
      method on_selection : (unit -> unit) -> unit
      method pack : (GObj.widget -> unit) -> unit
      method reload : unit
      method scroll : GBin.scrolled_window
      method set_focus : '-> GTree.view_column -> unit
      method set_selection_mode : Gtk.Tags.selection_mode -> unit
      method update_all : unit
      method update_row : '-> unit
      method view : GTree.view
    end
  module List :
    sig
      class type ['a] model =
        object
          method get : int -> 'a
          method index : '-> int
          method reload : unit
          method size : int
        end
      class ['a] view :
        ?packing:(GObj.widget -> unit) ->
        ?width:int ->
        ?height:int ->
        ?headers:bool ->
        ?rules:bool ->
        'Gtk_helper.Custom.List.model ->
        object
          method add_column_empty : GTree.view_column
          method add_column_pixbuf :
            ('a, GTree.cell_properties_pixbuf) column
          method add_column_text : ('a, GTree.cell_properties_text) column
          method add_column_toggle :
            ('a, GTree.cell_properties_toggle) column
          method coerce : GObj.widget
          method count_selected : int
          method insert_row : '-> unit
          method is_selected : '-> bool
          method iter_selected : ('-> unit) -> unit
          method on_click : ('-> GTree.view_column -> unit) -> unit
          method on_double_click : ('-> GTree.view_column -> unit) -> unit
          method on_right_click : ('-> GTree.view_column -> unit) -> unit
          method on_selection : (unit -> unit) -> unit
          method pack : (GObj.widget -> unit) -> unit
          method reload : unit
          method scroll : GBin.scrolled_window
          method set_focus : '-> GTree.view_column -> unit
          method set_selection_mode : Gtk.Tags.selection_mode -> unit
          method update_all : unit
          method update_row : '-> unit
          method view : GTree.view
        end
    end
  module Tree :
    sig
      class type ['a] model =
        object
          method child_at : 'a option -> int -> 'a
          method children : 'a option -> int
          method has_child : '-> bool
          method index : '-> int
          method parent : '-> 'a option
          method reload : unit
        end
      class ['a] view :
        ?packing:(GObj.widget -> unit) ->
        ?width:int ->
        ?height:int ->
        ?headers:bool ->
        ?rules:bool ->
        'Gtk_helper.Custom.Tree.model ->
        object
          method add_column_empty : GTree.view_column
          method add_column_pixbuf :
            ('a, GTree.cell_properties_pixbuf) column
          method add_column_text : ('a, GTree.cell_properties_text) column
          method add_column_toggle :
            ('a, GTree.cell_properties_toggle) column
          method coerce : GObj.widget
          method count_selected : int
          method insert_row : '-> unit
          method is_selected : '-> bool
          method iter_selected : ('-> unit) -> unit
          method on_click : ('-> GTree.view_column -> unit) -> unit
          method on_double_click : ('-> GTree.view_column -> unit) -> unit
          method on_right_click : ('-> GTree.view_column -> unit) -> unit
          method on_selection : (unit -> unit) -> unit
          method pack : (GObj.widget -> unit) -> unit
          method reload : unit
          method scroll : GBin.scrolled_window
          method set_focus : '-> GTree.view_column -> unit
          method set_selection_mode : Gtk.Tags.selection_mode -> unit
          method update_all : unit
          method update_row : '-> unit
          method view : GTree.view
        end
    end
end