method add_new_option = fun (db, opt) ->
let do_insert = fun () ->
match sopts_store#get_iter_first with
| None ->
let iter = sopts_store#prepend_data db in
(iter, sopts_store#prepend_data ~parent:iter opt)
| Some iter ->
let rec insert = fun () ->
let db' = sopts_store#get_data ~row:iter in
if db = db' then
(iter, sopts_store#append_data ~parent:iter opt)
else if db < db' then
let iter' = sopts_store#insert_before iter in
sopts_store#set_data db ~row:iter';
(iter', sopts_store#prepend_data ~parent:iter' opt)
else if sopts_store#iter_next iter then
insert ()
else
let iter' = sopts_store#insert_before iter in
sopts_store#set_data db ~row:iter';
(iter', sopts_store#prepend_data ~parent:iter' opt)
in
insert ()
in
let (iter, iter_c) = do_insert () in
let path = sopts_store#get_path iter
and path_c = sopts_store#get_path iter_c in
sopts_view.sopt_view#expand_row ~all:false path;
sopts_view.sopt_view#scroll_to_cell path_c sopts_view.sopt_string;
sopts_view.sopt_view#selection#select_path path_c