method add_output (o : output) =
try
ignore(self#output_by_name o#name);
failwith (Printf.sprintf "Output \"%s\" already present." o#name)
with
Not_found ->
let evt = GBin.event_box () in
let tab = new Ed_gui_base.outputs_note_tab ~file: Ed_config.glade_file () in
tab#reparent evt#coerce;
tab#wlabel#set_text o#label;
let (o : output) = object
method name = o#name
method label = o#label
method box = o#box
method set_label s = o#set_label s; tab#wlabel#set_text s
method on_destroy = o#on_destroy
end
in
ignore(o#box#misc#connect#destroy (fun _ -> o#on_destroy));
ignore(tab#wb_close#connect#clicked
(fun () ->
let n = self#output_pos o#name in
notebook#remove_page n;
o#box#destroy ();
pages <- List.filter (fun o2 -> o2#name <> o#name) pages;
match pages with
[] -> toplevel#misc#hide()
| _ -> ()
)
);
ignore(notebook#append_page ~tab_label: evt#coerce o#box);
pages <- pages @ [o]