paparazzi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[paparazzi-commits] [4305] add Close menu entry (^W) to plotters


From: Pascal Brisset
Subject: [paparazzi-commits] [4305] add Close menu entry (^W) to plotters
Date: Sun, 01 Nov 2009 19:24:34 +0000

Revision: 4305
          http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=4305
Author:   hecto
Date:     2009-11-01 19:24:33 +0000 (Sun, 01 Nov 2009)
Log Message:
-----------
 add Close menu entry (^W) to plotters

Modified Paths:
--------------
    paparazzi3/trunk/sw/logalizer/plot.ml
    paparazzi3/trunk/sw/logalizer/plotter.ml

Modified: paparazzi3/trunk/sw/logalizer/plot.ml
===================================================================
--- paparazzi3/trunk/sw/logalizer/plot.ml       2009-10-31 04:13:12 UTC (rev 
4304)
+++ paparazzi3/trunk/sw/logalizer/plot.ml       2009-11-01 19:24:33 UTC (rev 
4305)
@@ -629,7 +629,7 @@
              msgs in
          
          (* Store data for other windows *)
-         logs_menus := (ac, menu_name, (msgs, raw_msgs), protocol) :: 
!logs_menus;
+         logs_menus :=  !logs_menus @ [(ac, menu_name, (msgs, raw_msgs), 
protocol)];
          
          add_ac_submenu ?export protocol ?factor plot menubar curves_fact ac 
menu_name msgs raw_msgs;
        )
@@ -672,13 +672,26 @@
   | _ -> dialog#destroy ()
   end
 
+(** Table of current windows, to be able to quit when the last one is closed
+ FIXME: should be shared with plotter.ml *)
+let windows = Hashtbl.create 3
 
 (*****************************************************************************)
 let rec plot_window = fun ?export init ->
   let plotter = GWindow.window ~allow_shrink:true ~title:"Log Plotter" () in
+
+  (* Register the window *)
+  let oid = plotter#get_oid in
+  Hashtbl.add windows oid ();
+
   plotter#set_icon (Some (GdkPixbuf.from_file Env.icon_file));  
   let vbox = GPack.vbox ~packing:plotter#add () in
   let quit = fun () -> GMain.Main.quit (); exit 0 in
+  let close = fun () -> 
+    plotter#destroy ();
+    Hashtbl.remove windows oid;
+    if Hashtbl.length windows = 0 then
+      quit () in
 
   let tooltips = GData.tooltips () in
 
@@ -695,18 +708,16 @@
   let open_log_item = file_menu_fact#add_item "Open Log" ~key:GdkKeysyms._O in
   
   ignore (file_menu_fact#add_item "New" ~key:GdkKeysyms._N ~callback:(fun () 
-> plot_window []));
-(*
-  let close = fun () -> plotter#destroy () in
-  ignore (file_menu_fact#add_item "Close" ~key:GdkKeysyms._W ~callback:close); 
*)
-
   let delayed_screenshot = fun () ->
     ignore (GMain.Idle.add (fun () -> screenshot plot#drawing_area; false)) in
   ignore (file_menu_fact#add_item "Save screenshot" ~key:GdkKeysyms._S 
~callback:delayed_screenshot);
+  ignore (file_menu_fact#add_separator ());
+  ignore (file_menu_fact#add_item "Close" ~key:GdkKeysyms._W ~callback:close);
   ignore (file_menu_fact#add_item "Quit" ~key:GdkKeysyms._Q ~callback:quit);
   let curves_menu = factory#add_submenu "Curves" in
   let curves_menu_fact = new GMenu.factory curves_menu in
 
-  ignore (plotter#connect#destroy ~callback:(fun () -> plot#destroy (); quit 
()));
+  ignore (plotter#connect#destroy ~callback:close);
 
   (* Auto Scale *)
   let auto_scale = GButton.check_button ~label:"Auto Scale" ~active:true 
~packing:h#pack () in

Modified: paparazzi3/trunk/sw/logalizer/plotter.ml
===================================================================
--- paparazzi3/trunk/sw/logalizer/plotter.ml    2009-10-31 04:13:12 UTC (rev 
4304)
+++ paparazzi3/trunk/sw/logalizer/plotter.ml    2009-11-01 19:24:33 UTC (rev 
4305)
@@ -329,13 +329,27 @@
     else
       (field_descr, 0)
 
+(** Table of current windows, to be able to quit when the last one is closed *)
+let windows = Hashtbl.create 3
+
 let rec plot_window = fun window ->
-  let plotter = GWindow.window ~type_hint:`DIALOG ~allow_shrink:true 
~title:window.title () in
+  let plotter = GWindow.window ~deletable:true ~type_hint:`DIALOG 
~allow_shrink:true ~title:window.title () in
+
+  (* Register the window *)
+  let oid = plotter#get_oid in
+  Hashtbl.add windows oid ();
+
   ignore (plotter#parse_geometry window.geometry);
   plotter#set_icon (Some (GdkPixbuf.from_file Env.icon_file));
   let vbox = GPack.vbox ~packing:plotter#add () in
   let quit = fun () -> GMain.Main.quit (); exit 0 in
 
+  let close = fun () -> 
+    plotter#destroy ();
+    Hashtbl.remove windows oid;
+    if Hashtbl.length windows = 0 then
+      quit () in
+
   let tooltips = GData.tooltips () in
 
   let menubar = GMenu.menu_bar ~packing:vbox#pack () in
@@ -345,13 +359,13 @@
   let file_menu_fact = new GMenu.factory file_menu ~accel_group in
   
   ignore (file_menu_fact#add_item "New" ~key:GdkKeysyms._N ~callback:(fun () 
-> plot_window {window with curves=[]}));
-(*
-  let close = fun () -> plotter#destroy () in
-  ignore (file_menu_fact#add_item "Close" ~key:GdkKeysyms._W ~callback:close); 
*)
+
   let reset_item = file_menu_fact#add_item "Reset" ~key:GdkKeysyms._L in
   let suspend_item = file_menu_fact#add_item "Suspend" ~key:GdkKeysyms._S in
   let stop_item = file_menu_fact#add_item "Stop" ~key:GdkKeysyms._C in
   let start_item = file_menu_fact#add_item "Restart" ~key:GdkKeysyms._X in
+  ignore (file_menu_fact#add_separator ());
+  ignore (file_menu_fact#add_item "Close" ~key:GdkKeysyms._W ~callback:close);
   ignore (file_menu_fact#add_item "Quit" ~key:GdkKeysyms._Q ~callback:quit);
   let curves_menu = factory#add_submenu "Curves" in
   let curves_menu_fact = new GMenu.factory curves_menu in
@@ -366,7 +380,7 @@
   let width = 900 and height = 200 in
   let plot = new plot ~size: !size ~width ~height ~packing:(vbox#pack 
~expand:true) () in
   tooltips#set_tip plot#drawing_area#coerce ~text:"Drop a messages field here 
to draw it";
-  ignore (plotter#connect#destroy ~callback:(fun () -> plot#destroy (); quit 
()));
+  ignore (plotter#connect#destroy ~callback:close);
 
   (* Auto Scale *)
   let auto_scale = GButton.check_button ~label:"Auto Scale" ~active:true 
~packing:h#pack () in
@@ -444,14 +458,14 @@
     ignore (discrete_item#connect#toggled ~callback);
 
     (* Average *)
-    let average_value = GMisc.label ~height:10 ~text:"N/A" () in
+    let average_value = GMisc.label ~text:"N/A" () in
     let _avg_item = submenu_fact#add_image_item ~image:average_value#coerce 
~label:"Average" () in
     let update_avg_item = fun () ->
       average_value#set_text (sprintf "%.6f" curve.average#value) in
     ignore (curve.average#connect#value_changed update_avg_item);
 
     (* Standard deviation *)
-    let stdev_value = GMisc.label~height:10  ~text:"N/A" () in
+    let stdev_value = GMisc.label ~text:"N/A" () in
     let _item = submenu_fact#add_image_item ~image:stdev_value#coerce 
~label:"Stdev" () in
     let update_stdev_value = fun () ->
       stdev_value#set_text (sprintf "%.6f" curve.stdev#value) in





reply via email to

[Prev in Thread] Current Thread [Next in Thread]