let ask_for_a_specific_option = fun ?parent name ->
  let dialog = GWindow.dialog ~title:"New option" ?parent ()
  in
  let main_box =
    GPack.table
      ~columns:2 ~rows:2
      ~row_spacings:5 ~col_spacings:10
      ~packing:(dialog#vbox#pack ~expand:true)
      ~border_width:5
      ()
  in
    ignore (GMisc.label ~text:"Database" ~xalign:0.
              ~packing:(main_box#attach ~top:0 ~left:0 ~expand:`NONE ~fill:`X)
              ());
    ignore (GMisc.label ~text:name ~xalign:0.
              ~packing:(main_box#attach ~top:1 ~left:0 ~expand:`NONE ~fill:`X)
              ());
    let db_entry =
      GEdit.entry
        ~packing:(main_box#attach ~top:0 ~left:1 ~expand:`X ~fill:`X) ()
    and opt_entry =
      GEdit.entry
        ~packing:(main_box#attach ~top:1 ~left:1 ~expand:`X ~fill:`X) ()
    in
      dialog#action_area#set_layout `START;
      dialog#add_button_stock `OK `OK;
      dialog#add_button_stock `CANCEL `CANCEL;
      let rec ask_for_option = fun () ->
        match dialog#run () with
          | `OK ->
              let db  = Dbf_misc.trim db_entry#text
              and opt = Dbf_misc.trim opt_entry#text in
                if db = "" || opt = "" then begin
                  GToolbox.message_box ~title:"Invalid input"
                    "You must fill all the fields";
                  ask_for_option ()
                end else begin
                  dialog#destroy ();
                  Some (db, opt)
                end
          | _   ->
              dialog#destroy ();
              None
      in
        ask_for_option ()