let make_panel _main_ui =
let w = GPack.vbox ~width:120 () in
let update_button =
let w = make_hbox w in
GButton.button ~label:"Measure"
~packing:(w#pack ~fill:false ~expand:true)
()
in
let box = make_hbox w in
let sloc_label = make_bi_label box "sloc:" in
let calls_label = make_bi_label box "calls:" in
let box = make_hbox w in
let if_label = make_bi_label box "if:" in
let loops_label = make_bi_label box "loops:" in
let box = make_hbox w in
let goto_label = make_bi_label box "goto:" in
let assign_label = make_bi_label box "assigns:" in
let box = make_hbox w in
let mem_label = make_bi_label box "Ptr:" in
let _placeholder1 = make_bi_label box "" in
let box = make_hbox w in
let func_label = make_bi_label box "Fct:" in
let proto_label = make_bi_label box "Proto:" in
let box = make_hbox w in
let cyclo_label = make_bi_label box "Cyclo:" in
let _placeholder2 = make_bi_label box "" in
let init () =
sloc_label#set_text "";
calls_label#set_text "";
if_label#set_text "";
loops_label#set_text "";
goto_label#set_text "";
assign_label#set_text "";
mem_label#set_text "";
func_label#set_text "";
proto_label#set_text "";
cyclo_label#set_text "";
in
let fill () =
try
let {Db.Metrics.if_statements = ifs;
mem_access = mem_access;
loop_statements = loops;
call_statements = calls;
assign_statements = assigns;
goto_statements = gotos;
sloc = sloc;
functions_without_source = fws;
functions_with_source = fs;
cyclos = cycl; }
= !Db.Metrics.last_result ()
in
update_button#misc#set_sensitive false;
sloc_label#set_text (string_of_int sloc);
calls_label#set_text (string_of_int calls);
if_label#set_text (string_of_int ifs);
loops_label#set_text (string_of_int loops);
goto_label#set_text (string_of_int gotos);
assign_label#set_text (string_of_int assigns);
mem_label#set_text (string_of_int mem_access);
func_label#set_text
(string_of_int (Cil_datatype.Varinfo.Hashtbl.length fs));
proto_label#set_text
(string_of_int(Cil_datatype.Varinfo.Hashtbl.length fws));
cyclo_label#set_text (string_of_int cycl)
with Not_found ->
update_button#misc#set_sensitive true ;
init ()
in
ignore
(update_button#connect#clicked
(fun () -> !Db.Metrics.compute (); fill ()));
"Metrics", w#coerce, Some fill