@@ -7,12 +7,13 @@ let create ~title tracefile =
77 let window = GWindow. window () in
88 window#set_title title;
99 window#event#connect#delete ==> (fun _ -> GMain. quit () ; true );
10- let table = GPack. table ~rows: 2 ~columns: 2 ~homogeneous: false ~packing: window#add () in
10+ let table = GPack. table ~rows: 3 ~columns: 2 ~homogeneous: false ~packing: window#add () in
1111 let hadjustment = GData. adjustment () in
1212 let vadjustment = GData. adjustment () in
1313 let area = GMisc. drawing_area ~packing: (table#attach ~left: 0 ~top: 0 ~expand: `BOTH ~fill: `BOTH ) () in
1414 let _hscroll = GRange. scrollbar `HORIZONTAL ~adjustment: hadjustment ~packing: (table#attach ~left: 0 ~top: 1 ~expand: `X ~fill: `BOTH ) () in
1515 let _vscroll = GRange. scrollbar `VERTICAL ~adjustment: vadjustment ~packing: (table#attach ~left: 1 ~top: 0 ~expand: `Y ~fill: `BOTH ) () in
16+ let minibuffer = Minibuffer. create ~packing: (table#attach ~left: 0 ~top: 2 ~right: 2 ~fill: `BOTH ) () in
1617 let v =
1718 let layout = Layout. load tracefile in
1819 View. of_layout layout ~width: 1000. ~height: 1000.
@@ -49,6 +50,52 @@ let create ~title tracefile =
4950 );
5051 area#misc#set_app_paintable true ;
5152
53+ let show_start () =
54+ let current = View. time_of_x v 0. /. 1e9 in
55+ Minibuffer. show minibuffer
56+ ~label: " Viewport start: "
57+ ~value: (Time. to_string current)
58+ (fun s ->
59+ match Time. of_string s with
60+ | Ok time ->
61+ set_start_time (time *. 1e9 );
62+ redraw () ;
63+ Minibuffer. hide minibuffer
64+ | Error message ->
65+ let box =
66+ GWindow. message_dialog ()
67+ ~message
68+ ~parent: window
69+ ~buttons: GWindow.Buttons. close
70+ in
71+ box#connect#response ==> (fun _ -> box#destroy () );
72+ box#show ()
73+ )
74+ in
75+
76+ let show_duration () =
77+ let current = View. get_duration v /. 1e9 in
78+ Minibuffer. show minibuffer
79+ ~label: " Viewport duration: "
80+ ~value: (Time. to_string current)
81+ (fun s ->
82+ match Time. of_string s with
83+ | Ok d ->
84+ View. set_duration v (d *. 1e9 );
85+ redraw () ;
86+ Minibuffer. hide minibuffer
87+ | Error message ->
88+ let box =
89+ GWindow. message_dialog ()
90+ ~message
91+ ~parent: window
92+ ~buttons: GWindow.Buttons. close
93+ in
94+ box#connect#response ==> (fun _ -> box#destroy () );
95+ box#show ()
96+ )
97+ in
98+
5299 window#event#connect#key_press ==> (fun ev ->
53100 let keyval = GdkEvent.Key. keyval ev in
54101 if keyval = GdkKeysyms. _F5 then (
@@ -57,7 +104,20 @@ let create ~title tracefile =
57104 set_scollbars () ;
58105 redraw () ;
59106 true
60- ) else false
107+ ) else if Minibuffer. is_open minibuffer then (
108+ if keyval = GdkKeysyms. _Escape then (
109+ Minibuffer. hide minibuffer;
110+ true
111+ ) else false
112+ ) else (
113+ if keyval = GdkKeysyms. _s then (
114+ show_start () ;
115+ true
116+ ) else if keyval = GdkKeysyms. _d then (
117+ show_duration () ;
118+ true
119+ ) else false
120+ )
61121 );
62122
63123 area#event#add [`SMOOTH_SCROLL ; `BUTTON1_MOTION ; `BUTTON_PRESS ];
@@ -113,7 +173,7 @@ let create ~title tracefile =
113173 set_scroll_y vadjustment#value;
114174 redraw () ;
115175 );
116-
176+
117177 let height =
118178 int_of_float @@ min
119179 (float (Gdk.Screen. height () ) *. 0.8 )
0 commit comments