Howto:Prototyping a new NavDisplay Style: Difference between revisions

Jump to navigation Jump to search
m
Line 42: Line 42:
== Base Package changes ==
== Base Package changes ==


<syntaxhighlight lang="diff">
<syntaxhighlight lang="diff">diff --git a/Nasal/canvas/api.nas b/Nasal/canvas/api.nas
index ea67217..8fd77e5 100644
--- a/Nasal/canvas/api.nas
+++ b/Nasal/canvas/api.nas
@@ -462,7 +462,7 @@ var Map = {
  },
  del: func()
  {
-    #print("canvas.Map.del()");
+    # print("canvas.Map.del()");
    if (me.controller != nil)
      me.controller.del(me);
    foreach (var k; keys(me.layers)) {
diff --git a/Nasal/canvas/map/navdisplay.mfd b/Nasal/canvas/map/navdisplay.mfd
index d2d2ef5..f811f16 100644
--- a/Nasal/canvas/map/navdisplay.mfd
+++ b/Nasal/canvas/map/navdisplay.mfd
@@ -106,6 +106,7 @@ var NavDisplay = {
removelistener(l);
# clean up MapStructure
me.map.del();
+ # call(canvas.Map.del, [], me.map);
# destroy the canvas
if (me.canvas_handle != nil)
me.canvas_handle.del();
@@ -253,7 +254,7 @@ var NavDisplay = {
me.df_options = nil;
if (contains(me.nd_style, 'options'))
me.df_options = me.nd_style.options;
- nd_options = default_hash(nd_options, me.df_options);
+ nd_options = canvas.default_hash(nd_options, me.df_options);
me.options = nd_options;
me.route_driver = nil;
if (me.options == nil) me.options = {};
@@ -275,22 +276,9 @@ var NavDisplay = {
if(contains(feature.impl,'init')) feature.impl.init(me.nd, feature); # call The element's init code (i.e. updateCenter)
}
- ### this is the "old" method that's less flexible, we want to use the style hash instead (see above)
- # because things are much better configurable that way
- # now look up all required SVG elements and initialize member fields using the same name  to have a convenient handle
- foreach(var element; ["dmeLDist","dmeRDist","dmeL","dmeR","vorL","vorR","vorLId","vorRId",
-                       "status.wxr","status.wpt","status.sta","status.arpt"])
- me.symbols[element] = me.nd.getElementById(element);
+ me.nd_style.initialize_elements(me);
- # load elements from vector image, and create instance variables using identical names, and call updateCenter() on each
- # anything that needs updatecenter called, should be added to the vector here
- #
- foreach(var element; ["staArrowL2","staArrowR2","staFromL2","staToL2","staFromR2","staToR2",
-                       "hdgTrk","trkInd","hdgBug","HdgBugCRT","TrkBugLCD","HdgBugLCD","curHdgPtr",
-                       "HdgBugCRT2","TrkBugLCD2","HdgBugLCD2","hdgBug2","selHdgLine","selHdgLine2","curHdgPtr2",
-                       "staArrowL","staArrowR","staToL","staFromL","staToR","staFromR"] )
- me.symbols[element] = me.nd.getElementById(element).updateCenter();
-
+
var map_rect = [124, 1024, 1024, 0];
var map_opts = me.options['map'];
if (map_opts == nil) map_opts = {};
@@ -342,6 +330,7 @@ var NavDisplay = {
get_tuned_course:get_course_by_freq,
get_position: get_current_position,
new: func(map) return { parents:[controller], map:map },
+ del: func() {print("cleaning up nd controller");},
should_update_all: func {
# TODO: this is just copied from aircraftpos.controller,
# it really should be moved to somewhere common and reused
@@ -386,12 +375,12 @@ var NavDisplay = {
if(!layer['isMapStructure']) # set up an old INEFFICIENT and SLOW layer
the_layer = me.layers[layer.name] = canvas.MAP_LAYERS[layer.name].new( me.map, layer.name, controller );
else {
- printlog(_MP_dbg_lvl, "Setting up MapStructure-based layer for ND, name:", layer.name);
+ printlog(canvas._MP_dbg_lvl, "Setting up MapStructure-based layer for ND, name:", layer.name);
var opt = me.options != nil and me.options[layer.name] != nil ? me.options[layer.name] : nil;
if (opt == nil and contains(layer, 'options'))
opt = layer.options;
if (opt != nil and default_opts != nil)
- opt = default_hash(opt, default_opts);
+ opt = canvas.default_hash(opt, default_opts);
#elsif(default_opts != nil)
#    opt = default_opts;
var style = nil;
@@ -420,7 +409,7 @@ var NavDisplay = {
l.predicate = func {
var t = systime();
call(_predicate, arg, me);
- printlog(_MP_dbg_lvl, "Took "~((systime()-t)*1000)~"ms to update layer "~l.name);
+ printlog(canvas._MP_dbg_lvl, "Took "~((systime()-t)*1000)~"ms to update layer "~l.name);
}
})();
}
@@ -805,7 +794,7 @@ var NavDisplay = {
me.symbols['status.arpt'].setVisible( me.get_switch('toggle_airports') and me.in_mode('toggle_display_mode', ['MAP']));
me.symbols['status.sta'].setVisible( me.get_switch('toggle_stations') and  me.in_mode('toggle_display_mode', ['MAP']));
# Okay, _how_ do we hook this up with FGPlot?
- printlog(_MP_dbg_lvl, "Total ND update took "~((systime()-_time)*100)~"ms");
+ printlog(canvas._MP_dbg_lvl, "Total ND update took "~((systime()-_time)*100)~"ms");
setprop("/instrumentation/navdisplay["~ NavDisplay.id ~"]/update-ms", systime() - _time);
} # of update() method (50% of our file ...seriously?)
};
diff --git a/Nasal/canvas/map/navdisplay.styles b/Nasal/canvas/map/navdisplay.styles
index 7712727..52751a2 100644
--- a/Nasal/canvas/map/navdisplay.styles
+++ b/Nasal/canvas/map/navdisplay.styles
@@ -34,6 +34,27 @@ var NDStyles = {
# aircraft developers should all be editing the same ND.svg image
# the code can deal with the differences now
svg_filename: "Nasal/canvas/map/Images/boeingND.svg",
+
+ initialize_elements: func(me) {
+
+ ### this is the "old" method that's less flexible, we want to use the style hash instead (see above)
+ # because things are much better configurable that way
+ # now look up all required SVG elements and initialize member fields using the same name  to have a convenient handle
+ foreach(var element; ["dmeLDist","dmeRDist","dmeL","dmeR","vorL","vorR","vorLId","vorRId",
+                       "status.wxr","status.wpt","status.sta","status.arpt"])
+ me.symbols[element] = me.nd.getElementById(element);
+
+ # load elements from vector image, and create instance variables using identical names, and call updateCenter() on each
+ # anything that needs updatecenter called, should be added to the vector here
+ #
+ foreach(var element; ["staArrowL2","staArrowR2","staFromL2","staToL2","staFromR2","staToR2",
+                       "hdgTrk","trkInd","hdgBug","HdgBugCRT","TrkBugLCD","HdgBugLCD","curHdgPtr",
+                       "HdgBugCRT2","TrkBugLCD2","HdgBugLCD2","hdgBug2","selHdgLine","selHdgLine2","curHdgPtr2",
+                       "staArrowL","staArrowR","staToL","staFromL","staToR","staFromR"] )
+ me.symbols[element] = me.nd.getElementById(element).updateCenter();
+
+ }, # initialize_elements
+
##
## this loads and configures existing layers (currently, *.layer files in Nasal/canvas/map)
##
@@ -1132,6 +1153,29 @@ var NDStyles = {
# aircraft developers should all be editing the same ND.svg image
# the code can deal with the differences now
svg_filename: "Nasal/canvas/map/Airbus/Images/airbusND.svg",
+
+ initialize_elements: func(me) {
+
+ ### this is the "old" method that's less flexible, we want to use the style hash instead (see above)
+ # because things are much better configurable that way
+ # now look up all required SVG elements and initialize member fields using the same name  to have a convenient handle
+ foreach(var element; ["dmeLDist","dmeRDist","dmeL","dmeR","vorL","vorR","vorLId","vorRId",
+                       "status.wxr","status.wpt","status.sta","status.arpt"])
+ me.symbols[element] = me.nd.getElementById(element);
+
+ # load elements from vector image, and create instance variables using identical names, and call updateCenter() on each
+ # anything that needs updatecenter called, should be added to the vector here
+ #
+ foreach(var element; ["staArrowL2","staArrowR2","staFromL2","staToL2","staFromR2","staToR2",
+                       "hdgTrk","trkInd","hdgBug","HdgBugCRT","TrkBugLCD","HdgBugLCD","curHdgPtr",
+                       "HdgBugCRT2","TrkBugLCD2","HdgBugLCD2","hdgBug2","selHdgLine","selHdgLine2","curHdgPtr2",
+                       "staArrowL","staArrowR","staToL","staFromL","staToR","staFromR"] )
+ me.symbols[element] = me.nd.getElementById(element).updateCenter();
+
+ }, # initialize_elements
+
+
+
##
## this loads and configures existing layers (currently, *.layer files in Nasal/canvas/map)
##
 
</syntaxhighlight>
</syntaxhighlight>


Navigation menu