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 "Slocs:" 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; }
= LastResult.get ()
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 (Metrics_base.map_cardinal_varinfomap fs));
proto_label#set_text (string_of_int(map_cardinal_varinfomap 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 () -> LastResult.set (!Db.Metrics.compute ()); fill ()));
"Metrics", w#coerce, Some fill