[ create a new paste ] login | about

Link: http://codepad.org/ZapPq1My    [ raw code | fork ]

Plain Text, pasted on Feb 5:
diff --git a/Nasal/canvas/MapStructure.nas b/Nasal/canvas/MapStructure.nas
index 0afdcd2..326dd85 100644
--- a/Nasal/canvas/MapStructure.nas
+++ b/Nasal/canvas/MapStructure.nas
@@ -180,7 +180,8 @@ var getpos_fromghost = func(positioned_g)
 # (geo.Coord and positioned ghost currently)
 Symbol.Controller.getpos = func(obj) {
 	if (typeof(obj) == 'ghost')
-		if (ghosttype(obj) == 'positioned' or ghosttype(obj) == 'Navaid' or ghosttype(obj)=='Fix' or ghosttype(obj)=='flightplan-leg')
+		# FIXME: use a foreach/vector here ?
+		if (ghosttype(obj) == 'positioned' or ghosttype(obj) == 'Navaid' or ghosttype(obj)=='Fix' or ghosttype(obj)=='flightplan-leg' or ghosttype(obj)=='FGAirport' )
 			return getpos_fromghost(obj);
 		else
 			die("bad ghost of type '"~ghosttype(obj)~"'");
@@ -480,7 +481,8 @@ var load_MapStructure = func {
 		load(FG_ROOT~"/Nasal/canvas/map/"~name~".scontroller", name);
 		}
 
-		foreach( var name; ['VOR','FIX','NDB','DME','WPT','TFC'] )
+		# add your own MapStructure layers here, see the wiki for details
+		foreach( var name; ['APT','VOR','FIX','NDB','DME','WPT','TFC',] )
 			load_deps( name );
 		load(FG_ROOT~"/Nasal/canvas/map/aircraftpos.controller", name);
 
diff --git a/Nasal/canvas/map/APT.lcontroller b/Nasal/canvas/map/APT.lcontroller
new file mode 100644
index 0000000..32c2a93
--- /dev/null
+++ b/Nasal/canvas/map/APT.lcontroller
@@ -0,0 +1,31 @@
+# Class things:
+var name = 'APT';
+var parents = [SymbolLayer.Controller];
+var __self__ = caller(0)[0];
+SymbolLayer.Controller.add(name, __self__);
+SymbolLayer.add(name, {
+	parents: [SymbolLayer],
+	type: name, # Symbol type
+	df_controller: __self__, # controller to use by default -- this one
+});
+var a_instance = nil;
+var new = func(layer) {
+	var m = {
+		parents: [__self__],
+		layer: layer,
+		listeners: [],
+	};
+	__self__.a_instance = m;
+	return m;
+};
+var del = func() {
+	#print(name,".lcontroller.del()");
+	foreach (var l; me.listeners)
+		removelistener(l);
+};
+
+var searchCmd = func {
+	#print("Running query:", name);
+	return positioned.findAirportsWithinRange( me.query_range() ); # FIXME: the range should also be exposed, it will typically be controlled via a GUI widget or NavDisplay switch
+};
+
diff --git a/Nasal/canvas/map/APT.scontroller b/Nasal/canvas/map/APT.scontroller
new file mode 100644
index 0000000..1248bc4
--- /dev/null
+++ b/Nasal/canvas/map/APT.scontroller
@@ -0,0 +1,12 @@
+# Class things:
+var name = 'APT';
+var parents = [Symbol.Controller];
+var __self__ = caller(0)[0];
+Symbol.Controller.add(name, __self__);
+Symbol.registry[ name ].df_controller = __self__;
+var new = func(model) ; # this controller doesn't need an instance
+var LayerController = SymbolLayer.Controller.registry[ name ];
+var isActive = func(model) LayerController.a_instance.isActive(model);
+var query_range = func()
+	die( name~".scontroller.query_range /MUST/ be provided by implementation" );
+
diff --git a/Nasal/canvas/map/APT.symbol b/Nasal/canvas/map/APT.symbol
new file mode 100644
index 0000000..105d969
--- /dev/null
+++ b/Nasal/canvas/map/APT.symbol
@@ -0,0 +1,51 @@
+# Class things:
+var name = 'APT';
+var parents = [DotSym];
+var __self__ = caller(0)[0];
+DotSym.makeinstance( name, __self__ );
+
+var element_type = "group"; # we want a group, becomes "me.element"
+var icon_fix = nil;
+var text_fix = nil;
+
+# add the draw routine from airports-nd.draw here
+var draw = func {
+	if (me.icon_fix != nil) return;
+		var icon_apt = me.element.createChild("path", name ~ " icon" )
+			.moveTo(-17,0)
+			.arcSmallCW(17,17,0,34,0)
+			.arcSmallCW(17,17,0,-34,0)
+			.close()
+			.setColor(0,0.6,0.85)
+			.setStrokeLineWidth(3);
+		var text_apt = me.element.createChild("text", name ~ " label")
+			.setDrawMode( canvas.Text.TEXT )
+			.setTranslation(17,35)
+			.setText(me.model.id)
+			.setFont("LiberationFonts/LiberationSans-Regular.ttf")
+			.setColor(0,0.6,0.85)
+			.setFontSize(28);
+		#me.element.setGeoPosition(lat, lon)
+		#	.set("z-index",1); # FIXME: this needs to be configurable!!
+
+# disabled:
+if(0) {
+	# the fix symbol
+	me.icon_fix = me.element.createChild("path")
+		.moveTo(-15,15)
+		.lineTo(0,-15)
+		.lineTo(15,15)
+		.close()
+		.setStrokeLineWidth(3)
+		.setColor(0,0.6,0.85)
+		.setScale(0.5,0.5); # FIXME: do proper LOD handling here - we need to scale according to current texture dimensions vs. original/design dimensions
+	# the fix label
+	me.text_fix = me.element.createChild("text")
+		.setDrawMode( canvas.Text.TEXT )
+		.setText(me.model.id)
+		.setFont("LiberationFonts/LiberationSans-Regular.ttf")
+		.setFontSize(28)
+		.setTranslation(5,25);
+ }
+};
+
diff --git a/Nasal/canvas/map/DME.lcontroller b/Nasal/canvas/map/DME.lcontroller
index b2d3c71..3ac267d 100644
--- a/Nasal/canvas/map/DME.lcontroller
+++ b/Nasal/canvas/map/DME.lcontroller
@@ -14,7 +14,7 @@ var new = func(layer) {
 		parents: [__self__],
 		layer: layer,
 		listeners: [],
-		query_range_nm: 25,
+		# query_range_nm: 25,
 		query_type:'dme',
 	};
 	__self__.a_instance = m;
@@ -27,6 +27,6 @@ var del = func() {
 
 var searchCmd = func {
 	#print("Running query:", me.query_type);
-	return positioned.findWithinRange(me.query_range_nm, me.query_type); # the range should also be exposed, it will typically be controlled via a GUI widget or NavDisplay switch
+	return positioned.findWithinRange(me.query_range(), me.query_type); # the range should also be exposed, it will typically be controlled via a GUI widget or NavDisplay switch
 };
 
diff --git a/Nasal/canvas/map/FIX.lcontroller b/Nasal/canvas/map/FIX.lcontroller
index ed89fb0..4da89e4 100644
--- a/Nasal/canvas/map/FIX.lcontroller
+++ b/Nasal/canvas/map/FIX.lcontroller
@@ -14,7 +14,7 @@ var new = func(layer) {
 		parents: [__self__],
 		layer: layer,
 		listeners: [],
-		query_range_nm: 25,
+		#query_range_nm: 25,
 		query_type:'fix',
 	};
 	__self__.a_instance = m;
@@ -28,6 +28,6 @@ var del = func() {
 
 var searchCmd = func {
 	#print("Running query:", me.query_type);
-	return positioned.findWithinRange(me.query_range_nm, me.query_type); # the range should also be exposed, it will typically be controlled via a GUI widget or NavDisplay switch
+	return positioned.findWithinRange(me.query_range(), me.query_type); # the range should also be exposed, it will typically be controlled via a GUI widget or NavDisplay switch
 };
 
diff --git a/Nasal/canvas/map/NDB.lcontroller b/Nasal/canvas/map/NDB.lcontroller
index 3250fc0..605525d 100644
--- a/Nasal/canvas/map/NDB.lcontroller
+++ b/Nasal/canvas/map/NDB.lcontroller
@@ -13,7 +13,7 @@ var new = func(layer) {
 		parents: [__self__],
 		layer: layer,
 		listeners: [],
-		query_range_nm: 25,
+		#query_range_nm: 25,
 		query_type:'ndb',
 	};
 	return m;
@@ -25,6 +25,6 @@ var del = func() {
 
 var searchCmd = func {
 	#print("Running query:", me.query_type);
-	return positioned.findWithinRange(me.query_range_nm, me.query_type); # the range should also be exposed, it will typically be controlled via a GUI widget or NavDisplay switch
+	return positioned.findWithinRange(me.query_range(), me.query_type); # the range should also be exposed, it will typically be controlled via a GUI widget or NavDisplay switch
 };
 
diff --git a/Nasal/canvas/map/VOR.lcontroller b/Nasal/canvas/map/VOR.lcontroller
index e7adb3d..b393387 100644
--- a/Nasal/canvas/map/VOR.lcontroller
+++ b/Nasal/canvas/map/VOR.lcontroller
@@ -50,6 +50,6 @@ var changed_freq = func(update=1) {
 };
 var searchCmd = func {
 	printlog(_MP_dbg_lvl, "Running query:", me.query_type);
-	return positioned.findWithinRange(100, me.query_type); # the range should also be exposed, it will typically be controlled via a GUI widget or NavDisplay switch
+	return positioned.findWithinRange(me.query_range(), me.query_type); # FIXME: the range should also be exposed, it will typically be controlled via a GUI widget or NavDisplay switch
 };
 
diff --git a/Nasal/canvas/map/navdisplay.mfd b/Nasal/canvas/map/navdisplay.mfd
index 8b14ebd..f5bcc46 100644
--- a/Nasal/canvas/map/navdisplay.mfd
+++ b/Nasal/canvas/map/navdisplay.mfd
@@ -89,7 +89,7 @@ var NDStyles = {
 					} layer._view.setVisible(visible);
 				},
 			},
-			{ name:'airports-nd', update_on:['toggle_range','toggle_airports','toggle_display_mode'],
+			{ name:'airports-nd', disabled:1, update_on:['toggle_range','toggle_airports','toggle_display_mode'],
 				predicate: func(nd, layer) {
 					# print("Running airports-nd predicate");
 					var visible = nd.get_switch('toggle_airports') and nd.in_mode('toggle_display_mode', ['MAP']);
@@ -100,6 +100,20 @@ var NDStyles = {
 				}, # end of layer update predicate
 			}, # end of airports layer
 
+			{ name:'APT', isMapStructure:1, update_on:['toggle_range','toggle_airports','toggle_display_mode'],
+				predicate: func(nd, layer) {
+					# print("Running APT layer predicate");
+					# toggle visibility here
+					var visible=nd.get_switch('toggle_airports') and nd.in_mode('toggle_display_mode', ['MAP']);
+					layer.group.setVisible( nd.get_switch('toggle_airports') );
+					if (visible) {
+						#print("Updating MapStructure ND layer: APT");
+						# (Hopefully) smart update
+						layer.update();
+					}
+				}, # end of layer update predicate
+			}, # end of APT layer
+	
 			# Should distinct between low and high altitude navaids. Hiding above 40 NM for now, to prevent clutter/lag.
 			{ name:'vor', disabled:1, update_on:['toggle_range','toggle_stations','toggle_display_mode'],
 				predicate: func(nd, layer) {
@@ -883,7 +897,12 @@ var NavDisplay = {
 			get_position: get_current_position,
 		};
 
-		# FIXME: MapStructure: big hack
+		# FIXME: MapStructure: big hack @Philosopher: I don't think we need both lines here ??
+		foreach(var hack; var monster_hack = ['APT', 'DME','FIX','NDB','VOR',]) {
+			canvas.SymbolLayer.Controller.get( hack ).query_range = controller.query_range;
+			canvas.Symbol.Controller.get( hack ).query_range = controller.query_range;
+		}
+
 		canvas.Symbol.Controller.get("VOR").query_range = controller.query_range;
 		canvas.Symbol.Controller.get("VOR").get_tuned_course = controller.get_tuned_course;
 		canvas.Symbol.Controller.get("DME").is_tuned = controller.is_tuned;



Create a new paste based on this one


Comments: