let slicing_panel (main_ui:Design.main_window_extension_points) =
let w = GPack.vbox () in
let hbox1 = GPack.hbox
~packing:w#pack () in
let activate_button =
let b = GButton.button ~label:"Activate"
~packing:hbox1#pack () in
main_ui#help_message b "%s" msg_help_compute_values ;
ignore (b#connect#pressed
(fun () -> gui_compute_values main_ui ));
b
in
let combo_box_text =
let ((combo_box, (_model, column)) as combo_box_text) =
GEdit.combo_box_text ~strings:[ none_text ] ~wrap_width:3 ~use_markup:true
~packing:(hbox1#pack ~expand:true ~fill:true) () in
combo_box#set_active 0 ;
ignore (combo_box#connect#changed
(fun () ->
match combo_box#active_iter with
| None -> ()
| Some row ->
let slicing_project_name =
Extlib.may_map !Db.Slicing.Project.get_name ~dft:none_text (!Db.Slicing.Project.get_project ())
and selected_name = combo_box#model#get ~row ~column in
if (selected_name != slicing_project_name) then
let proj_opt =
try Some (List.find (fun proj -> selected_name = !Db.Slicing.Project.get_name proj) (!Db.Slicing.Project.get_all ()))
with Not_found -> None
in
gui_set_project main_ui proj_opt));
combo_box_text
in
let table = GPack.table ~columns:2 ~rows:2 ~homogeneous:true ~packing:w#pack () in
let hbox2 = GPack.hbox ~packing:(table#attach ~left:1 ~top:0) () in
let do_refresh to_enable =
if to_enable then gui_compute_values main_ui;
!show_column ();
main_ui#rehighlight ();
in
let enabled_button =
let b = GButton.check_button
~label:"Enable"
~active:(Enabled.get ())
~packing:(table#attach ~left:0 ~top:0) () in
main_ui#help_message b "%s" msg_help_enable_gui ;
ignore (b#connect#toggled
~callback:(fun () ->
Enabled.set b#active;
do_refresh b#active));
b
in
let verbose_refresh = Gtk_helper.on_int ~lower:0 ~upper:3
hbox2
"Verbosity"
~sensitive:Enabled.get
SlicingParameters.Verbose.get
(gui_set_slicing_debug main_ui)
in
let hbox3 = GPack.hbox ~packing:(table#attach ~left:1 ~top:1) () in
let slice_undef_button =
let b = GButton.check_button
~label:"Libraries"
~active:(Enabled.get ())
~packing:(table#attach ~left:0 ~top:1) () in
main_ui#help_message b "%s" msg_help_libraries ;
ignore (b#connect#toggled
(fun () ->
gui_set_slicing_undef_functions main_ui b#active));
b
in
let level_refresh = Gtk_helper.on_int ~lower:0 ~upper:3
hbox3
"Level"
~sensitive:Enabled.get
SlicingParameters.Mode.Calls.get
(gui_set_slicing_level main_ui)
in
Project.register_after_set_current_hook
~user_only:true
(fun _ -> rebuild_model combo_box_text);
let refresh () =
let value_is_computed = Db.Value.is_computed () in
let slicing_project = !Db.Slicing.Project.get_project () in
let enabled = Enabled.get () in
activate_button#misc#set_sensitive (not value_is_computed) ;
enabled_button#misc#set_sensitive value_is_computed ;
slice_undef_button#misc#set_sensitive enabled ;
verbose_refresh ();
level_refresh ();
if Enabled.get () <> enabled_button#active then (
enabled_button#set_active (Enabled.get ());
!show_column ();
);
slice_undef_button#set_active (SlicingParameters.Mode.SliceUndef.get());
refresh_combo_box combo_box_text slicing_project
(enabled && value_is_computed)
in
refresh () ;
"Slicing",w#coerce,Some refresh