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