allow to select XML files in subdirectories

This commit is contained in:
Pascal Brisset
2009-09-18 14:27:05 +00:00
parent ee76c02c15
commit 0ac29d58e8
2 changed files with 20 additions and 12 deletions
+8 -10
View File
@@ -98,11 +98,11 @@ let gcs_or_edit = fun file ->
| _ -> 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 ac_combo_handler = fun gui (ac_combo:Gtk_tools.combo) target_combo ->
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 @@ let ac_combo_handler = fun gui (ac_combo:Gtk_tools.combo) target_combo ->
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 @@ let ac_combo_handler = fun gui (ac_combo:Gtk_tools.combo) target_combo ->
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 ()
+12 -2
View File
@@ -60,6 +60,16 @@ let run_and_log = fun log com ->
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 @@ let choose_xml_file = fun ?(multiple = false) title subdir cb ->
| `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