Source file b_debug_window.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
(** an interactive window to select the Debug level *)
open Tsdl
open B_utils
module W = B_widget
module L = B_layout
module Draw = B_draw
let is_set code =
code land !debug_code <> 0
let toggle code =
debug_code := !debug_code lxor code
let set code b =
if b then debug_code := !debug_code lor code
else debug_code := !debug_code land (lnot code)
let create () =
let b = W.check_box ~state:!W.draw_boxes () in
let l = W.label "Turn on debug rectangles" in
let dbg_boxes = L.flat_of_w ~align:Draw.Center [b;l] in
let action w _ _ =
W.draw_boxes := W.get_state w in
let c_boxes = W.connect b b action
[Sdl.Event.mouse_button_down; Sdl.Event.finger_down] in
let b = W.check_box ~state:!debug () in
let l = W.label "Turn on debugging trace" in
let dbg_button = L.flat_of_w ~align:Draw.Center [b;l] in
let title = W.label "Debug Variables" in
let action code w _ _ =
set code (W.get_state w)
in
let rec loop vars rooms connections =
match vars with
| [] -> rooms, connections
| (var,code)::rest ->
let bb = W.check_box ~state:(is_set code) () in
let ll = W.label var in
let btn = L.flat_of_w ~sep:0 [bb;ll] in
let c = W.connect bb bb (action code) [Sdl.Event.mouse_button_down] in
loop rest (btn :: rooms) (c :: connections) in
let rooms, connections = loop debug_vars [] [] in
let panel = L.tower ~sep:0 ((L.flat_of_w ~sep:10 [title]) :: rooms) in
let action w _ _ =
let ok = W.get_state w in
debug := ok;
if ok
then (L.show panel; L.fade_in panel)
else (L.hide panel; L.fade_out panel) in
let c = W.connect b b action [Sdl.Event.mouse_button_down] in
List.iter (fun c -> W.(add_connection c.source c)) (c_boxes :: c :: connections);
panel.L.show <- !debug;
let layout = L.tower ~sep:0 [dbg_boxes; dbg_button; panel] in
layout