let impact_panel main_ui =
let w = GPack.vbox () in
let bbox = GPack.hbox ~width:120 ~packing:w#pack () in
let set_selected =
GButton.button ~label:"Set selected"
~packing:(bbox#pack ~fill:false ~expand:true) ()
in
let do_select = apply_on_stmt (fun _ -> impact_statement_ui main_ui) in
ignore (set_selected#connect#pressed
(fun () -> History.apply_on_selected do_select));
let add_check_button label active f =
let b = GButton.check_button ~label ~active ~packing:w#pack () in
ignore (b#connect#toggled ~callback:(fun () -> f b));
b
in
let enabled_button =
add_check_button "Enable" (Enabled.get ())
(fun b -> Enabled.set b#active; !show_column (); main_ui#rehighlight ())
in
let slicing_button =
add_check_button "Slicing after impact" (Slicing.get ())
(fun b -> Slicing.set b#active)
in
let follow_focus_button =
add_check_button "Follow focus" (FollowFocus.get ())
(fun b -> FollowFocus.set b#active)
in
let refresh () =
let sensitive_set_selected_button = ref false in
History.apply_on_selected
(apply_on_stmt (fun _ _ -> sensitive_set_selected_button := true));
set_selected#misc#set_sensitive !sensitive_set_selected_button;
if Enabled.get () <> enabled_button#active then begin
enabled_button#set_active (Enabled.get ());
!show_column ();
main_ui#rehighlight ()
end;
slicing_button#set_active (Slicing.get ());
follow_focus_button#set_active (FollowFocus.get ())
in
"Impact", w#coerce, Some refresh