method private _grab_input =
let ty = SQL_ty.type_of_string
?dispsize: self#_get_dispsize
?precision: self#_get_precision
~options: glade#other_opts_combo#entry#text
glade#ty_combo#entry#text
and options =
let fetch_strings = fun parent ->
if sopts_store#iter_has_child parent then
let iter = sopts_store#iter_children (Some parent) in
let result = ref [sopts_store#get_data ~row:iter] in
while sopts_store#iter_next iter do
result := (sopts_store#get_data ~row:iter) :: !result
done;
List.rev !result
else
[]
in
match sopts_store#get_iter_first with
| None ->
Dbf_misc.StringMap.empty
| Some iter ->
let rec fetch = fun map ->
let db = sopts_store#get_data ~row:iter
and opts = fetch_strings iter in
let map = Dbf_misc.StringMap.add db opts map in
match sopts_store#iter_next iter with
| true -> fetch map
| false -> map
in
fetch Dbf_misc.StringMap.empty
and spec_ty =
match tyopts_store#get_iter_first with
| None ->
Dbf_misc.StringMap.empty
| Some iter ->
let rec fetch = fun map ->
let (db, ty) = tyopts_store#get_data ~row:iter in
let map = Dbf_misc.StringMap.add db ty map in
match tyopts_store#iter_next iter with
| true -> fetch map
| false -> map
in
fetch Dbf_misc.StringMap.empty
in
{ cgi_name = glade#name_entry#text;
cgi_comment = glade#comments_textview#buffer#get_text ();
cgi_type = ty;
cgi_nullable = glade#nullable_check#active;
cgi_options = options;
cgi_spec_ty = spec_ty;
cgi_ocaml_type = glade#ocamlty_combo#entry#text;
cgi_sql2ml = glade#sql2ml_combo#entry#text;
cgi_ml2sql = glade#ml2sql_combo#entry#text; }