let add_item (main_ui:Design.main_window_extension_points)
      ~use_values (factory:GMenu.menu GMenu.factory) name arg_opt callback =
    match arg_opt with
      | None -> (* add the menu item, but it isn't sensitive *)
          let item = factory#add_item name ~callback: (fun () -> ())
          in item#misc#set_sensitive false
      | Some arg -> (* add the menu item with its callback *)
          let cb arg =
            if use_values then
              if check_value main_ui then callback arg else ()
            else callback arg
          in
          ignore (factory#add_item name ~callback: (fun () -> cb arg))