sig
  module SW :
    sig
      module WM :
        sig
          val create_button :
            ?label:string ->
            stock:GtkStock.id ->
            packing:(GObj.widget -> unit) -> unit -> GButton.button
        end
      type store_view =
        Dbf_selectWidget.store_view = {
        st_view : GTree.view;
        st_string : GTree.view_column;
      }
      class ['a] store :
        extract:('-> string) ->
        object
          val id : int
          val obj : Gtk.list_store
          method append : unit -> Gtk.tree_iter
          method append_data : '-> Gtk.tree_iter
          method as_model : Gtk.tree_model
          method clear : unit -> unit
          method coerce : GTree.model
          method connect : GTree.tree_sortable_signals
          method create_view :
            ?view:GTree.view -> title:string -> unit -> store_view
          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_data : row:Gtk.tree_iter -> 'a
          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 get_sort_column_id : (int * Gtk.Tags.sort_type) option
          method has_default_sort_func : bool
          method insert : int -> Gtk.tree_iter
          method insert_after : Gtk.tree_iter -> Gtk.tree_iter
          method insert_before : Gtk.tree_iter -> Gtk.tree_iter
          method insert_data : int -> '-> Gtk.tree_iter
          method iter_children :
            ?nth:int -> Gtk.tree_iter option -> Gtk.tree_iter
          method iter_has_child : Gtk.tree_iter -> bool
          method iter_is_valid : 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 move_after : iter:Gtk.tree_iter -> pos:Gtk.tree_iter -> bool
          method move_before :
            iter:Gtk.tree_iter -> pos:Gtk.tree_iter -> bool
          method n_columns : int
          method prepend : unit -> Gtk.tree_iter
          method prepend_data : '-> Gtk.tree_iter
          method remove : Gtk.tree_iter -> bool
          method row_changed : Gtk.tree_path -> Gtk.tree_iter -> unit
          method set :
            row:Gtk.tree_iter -> column:'GTree.column -> '-> unit
          method set_data : '-> row:Gtk.tree_iter -> unit
          method set_default_sort_func :
            (GTree.model -> Gtk.tree_iter -> Gtk.tree_iter -> int) -> unit
          method set_sort_column_id : int -> Gtk.Tags.sort_type -> unit
          method set_sort_func :
            int ->
            (GTree.model -> Gtk.tree_iter -> Gtk.tree_iter -> int) -> unit
          method sort_column_changed : unit -> unit
          method swap : Gtk.tree_iter -> Gtk.tree_iter -> bool
          method update_display : Gtk.tree_iter -> unit
        end
      class ['a] callbacks_poll :
        object
          val mutable cbs : 'a list
          method add : '-> unit
          method iter : ('-> unit) -> unit
        end
      type added_cb_sig = GTree.row_reference -> unit
      type removed_cb_sig = GTree.row_reference -> unit
      type moved_up_cb_sig =
          GTree.row_reference -> GTree.row_reference -> unit
      type moved_down_cb_sig =
          GTree.row_reference -> GTree.row_reference -> unit
      class select_and_order_connect :
        object
          val added_cbs : added_cb_sig callbacks_poll
          val moved_down_cbs : moved_down_cb_sig callbacks_poll
          val moved_up_cbs : moved_up_cb_sig callbacks_poll
          val removed_cbs : removed_cb_sig callbacks_poll
          method added : added_cb_sig -> unit
          method moved_down : moved_down_cb_sig -> unit
          method moved_up : moved_up_cb_sig -> unit
          method raise_added : GTree.row_reference -> unit
          method raise_moved_down :
            GTree.row_reference -> GTree.row_reference -> unit
          method raise_moved_up :
            GTree.row_reference -> GTree.row_reference -> unit
          method raise_removed : GTree.row_reference -> unit
          method removed : removed_cb_sig -> unit
        end
      class ['a] select_and_order :
        ?packing:(GObj.widget -> unit) ->
        label:string ->
        title1:string ->
        title2:string ->
        extract:('-> string) ->
        unit ->
        object
          val connect : select_and_order_connect
          val obj : Gtk.widget Gtk.obj
          method private _cb__down_button_clicked : unit -> unit
          method private _cb__left_button_clicked : unit -> unit
          method private _cb__right_button_clicked : unit -> unit
          method private _cb__selection_changed :
            store_view -> GButton.button list -> unit -> unit
          method private _cb__up_button_clicked : unit -> unit
          method as_widget : Gtk.widget Gtk.obj
          method coerce : GObj.widget
          method connect : select_and_order_connect
          method destroy : unit -> unit
          method drag : GObj.drag_ops
          method get_oid : int
          method misc : GObj.misc_ops
          method store1 : 'a store
          method store2 : 'a store
          method view1 : store_view
          method view2 : store_view
        end
    end
  module DW :
    sig
      module WM :
        sig
          val create_button :
            ?label:string ->
            stock:GtkStock.id ->
            packing:(GObj.widget -> unit) -> unit -> GButton.button
        end
      type data =
        Dbf_dbWidget.data =
          D_Table of Dbf_sql.SQL_db.table
        | D_Column of Dbf_sql.SQL_db.column
        | D_String of string
      type view =
        Dbf_dbWidget.view = {
        sv_view : GTree.view;
        sv_string_c : GTree.view_column;
      }
      class db_list_store :
        unit ->
        object
          val id : int
          val obj : Gtk.tree_store
          method private _display_string : data -> string
          method append : ?parent:Gtk.tree_iter -> unit -> Gtk.tree_iter
          method append_data :
            data ->
            ?parent:Gtk.tree_iter -> ?color:string -> unit -> Gtk.tree_iter
          method as_model : Gtk.tree_model
          method clear : unit -> unit
          method coerce : GTree.model
          method connect : GTree.tree_sortable_signals
          method create_view : ?view:GTree.view -> unit -> view
          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 -> 'a
          method get_column_type : int -> Gobject.g_type
          method get_data : row:Gtk.tree_iter -> data
          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 get_sort_column_id : (int * Gtk.Tags.sort_type) option
          method has_default_sort_func : bool
          method insert : ?parent:Gtk.tree_iter -> int -> Gtk.tree_iter
          method insert_after :
            ?parent:Gtk.tree_iter -> Gtk.tree_iter -> Gtk.tree_iter
          method insert_before :
            ?parent:Gtk.tree_iter -> Gtk.tree_iter -> Gtk.tree_iter
          method insert_data :
            int ->
            data ->
            ?parent:Gtk.tree_iter -> ?color:string -> unit -> Gtk.tree_iter
          method is_ancestor :
            iter:Gtk.tree_iter -> descendant:Gtk.tree_iter -> bool
          method iter_children :
            ?nth:int -> Gtk.tree_iter option -> Gtk.tree_iter
          method iter_depth : Gtk.tree_iter -> int
          method iter_has_child : Gtk.tree_iter -> bool
          method iter_is_valid : 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 move_after : iter:Gtk.tree_iter -> pos:Gtk.tree_iter -> bool
          method move_before :
            iter:Gtk.tree_iter -> pos:Gtk.tree_iter -> bool
          method n_columns : int
          method prepend : ?parent:Gtk.tree_iter -> unit -> Gtk.tree_iter
          method prepend_data :
            data ->
            ?parent:Gtk.tree_iter -> ?color:string -> unit -> Gtk.tree_iter
          method remove : Gtk.tree_iter -> bool
          method row_changed : Gtk.tree_path -> Gtk.tree_iter -> unit
          method set :
            row:Gtk.tree_iter -> column:'GTree.column -> '-> unit
          method set_data :
            data -> row:Gtk.tree_iter -> ?color:string -> unit -> unit
          method set_default_sort_func :
            (GTree.model -> Gtk.tree_iter -> Gtk.tree_iter -> int) -> unit
          method set_sort_column_id : int -> Gtk.Tags.sort_type -> unit
          method set_sort_func :
            int ->
            (GTree.model -> Gtk.tree_iter -> Gtk.tree_iter -> int) -> unit
          method sort_column_changed : unit -> unit
          method swap : Gtk.tree_iter -> Gtk.tree_iter -> bool
        end
      class db_widget :
        Gtk.Tags.selection_mode ->
        object
          method selected_columns : Dbf_sql.SQL_db.column list
          method set_tables : Dbf_sql.SQL_db.table list -> unit
          method view : view
        end
      val db_chooser :
        Dbf_sql.SQL_db.table list ->
        Gtk.Tags.selection_mode -> Dbf_sql.SQL_db.column list
    end
  type table_view =
    Dbf_virtualTableGUI.table_view = {
    tv_view : GTree.view;
    tv_model : GTree.list_store;
    tv_nc : string GTree.column;
    tv_caml : Dbf_sql.SQL_db.table GTree.column;
  }
  class vtable_constraints_gui :
    (Dbf_sql.SQL_db.column * Dbf_sql.SQL_db.column -> 'a) ->
    Dbf_sql.SQL_db.table list * Dbf_sql.SQL_db.table list ->
    object
      val glade : Dbf_gladeWidgets.constraint_window
      val view1 : DW.db_widget
      val view2 : DW.db_widget
      method private _cb__cancel_button_clicked : unit -> unit
      method private _cb__ok_button_clicked : unit -> unit
      method private _grab_input :
        Dbf_sql.SQL_db.column * Dbf_sql.SQL_db.column
      method start : unit -> unit
    end
  type join_constraint =
    Dbf_virtualTableGUI.join_constraint = {
    jc_column1 : Dbf_sql.SQL_db.column;
    jc_column2 : Dbf_sql.SQL_db.column;
  }
  val jc_to_tuple :
    join_constraint -> Dbf_sql.SQL_db.column * Dbf_sql.SQL_db.column
  type view =
    Dbf_virtualTableGUI.view = {
    sv_view : GTree.view;
    sv_c1 : GTree.view_column;
    sv_c2 : GTree.view_column;
  }
  class constraints_list_store :
    unit ->
    object
      val id : int
      val obj : Gtk.list_store
      method append : unit -> Gtk.tree_iter
      method append_data : join_constraint -> unit
      method as_model : Gtk.tree_model
      method clear : unit -> unit
      method clear_table_from_constraints : string -> unit
      method coerce : GTree.model
      method connect : GTree.tree_sortable_signals
      method create_view : ?view:GTree.view -> unit -> view
      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 -> 'a
      method get_column_type : int -> Gobject.g_type
      method get_data : row:Gtk.tree_iter -> join_constraint
      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 get_sort_column_id : (int * Gtk.Tags.sort_type) option
      method has_default_sort_func : bool
      method insert : int -> Gtk.tree_iter
      method insert_after : Gtk.tree_iter -> Gtk.tree_iter
      method insert_before : Gtk.tree_iter -> Gtk.tree_iter
      method insert_data : int -> join_constraint -> unit
      method iter_children :
        ?nth:int -> Gtk.tree_iter option -> Gtk.tree_iter
      method iter_has_child : Gtk.tree_iter -> bool
      method iter_is_valid : 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 move_after : iter:Gtk.tree_iter -> pos:Gtk.tree_iter -> bool
      method move_before : iter:Gtk.tree_iter -> pos:Gtk.tree_iter -> bool
      method move_constraints_to : string -> constraints_list_store -> unit
      method n_columns : int
      method prepend : unit -> Gtk.tree_iter
      method prepend_data : join_constraint -> unit
      method remove : Gtk.tree_iter -> bool
      method row_changed : Gtk.tree_path -> Gtk.tree_iter -> unit
      method set : row:Gtk.tree_iter -> column:'GTree.column -> '-> unit
      method set_data : join_constraint -> row:Gtk.tree_iter -> unit
      method set_default_sort_func :
        (GTree.model -> Gtk.tree_iter -> Gtk.tree_iter -> int) -> unit
      method set_sort_column_id : int -> Gtk.Tags.sort_type -> unit
      method set_sort_func :
        int -> (GTree.model -> Gtk.tree_iter -> Gtk.tree_iter -> int) -> unit
      method sort_column_changed : unit -> unit
      method swap : Gtk.tree_iter -> Gtk.tree_iter -> bool
    end
  type vtable_gui_input =
    Dbf_virtualTableGUI.vtable_gui_input = {
    vtgi_name : string;
    vtgi_vtable : Dbf_sql.SQL_db.vtable option;
  }
  class vtable_gui :
    Dbf_sql.SQL_db.table list ->
    (vtable_gui_input -> 'a) ->
    vtable_gui_input ->
    object
      val mutable current_constr_store : constraints_list_store
      method private _cb__add_constraint : unit -> unit
      method private _cb__after_down : SW.moved_down_cb_sig
      method private _cb__after_rem : SW.removed_cb_sig
      method private _cb__after_up : SW.moved_up_cb_sig
      method private _cb__cancel_button_clicked : unit -> unit
      method private _cb__constr_view_selection_changed : unit -> unit
      method private _cb__ok_button_clicked : unit -> unit
      method private _cb__rem_constraint : unit -> unit
      method private _cb__view_to_selection_changed : unit -> unit
      method private _constraint_gui_answer :
        constraints_list_store ->
        Dbf_sql.SQL_db.column * Dbf_sql.SQL_db.column -> unit
      method private _grab_input : vtable_gui_input
      method private _set_constr_model : constraints_list_store -> unit
      method reset_data : string -> unit
      method set_data_from_tables :
        Dbf_sql.SQL_db.table list -> string -> unit
      method set_data_from_vtable :
        Dbf_sql.SQL_db.table list -> Dbf_sql.SQL_db.vtable -> unit
      method start : unit -> unit
    end
end