method init = (
(this)#destroy;
f <- Frame.create frame_root;
f_left <- Frame.create f;
f_left_top <- Frame.create f_left;
f_left_down <- Frame.create f_left;
f_center <- Frame.create f;
f_center_top <- Frame.create f_center;
f_center_down <- Frame.create f_center;
l <- Label.create ~text:"" f_left_top;
entry_1 <- Entry.create ~width:12 f_center_top ~background:selcol ;
center_lst <- Listbox.create ~width:10 ~background:selcol ~selectmode:`Single f_center_down;
center_lst_v <- Scrollbar.create ~background:blue_light ~orient:`Vertical ~borderwidth:1 f_center_down;
pack ~side:`Left ~fill:`Both ~expand:true [f];
pack ~side:`Left ~fill:`Y ~expand:true [f_left];
if(intruder_name<>"" && agent_name<>"" && intruder_state<>"")
then(
decomp_message <- (decompose message);
knowledge <- (let tmp = decompose(get_value_of_var "x" "set_knowledge") in
if(tmp<>[])
then (cdr tmp)
else []);
let rec aux e l res =
match l with [] -> List.rev res
|(x::ls) -> if(match_message intruder_name intruder_state x agent_name intruder_state e)
then aux e ls (x::res)
else aux e ls res;
in
l0 <- (aux message knowledge []);
if(decomp_message <> []) then is_an_atom <- false
else if((is_a_var message) || (is_a_value message)) then (is_an_atom <- true);
if(l0<>[])
then(
let label_1 = Label.create ~text:(transcript_receiver_for_intruder agent_name message) f_center_top in
let f_center_button = Frame.create f_center in
let button_unrefinment = Button.create ~text:"<" ~command:(fun () ->
l0_rec := "" ;
del_entry message entry_1;
(match parent with None -> ()
|Some p -> p#init);
) f_center_button
in
(match parent with None -> ()
|Some _ -> pack ~side:`Left ~fill:`X [button_unrefinment]);
let button_clear = Button.create ~text:"Clear" ~command:(fun () -> l0_rec := "" ; update_entry intruder_name intruder_state agent_name message "") f_center_button in
let button_refinment = Button.create ~text:">" ~command:(fun () ->
l0_rec := "" ;
update_entry intruder_name intruder_state agent_name message "";
destroy label_1;
destroy button_unrefinment;
destroy button_clear;
destroy f_center_button;
del_entry message entry_1;
destroy entry_1;
destroy f_center_top;
destroy f_center_down;
destroy center_lst_v;
destroy center_lst;
destroy f_center_button;
destroy l;
destroy f_left_top;
destroy f_left_down;
f_left_top <- Frame.create f_left;
f_left_down <- Frame.create f_left;
f_center_top <- Frame.create f_center;
f_center_down <- Frame.create f_center;
l <- Label.create ~text:"" f_left_top;
entry_1 <- Entry.create ~width:12 f_center_top ~background:selcol ;
center_lst <- Listbox.create ~width:10 ~background:selcol ~selectmode:`Single f_center_down;
center_lst_v <- Scrollbar.create ~background:blue_light ~orient:`Vertical ~borderwidth:1 f_center_down;
(this)#message_refinment (Some (this :> box));
) f_center_button in
scroll_link center_lst_v center_lst "vertical";
pack ~side:`Left ~fill:`Y ~expand:true [f_center];
pack ~side:`Top ~fill:`Y ~expand:false [f_center_top];
pack ~side:`Top ~fill:`Y ~expand:false [label_1];
pack ~side:`Top ~fill:`X ~expand:true [entry_1];
pack ~side:`Top ~fill:`Both ~expand:true [f_center_down];
pack ~side:`Right ~fill:`Y [center_lst_v];
pack ~side:`Top ~fill:`Both ~expand:true [center_lst];
pack ~side:`Bottom ~fill:`X [f_center_button];
pack ~side:`Left ~fill:`X [button_clear];
if not(is_an_atom) then pack ~side:`Left ~fill:`X [button_refinment];
Listbox.insert center_lst ~index:(`Num 0)~texts:(List.map (fun m -> transcript_receiver_for_intruder agent_name m) l0);
Entry.configure entry_1 ~width:(max 12 (3+(max_length_string(Listbox.get_range center_lst ~first:(`Num 0) ~last:`End))));
add_entry intruder_name intruder_state agent_name message entry_1 l0_rec center_lst l0;
bind center_lst
~events:[(`ButtonPressDetail 1)]
~fields:[`MouseY]
~action:(function x ->
let result =
Listbox.nearest
center_lst
~y:x.ev_MouseY
in
let select =
match result with
| `Num num -> num
in
if(click_i=select)
then(
l0_rec := transcript_receiver_for_intruder agent_name (Listbox.get center_lst ~index:(`Num select));
update_entry intruder_name intruder_state agent_name message (!l0_rec);
click_i <- (-1)
)
else click_i <- select;
);
)
else (this)#message_refinment None
);
)