1 package net.systemeD.halcyon {
3 import flash.display.*;
5 import flash.text.AntiAliasType;
6 import flash.text.GridFitType;
7 import flash.text.TextField;
8 import flash.text.TextFormat;
9 import net.systemeD.halcyon.connection.Node;
10 import net.systemeD.halcyon.styleparser.*;
12 public class POI extends Object {
14 private var node:Node;
15 public var map:Map; // reference to parent map
16 public var icon:Bitmap; // instance in display list
17 public var name:Sprite; // |
18 private var iconname:String=''; // name of icon
20 public static const DEFAULT_TEXTFIELD_PARAMS:Object = {
22 antiAliasType: AntiAliasType.ADVANCED,
23 gridFitType: GridFitType.NONE
25 // [Embed(source="fonts/DejaVuSans.ttf", fontFamily="DejaVu", fontWeight="normal", mimeType="application/x-font-truetype")]
26 // public static var DejaVu:Class;
28 public function POI(node:Node, map:Map) {
34 public function redraw():void {
35 var tags:Object = node.getTagsCopy();
36 // ** apply :hover etc.
37 var sl:StyleList=map.ruleset.getStyles(this.node,tags);
38 var r:Boolean=false; // ** rendered
40 for (var sublayer:uint=0; sublayer<10; sublayer++) {
42 if (sl.pointStyles[sublayer]) {
43 var s:PointStyle=sl.pointStyles[sublayer];
44 // if ((s is PointStyle) && s.icon && s.icon!="")
46 if (s.icon_image!=iconname) {
47 // 'load' icon (actually just from library)
48 if (map.ruleset.images[s.icon_image]) {
49 // l=map.getChildAt(map.POISPRITE);
50 // Sprite(l).addChild(map.ruleset.images[s.icon_image]);
51 var loader:Loader = new Loader();
52 loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadedIcon);
53 loader.loadBytes(map.ruleset.images[s.icon_image]);
54 iconname=s.icon_image;
57 // already loaded, so just reposition
59 iconname=s.icon_image;
63 if (sl.textStyles[sublayer]) {
64 var t:TextStyle=sl.textStyles[sublayer];
65 // if ((s is TextStyle) && s.tag && tags[s.tag])
69 var c:DisplayObject=map.getChildAt(map.NAMESPRITE);
70 Sprite(c).addChild(name);
72 t.writeNameLabel(name,tags[t.text],map.lon2coord(node.lon),map.latp2coord(node.latp));
75 if (!r && iconname!='') {
76 // not rendered any more, so remove
77 l=map.getChildAt(map.POISPRITE);
78 Sprite(l).removeChild(icon);
83 private function loadedIcon(event:Event):void {
84 icon = Bitmap(event.target.content);
85 var l:DisplayObject=map.getChildAt(map.POISPRITE);
86 Sprite(l).addChild(icon);
90 private function updatePosition():void {
91 icon.x=map.lon2coord(node.lon)-icon.width/2;
92 icon.y=map.latp2coord(node.latp)-icon.height/2;