let tabbed_box conf_struct_list buttons tooltips =
  let vbox = GPack.vbox () in
  let wnote = GPack.notebook
      (*homogeneous_tabs: true*)
      ~scrollable: true
      ~show_tabs: true
      ~tab_border: 3
      ~packing: (vbox#pack ~expand: true)
      ()
  in
  let list_param_box =
    List.map
      (fun conf_struct -> new configuration_box tooltips conf_struct wnote)
      conf_struct_list
  in
  let f_apply () =
    List.iter (fun param_box -> param_box#apply) list_param_box  ;
  in
  let hbox_buttons = GPack.hbox ~packing: (vbox#pack ~expand: false ~padding: 4) () in
  let rec iter_buttons ?(grab=false) = function
      [] ->
        ()
    | (label, callb) :: q ->
        let b = GButton.button ~label: label
            ~packing:(hbox_buttons#pack ~expand:true ~fill: true ~padding:4) ()
        in
        ignore (b#connect#clicked ~callback:
                  (fun () -> f_apply (); callb ()));
        (* If it's the first button then give it the focus *)
        if grab then b#grab_default ();

        iter_buttons q
  in
  iter_buttons ~grab: true buttons;

  vbox