paparazzi-commits
[Top][All Lists]
Advanced

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

[paparazzi-commits] [4185] allow to select XML files in subdirectories


From: Pascal Brisset
Subject: [paparazzi-commits] [4185] allow to select XML files in subdirectories
Date: Fri, 18 Sep 2009 14:27:06 +0000

Revision: 4185
          http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=4185
Author:   hecto
Date:     2009-09-18 14:27:05 +0000 (Fri, 18 Sep 2009)
Log Message:
-----------
 allow to select XML files in subdirectories

Modified Paths:
--------------
    paparazzi3/trunk/sw/supervision/pc_aircraft.ml
    paparazzi3/trunk/sw/supervision/pc_common.ml

Modified: paparazzi3/trunk/sw/supervision/pc_aircraft.ml
===================================================================
--- paparazzi3/trunk/sw/supervision/pc_aircraft.ml      2009-09-18 14:26:12 UTC 
(rev 4184)
+++ paparazzi3/trunk/sw/supervision/pc_aircraft.ml      2009-09-18 14:27:05 UTC 
(rev 4185)
@@ -98,11 +98,11 @@
   | _ -> failwith "Internal error: gcs_or_edit"
     
 let ac_files = fun gui ->
-  ["airframe", gui#label_airframe, gui#button_browse_airframe, 
gui#button_edit_airframe, edit, false;
-   "flight_plan", gui#label_flight_plan, gui#button_browse_flight_plan, 
gui#button_edit_flight_plan, gcs_or_edit, false;
-   "settings", gui#label_settings, gui#button_browse_settings, 
gui#button_edit_settings, edit, true;
-   "radio", gui#label_radio, gui#button_browse_radio, gui#button_edit_radio, 
edit, false;
-   "telemetry", gui#label_telemetry, gui#button_browse_telemetry, 
gui#button_edit_telemetry, edit, false]
+  ["airframe", "airframes", gui#label_airframe, gui#button_browse_airframe, 
gui#button_edit_airframe, edit, false;
+   "flight_plan", "flight_plans", gui#label_flight_plan, 
gui#button_browse_flight_plan, gui#button_edit_flight_plan, gcs_or_edit, false;
+   "settings", "settings", gui#label_settings, gui#button_browse_settings, 
gui#button_edit_settings, edit, true;
+   "radio", "radios", gui#label_radio, gui#button_browse_radio, 
gui#button_edit_radio, edit, false;
+   "telemetry", "telemetry", gui#label_telemetry, gui#button_browse_telemetry, 
gui#button_edit_telemetry, edit, false]
 
 
 (* Awful but easier *)
@@ -169,7 +169,7 @@
       let value = fun a ->
        try (ExtXml.attrib aircraft a) with _ -> Xml.attrib sample a in
       List.iter
-       (fun (a, label, _, _, _, _) -> label#set_text (value a))
+       (fun (a, _subdir, label, _, _, _, _) -> label#set_text (value a))
        (ac_files gui);
        let ac_id = ExtXml.attrib aircraft "ac_id"
        and gui_color = ExtXml.attrib_or_default aircraft "gui_color" "white" in
@@ -241,7 +241,7 @@
   ignore(gui#entry_ac_id#connect#changed ~callback:(fun () -> save_callback 
gui ac_combo ()));
   
   (* Conf *)
-  List.iter (fun (name, label, button_browse, button_edit, editor, multiple) ->
+  List.iter (fun (name, subdir, label, button_browse, button_edit, editor, 
multiple) ->
     let callback = fun _ ->
       let rel_files = Str.split regexp_space label#text in
       let abs_files = List.map (Filename.concat Utils.conf_dir) rel_files in
@@ -250,9 +250,7 @@
       editor arg in
     ignore (button_edit#connect#clicked ~callback);
     let callback = fun _ ->
-      let subdir = Filename.dirname (first_word label#text) in
-      let cb = fun selected ->
-       let names = List.map (fun name -> subdir//name) selected in
+      let cb = fun names ->
        let names = String.concat " " names in
        label#set_text names;
        save_callback gui ac_combo ()

Modified: paparazzi3/trunk/sw/supervision/pc_common.ml
===================================================================
--- paparazzi3/trunk/sw/supervision/pc_common.ml        2009-09-18 14:26:12 UTC 
(rev 4184)
+++ paparazzi3/trunk/sw/supervision/pc_common.ml        2009-09-18 14:27:05 UTC 
(rev 4185)
@@ -60,6 +60,16 @@
   let io_watch_out = Glib.Io.add_watch [`IN; `HUP] cb channel_out in
   pid, channel_out, com_stdout, io_watch_out
 
+let strip_prefix = fun dir file ->
+  let n = String.length dir in
+  if not (String.length file > n && String.sub file 0 n = dir) then begin
+    let msg = sprintf "Selected file '%s' should be in '%s'" file dir in
+    GToolbox.message_box ~title:"Error" msg;
+    raise Exit
+  end else
+    String.sub file (n+1) (String.length file - n - 1)
+    
+
 let choose_xml_file = fun ?(multiple = false) title subdir cb ->
   let dir = conf_dir // subdir in
   let dialog = GWindow.file_chooser_dialog ~action:`OPEN ~title () in
@@ -72,10 +82,10 @@
   | `OPEN, _ when multiple ->
       let names = dialog#get_filenames in
       dialog#destroy ();
-      cb (List.map Filename.basename names)
+      cb (List.map (fun f -> subdir // strip_prefix dir f) names)
   | `OPEN, Some name ->
       dialog#destroy ();
-      cb [Filename.basename name]
+      cb [subdir // strip_prefix dir name]
   | _ -> dialog#destroy ()
   end
 





reply via email to

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