1
0
Fork 0
fgdata/Nasal/canvas/map/HOLD.lcontroller

100 lines
2.8 KiB
Text

# See: http://wiki.flightgear.org/MapStructure
# Class things:
var name = 'HOLD';
var parents = [canvas.SymbolLayer.Controller];
var __self__ = caller(0)[0];
canvas.SymbolLayer.Controller.add(name, __self__);
canvas.SymbolLayer.add(name, {
parents: [MultiSymbolLayer],
type: name, # Symbol type
df_controller: __self__, # controller to use by default -- this one
});
var new = func(layer) {
var m = {
parents: [__self__],
layer: layer,
#map: layer.map,
listeners: [],
};
#debug.dump(layer.parents);
layer.searcher._equals = func(a,b) a.id == b.id;
#append(m.listeners, setlistener(layer.options.fplan_active, func m.layer.update() ));
#m.addVisibilityListener();
return m;
};
var del = func() {
foreach (var l; me.listeners)
removelistener(l);
};
var searchCmd = func {
var results = [];
var node = props.globals.getNode(me.layer.options.hold_node);
var wp_id = node.getValue('wp');
if(wp_id == nil or wp_id == '' or wp_id == '---'){
return [];
}
var pointsNode = node.getNode('points');
var pointNode = nil;
var lat = nil;
var lon = nil;
if(pointsNode != nil)
pointNode = pointsNode.getNode('point', 0);
if (pointNode != nil){
lat = pointNode.getValue('lat');
lon = pointNode.getValue('lon');
}
if (pointNode != nil and lat != nil and lon != nil){
var r = node.getValue('crs');
var d = node.getValue('dist');
var t = node.getValue('turn');
var model = {
parents: [geo.Coord],
id: wp_id~r~d~t,
pos: pointNode,
type: 'pattern',
latlon: func(){
return [
lat,
lon
];
},
radial: r,
dist: d,
turn: t,
equals: func(o){me.id == o.id and me.radial == o.radial}
};
append(results, model);
} else {
var wp_idx = node.getValue('wp_id');
var fp = flightplan();
var wp = fp.getWP(wp_idx);
#print("HOLD AT "~wp.wp_lat~", "~wp.wp_lon);
if(wp == nil or wp.id != wp_id)
return [];
var wp_lat = wp.wp_lat;
var wp_lon = wp.wp_lon;
var model = {
parents: [geo.Coord],
id: wp_id~'-'~wp_idx~'-inactive',
pos: nil,
type: 'hold_symbol',
latlon: func(){
return [
wp_lat,
wp_lon
];
},
radial: node.getValue('crs'),
dist: node.getValue('dist'),
turn: node.getValue('turn'),
equals: func(o){me.id == o.id}
};
append(results, model);
}
return results;
}