mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-06-05 06:54:49 +08:00
strip buttons
This commit is contained in:
@@ -55,6 +55,7 @@ alt CDATA #IMPLIED>
|
|||||||
|
|
||||||
<!ATTLIST block
|
<!ATTLIST block
|
||||||
name CDATA #REQUIRED
|
name CDATA #REQUIRED
|
||||||
|
strip_button CDATA #IMPLIED
|
||||||
description CDATA #IMPLIED>
|
description CDATA #IMPLIED>
|
||||||
|
|
||||||
<!ATTLIST while cond CDATA #IMPLIED>
|
<!ATTLIST while cond CDATA #IMPLIED>
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
<block NAME="stack 1">
|
<block NAME="stack 1">
|
||||||
<circle RADIUS="estimator_z/2" WP="1"/>
|
<circle RADIUS="estimator_z/2" WP="1"/>
|
||||||
</block>
|
</block>
|
||||||
<block NAME="descent 0">
|
<block NAME="descent 0" strip_button="Descent">
|
||||||
<circle RADIUS="estimator_z/2" WP="1" vmode="gaz" gaz="0.0" pitch="-0.3"/>
|
<circle RADIUS="estimator_z/2" WP="1" vmode="gaz" gaz="0.0" pitch="-0.3"/>
|
||||||
</block>
|
</block>
|
||||||
<block NAME="route12">
|
<block NAME="route12">
|
||||||
|
|||||||
@@ -8,8 +8,8 @@
|
|||||||
<dl_setting MAX="1000" MIN="-50" STEP="10" VAR="altitude_shift"/>
|
<dl_setting MAX="1000" MIN="-50" STEP="10" VAR="altitude_shift"/>
|
||||||
</dl_settings>
|
</dl_settings>
|
||||||
<dl_settings NAME="mode">
|
<dl_settings NAME="mode">
|
||||||
<dl_setting MAX="2" MIN="0" STEP="1" VAR="pprz_mode"/>
|
<dl_setting MAX="2" MIN="0" STEP="1" VAR="pprz_mode" strip_button="AUTO2" button_value="2"/>
|
||||||
<dl_setting MAX="1" MIN="0" STEP="1" VAR="launch"/>
|
<dl_setting MAX="1" MIN="0" STEP="1" VAR="launch" strip_button="Launch" button_value="1"/>
|
||||||
</dl_settings>
|
</dl_settings>
|
||||||
</dl_settings>
|
</dl_settings>
|
||||||
</settings>
|
</settings>
|
||||||
|
|||||||
@@ -25,4 +25,6 @@ var CDATA #REQUIRED
|
|||||||
min CDATA #REQUIRED
|
min CDATA #REQUIRED
|
||||||
max CDATA #REQUIRED
|
max CDATA #REQUIRED
|
||||||
step CDATA #IMPLIED
|
step CDATA #IMPLIED
|
||||||
|
strip_button CDATA #IMPLIED
|
||||||
|
button_value CDATA #IMPLIED
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ INCLUDES=-I +lablgtk2 -I ../../lib/ocaml
|
|||||||
LIBS=glibivy-ocaml.cma lablgtk.cma lib-pprz.cma lablgnomecanvas.cma xlib-pprz.cma
|
LIBS=glibivy-ocaml.cma lablgtk.cma lib-pprz.cma lablgnomecanvas.cma xlib-pprz.cma
|
||||||
CMXA=$(LIBS:.cma=.cmxa)
|
CMXA=$(LIBS:.cma=.cmxa)
|
||||||
|
|
||||||
ML= speech.ml horizon.ml pages.ml strip.ml plugin.ml sectors.ml map2d.ml editFP.ml live.ml gcs.ml
|
ML= speech.ml horizon.ml strip.ml pages.ml plugin.ml sectors.ml map2d.ml editFP.ml live.ml gcs.ml
|
||||||
MAIN=gcs
|
MAIN=gcs
|
||||||
CMO=$(ML:.ml=.cmo)
|
CMO=$(ML:.ml=.cmo)
|
||||||
CMX=$(ML:.ml=.cmx)
|
CMX=$(ML:.ml=.cmx)
|
||||||
@@ -62,15 +62,18 @@ $(MAIN).opt : $(CMX)
|
|||||||
@echo OOC $<
|
@echo OOC $<
|
||||||
$(Q)$(OCAMLOPT) $(INCLUDES) -c $<
|
$(Q)$(OCAMLOPT) $(INCLUDES) -c $<
|
||||||
|
|
||||||
gcs.cmo : pages.cmi speech.cmi editFP.cmi sectors.cmi
|
|
||||||
pages.cmo pages.cmx : pages.cmi horizon.cmi
|
|
||||||
live.cmo : plugin.cmi live.cmi strip.cmi speech.cmi pages.cmi
|
|
||||||
map2d.cmo : map2d.cmi
|
|
||||||
strip.cmo : strip.cmi
|
|
||||||
speech.cmo : speech.cmi
|
|
||||||
plugin.cmo : plugin.cmi
|
|
||||||
editFP.cmo : editFP.cmi
|
|
||||||
sectors.cmo : sectors.cmi
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f *~* *.cm* *.o *.out *.opt map2d gcs
|
rm -f *~* *.cm* *.o *.out *.opt map2d gcs
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Dependencies
|
||||||
|
#
|
||||||
|
|
||||||
|
.depend:
|
||||||
|
ocamldep *.ml* > .depend
|
||||||
|
|
||||||
|
ifneq ($(MAKECMDGOALS),clean)
|
||||||
|
-include .depend
|
||||||
|
endif
|
||||||
|
|||||||
@@ -269,17 +269,6 @@ let create_ac = fun (geomap:G.widget) (acs_notebook:GPack.notebook) ac_id config
|
|||||||
let params = ac_menu_fact#add_check_item "A/C label" ~active:false in
|
let params = ac_menu_fact#add_check_item "A/C label" ~active:false in
|
||||||
ignore (params#connect#toggled (fun () -> track#set_params_state params#active));
|
ignore (params#connect#toggled (fun () -> track#set_params_state params#active));
|
||||||
|
|
||||||
(** Build the XML flight plan, connect then "jump_to_block" *)
|
|
||||||
let fp_xml = ExtXml.child fp_xml_dump "flight_plan" in
|
|
||||||
let fp = load_mission ~editable:false color geomap fp_xml in
|
|
||||||
fp#connect_activated (fun node ->
|
|
||||||
if XmlEdit.tag node = "block" then
|
|
||||||
let block = XmlEdit.attrib node "name" in
|
|
||||||
let id = list_casso block blocks in
|
|
||||||
jump_to_block ac_id id);
|
|
||||||
ignore (reset_wp_menu#connect#activate (reset_waypoints fp));
|
|
||||||
|
|
||||||
|
|
||||||
(** Add a new tab in the A/Cs notebook, with a colored label *)
|
(** Add a new tab in the A/Cs notebook, with a colored label *)
|
||||||
let eb = GBin.event_box () in
|
let eb = GBin.event_box () in
|
||||||
let _label = GMisc.label ~text:name ~packing:eb#add () in
|
let _label = GMisc.label ~text:name ~packing:eb#add () in
|
||||||
@@ -291,6 +280,35 @@ let create_ac = fun (geomap:G.widget) (acs_notebook:GPack.notebook) ac_id config
|
|||||||
let visible = fun w ->
|
let visible = fun w ->
|
||||||
ac_notebook#page_num w#coerce = ac_notebook#current_page in
|
ac_notebook#page_num w#coerce = ac_notebook#current_page in
|
||||||
|
|
||||||
|
(** Add a strip and connect it to the A/C notebook *)
|
||||||
|
let select_this_tab =
|
||||||
|
let n = acs_notebook#page_num ac_frame#coerce in
|
||||||
|
fun () -> acs_notebook#goto_page n in
|
||||||
|
let strip = Strip.add config color select_this_tab center_ac commit_moves (mark geomap ac_id track !Plugin.frame) in
|
||||||
|
|
||||||
|
|
||||||
|
(** Build the XML flight plan, connect then "jump_to_block" *)
|
||||||
|
let fp_xml = ExtXml.child fp_xml_dump "flight_plan" in
|
||||||
|
let fp = load_mission ~editable:false color geomap fp_xml in
|
||||||
|
fp#connect_activated (fun node ->
|
||||||
|
if XmlEdit.tag node = "block" then
|
||||||
|
let block = XmlEdit.attrib node "name" in
|
||||||
|
let id = list_casso block blocks in
|
||||||
|
jump_to_block ac_id id);
|
||||||
|
ignore (reset_wp_menu#connect#activate (reset_waypoints fp));
|
||||||
|
|
||||||
|
(** Add the short cut buttons in the strip *)
|
||||||
|
List.iter (fun b ->
|
||||||
|
try
|
||||||
|
let label = ExtXml.attrib b "strip_button"
|
||||||
|
and id = ExtXml.int_attrib b "no" in
|
||||||
|
let b = GButton.button ~label () in
|
||||||
|
Strip.add_widget strip b#coerce;
|
||||||
|
ignore (b#connect#clicked (fun _ -> jump_to_block ac_id id))
|
||||||
|
with
|
||||||
|
_ -> ())
|
||||||
|
(Xml.children (ExtXml.child (ExtXml.child fp_xml_dump "flight_plan") "blocks"));
|
||||||
|
|
||||||
(** Insert the flight plan tab *)
|
(** Insert the flight plan tab *)
|
||||||
let fp_label = GMisc.label ~text: "Flight Plan" () in
|
let fp_label = GMisc.label ~text: "Flight Plan" () in
|
||||||
(ac_notebook:GPack.notebook)#append_page ~tab_label:fp_label#coerce fp#window#coerce;
|
(ac_notebook:GPack.notebook)#append_page ~tab_label:fp_label#coerce fp#window#coerce;
|
||||||
@@ -325,11 +343,13 @@ let create_ac = fun (geomap:G.widget) (acs_notebook:GPack.notebook) ac_id config
|
|||||||
let callback = fun idx value ->
|
let callback = fun idx value ->
|
||||||
let vs = ["ac_id", Pprz.String ac_id; "index", Pprz.Int idx;"value", Pprz.Float value] in
|
let vs = ["ac_id", Pprz.String ac_id; "index", Pprz.Int idx;"value", Pprz.Float value] in
|
||||||
Ground_Pprz.message_send "dl" "DL_SETTING" vs in
|
Ground_Pprz.message_send "dl" "DL_SETTING" vs in
|
||||||
let settings_tab = new Pages.settings ~visible xml_settings callback in
|
let settings_tab = new Pages.settings ~visible xml_settings callback strip in
|
||||||
let tab_label = (GMisc.label ~text:"Settings" ())#coerce in
|
let tab_label = (GMisc.label ~text:"Settings" ())#coerce in
|
||||||
ac_notebook#append_page ~tab_label settings_tab#widget;
|
ac_notebook#append_page ~tab_label settings_tab#widget;
|
||||||
Some settings_tab
|
Some settings_tab
|
||||||
with _ -> None in
|
with exc ->
|
||||||
|
prerr_endline (Printexc.to_string exc);
|
||||||
|
None in
|
||||||
|
|
||||||
let rc_settings_page =
|
let rc_settings_page =
|
||||||
try
|
try
|
||||||
@@ -340,12 +360,6 @@ let create_ac = fun (geomap:G.widget) (acs_notebook:GPack.notebook) ac_id config
|
|||||||
Some settings_tab
|
Some settings_tab
|
||||||
with _ -> None in
|
with _ -> None in
|
||||||
|
|
||||||
(** Add a strip and connect it to the A/C notebook *)
|
|
||||||
let select_this_tab =
|
|
||||||
let n = acs_notebook#page_num ac_frame#coerce in
|
|
||||||
fun () -> acs_notebook#goto_page n in
|
|
||||||
let strip = Strip.add config color select_this_tab center_ac commit_moves (mark geomap ac_id track !Plugin.frame) in
|
|
||||||
|
|
||||||
|
|
||||||
Hashtbl.add live_aircrafts ac_id { track = track; color = color;
|
Hashtbl.add live_aircrafts ac_id { track = track; color = color;
|
||||||
fp_group = fp ; config = config ;
|
fp_group = fp ; config = config ;
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ class misc ~packing (widget: GBin.frame) =
|
|||||||
(*****************************************************************************)
|
(*****************************************************************************)
|
||||||
(* Dataling settings paged *)
|
(* Dataling settings paged *)
|
||||||
(*****************************************************************************)
|
(*****************************************************************************)
|
||||||
let one_setting = fun i do_change packing s (tooltips:GData.tooltips) ->
|
let one_setting = fun i do_change packing s (tooltips:GData.tooltips) strip ->
|
||||||
let f = fun a -> float_of_string (ExtXml.attrib s a) in
|
let f = fun a -> float_of_string (ExtXml.attrib s a) in
|
||||||
let lower = f "min"
|
let lower = f "min"
|
||||||
and upper = f "max"
|
and upper = f "max"
|
||||||
@@ -189,7 +189,8 @@ let one_setting = fun i do_change packing s (tooltips:GData.tooltips) ->
|
|||||||
let text = ExtXml.attrib s "var" in
|
let text = ExtXml.attrib s "var" in
|
||||||
let _l = GMisc.label ~width:100 ~text ~packing:hbox#pack () in
|
let _l = GMisc.label ~width:100 ~text ~packing:hbox#pack () in
|
||||||
let _v = GMisc.label ~width:50 ~text:"N/A" ~packing:hbox#pack () in
|
let _v = GMisc.label ~width:50 ~text:"N/A" ~packing:hbox#pack () in
|
||||||
(** For a small number of values, radio buttons *)
|
|
||||||
|
(** For a small number of values, radio buttons, else a slider *)
|
||||||
let _n = truncate ((upper -. lower) /. step_incr) in
|
let _n = truncate ((upper -. lower) /. step_incr) in
|
||||||
let commit =
|
let commit =
|
||||||
if step_incr = 1. && upper -. lower <= 2. then
|
if step_incr = 1. && upper -. lower <= 2. then
|
||||||
@@ -231,10 +232,20 @@ let one_setting = fun i do_change packing s (tooltips:GData.tooltips) ->
|
|||||||
| Some v -> do_change i v in
|
| Some v -> do_change i v in
|
||||||
ignore (undo_but#connect#clicked ~callback);
|
ignore (undo_but#connect#clicked ~callback);
|
||||||
tooltips#set_tip undo_but#coerce ~text:"Undo";
|
tooltips#set_tip undo_but#coerce ~text:"Undo";
|
||||||
|
begin
|
||||||
|
try
|
||||||
|
let label = ExtXml.attrib s "strip_button"
|
||||||
|
and sp_value = f "button_value" in
|
||||||
|
let b = GButton.button ~label () in
|
||||||
|
Strip.add_widget strip b#coerce;
|
||||||
|
ignore (b#connect#clicked (fun _ -> do_change i sp_value))
|
||||||
|
with
|
||||||
|
ExtXml.Error _ -> ()
|
||||||
|
end;
|
||||||
_v
|
_v
|
||||||
|
|
||||||
|
|
||||||
let rec build_settings = fun do_change i flat_list xml_settings packing tooltips ->
|
let rec build_settings = fun do_change i flat_list xml_settings packing tooltips strip ->
|
||||||
match xml_settings with
|
match xml_settings with
|
||||||
[] -> ()
|
[] -> ()
|
||||||
| x::xs ->
|
| x::xs ->
|
||||||
@@ -242,7 +253,7 @@ let rec build_settings = fun do_change i flat_list xml_settings packing tooltips
|
|||||||
if ExtXml.tag_is x "dl_setting" then
|
if ExtXml.tag_is x "dl_setting" then
|
||||||
List.iter
|
List.iter
|
||||||
(fun s ->
|
(fun s ->
|
||||||
let label_value = one_setting !i do_change packing s tooltips in
|
let label_value = one_setting !i do_change packing s tooltips strip in
|
||||||
flat_list := label_value :: !flat_list;
|
flat_list := label_value :: !flat_list;
|
||||||
incr i)
|
incr i)
|
||||||
xml_settings
|
xml_settings
|
||||||
@@ -258,20 +269,20 @@ let rec build_settings = fun do_change i flat_list xml_settings packing tooltips
|
|||||||
let tab_label = (GMisc.label ~text ())#coerce in
|
let tab_label = (GMisc.label ~text ())#coerce in
|
||||||
n#append_page ~tab_label vbox#coerce;
|
n#append_page ~tab_label vbox#coerce;
|
||||||
|
|
||||||
build_settings do_change i flat_list (Xml.children p) vbox#pack tooltips)
|
build_settings do_change i flat_list (Xml.children p) vbox#pack tooltips strip)
|
||||||
xml_settings
|
xml_settings
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class settings = fun ?(visible = fun _ -> true) xml_settings do_change ->
|
class settings = fun ?(visible = fun _ -> true) xml_settings do_change strip ->
|
||||||
let sw = GBin.scrolled_window ~hpolicy:`AUTOMATIC ~vpolicy:`AUTOMATIC () in
|
let sw = GBin.scrolled_window ~hpolicy:`AUTOMATIC ~vpolicy:`AUTOMATIC () in
|
||||||
let vbox = GPack.vbox ~packing:sw#add_with_viewport () in
|
let vbox = GPack.vbox ~packing:sw#add_with_viewport () in
|
||||||
let tooltips = GData.tooltips () in
|
let tooltips = GData.tooltips () in
|
||||||
let i = ref 0 and l = ref [] in
|
let i = ref 0 and l = ref [] in
|
||||||
let current_values =
|
let current_values =
|
||||||
build_settings do_change i l xml_settings vbox#add tooltips;
|
build_settings do_change i l xml_settings vbox#add tooltips strip;
|
||||||
Array.of_list (List.rev !l) in
|
Array.of_list (List.rev !l) in
|
||||||
object (self)
|
object (self)
|
||||||
method widget = sw#coerce
|
method widget = sw#coerce
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ class pfd : ?visible:(GBin.frame -> bool) -> GBin.frame ->
|
|||||||
method set_attitude : float -> float -> unit
|
method set_attitude : float -> float -> unit
|
||||||
end
|
end
|
||||||
|
|
||||||
class settings : ?visible:(GObj.widget -> bool) -> Xml.xml list -> (int -> float -> unit) ->
|
class settings : ?visible:(GObj.widget -> bool) -> Xml.xml list -> (int -> float -> unit) -> Strip.t ->
|
||||||
object
|
object
|
||||||
method length : int
|
method length : int
|
||||||
method set : int -> float -> unit
|
method set : int -> float -> unit
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ let table = GPack.table ~rows: 1 ~columns: 1 ~row_spacings: 5 ~packing: (scrolle
|
|||||||
|
|
||||||
type t = {
|
type t = {
|
||||||
gauge: GRange.progress_bar ;
|
gauge: GRange.progress_bar ;
|
||||||
labels: (string * (GBin.event_box * GMisc.label)) list
|
labels: (string * (GBin.event_box * GMisc.label)) list;
|
||||||
|
buttons_box : GPack.box
|
||||||
}
|
}
|
||||||
|
|
||||||
let labels_name = [|
|
let labels_name = [|
|
||||||
@@ -42,7 +43,8 @@ let add config color select center_ac commit_moves mark =
|
|||||||
|
|
||||||
(* frame of the strip *)
|
(* frame of the strip *)
|
||||||
let frame = GBin.frame ~shadow_type: `IN ~packing: (widget#attach ~top: (strip_number) ~left: 0) () in
|
let frame = GBin.frame ~shadow_type: `IN ~packing: (widget#attach ~top: (strip_number) ~left: 0) () in
|
||||||
let strip = GPack.table ~rows:2 ~columns: 2 ~col_spacings: 10 ~packing: frame#add () in
|
let framevb = GPack.vbox ~packing:frame#add () in
|
||||||
|
let strip = GPack.table ~rows:2 ~columns: 2 ~col_spacings: 10 ~packing: framevb#add () in
|
||||||
ignore (GMisc.label ~text: (ac_name) ~packing: (strip#attach ~top: 0 ~left: 0) ());
|
ignore (GMisc.label ~text: (ac_name) ~packing: (strip#attach ~top: 0 ~left: 0) ());
|
||||||
|
|
||||||
let plane_color = GBin.event_box ~width:10 ~height:10 ~packing:(strip#attach ~top:0 ~left: 1) () in
|
let plane_color = GBin.event_box ~width:10 ~height:10 ~packing:(strip#attach ~top:0 ~left: 1) () in
|
||||||
@@ -87,7 +89,9 @@ let add config color select center_ac commit_moves mark =
|
|||||||
ignore (b#connect#clicked ~callback:commit_moves);
|
ignore (b#connect#clicked ~callback:commit_moves);
|
||||||
let b = GButton.button ~label:"Mark" ~packing:(left_box#attach ~top:4 ~left:4 ~right:6) () in
|
let b = GButton.button ~label:"Mark" ~packing:(left_box#attach ~top:4 ~left:4 ~right:6) () in
|
||||||
ignore (b#connect#clicked ~callback:mark);
|
ignore (b#connect#clicked ~callback:mark);
|
||||||
{gauge=pb ; labels= !strip_labels}
|
|
||||||
|
let hbox = GPack.hbox ~packing:framevb#add () in
|
||||||
|
{gauge=pb ; labels= !strip_labels; buttons_box = hbox}
|
||||||
|
|
||||||
|
|
||||||
(** set a label *)
|
(** set a label *)
|
||||||
@@ -107,3 +111,6 @@ let set_bat strip value =
|
|||||||
let f = max 0. (min 1. f) in
|
let f = max 0. (min 1. f) in
|
||||||
strip.gauge#set_fraction f
|
strip.gauge#set_fraction f
|
||||||
|
|
||||||
|
|
||||||
|
let add_widget = fun strip widget ->
|
||||||
|
strip.buttons_box#add widget
|
||||||
|
|||||||
@@ -7,3 +7,4 @@ val set_label : t -> string -> string -> unit
|
|||||||
val set_color : t -> string -> string -> unit
|
val set_color : t -> string -> string -> unit
|
||||||
val set_bat : t -> float -> unit
|
val set_bat : t -> float -> unit
|
||||||
val scrolled : GBin.scrolled_window
|
val scrolled : GBin.scrolled_window
|
||||||
|
val add_widget : t -> GObj.widget -> unit
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ let update_xml = fun xml_tree utm0 wp id ->
|
|||||||
if wp#deleted then begin
|
if wp#deleted then begin
|
||||||
XmlEdit.delete node
|
XmlEdit.delete node
|
||||||
end else
|
end else
|
||||||
let utm = utm_of WGS84 (wp#pos) in
|
let utm = utm_of WGS84 wp#pos in
|
||||||
try
|
try
|
||||||
let (dx, dy) = utm_sub utm utm0 in
|
let (dx, dy) = utm_sub utm utm0 in
|
||||||
XmlEdit.set_attribs node ["name",wp#name; "x",sof dx; "y",sof dy; "alt", sof wp#alt]
|
XmlEdit.set_attribs node ["name",wp#name; "x",sof dx; "y",sof dy; "alt", sof wp#alt]
|
||||||
|
|||||||
Reference in New Issue
Block a user