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.connection.Connection;
11 import net.systemeD.halcyon.styleparser.*;
13 public class POI extends Object {
15 private var node:Node;
16 public var map:Map; // reference to parent map
17 public var icon:Sprite; // instance in display list
18 public var name:Sprite; // |
19 private var iconname:String=''; // name of icon
20 public var loaded:Boolean=false;
22 public static const DEFAULT_TEXTFIELD_PARAMS:Object = {
24 antiAliasType: AntiAliasType.ADVANCED,
25 gridFitType: GridFitType.NONE
27 // [Embed(source="fonts/DejaVuSans.ttf", fontFamily="DejaVu", fontWeight="normal", mimeType="application/x-font-truetype")]
28 // public static var DejaVu:Class;
30 public function POI(node:Node, map:Map, sl:StyleList=null) {
34 node.addEventListener(Connection.NODE_MOVED, nodeMoved);
37 public function nodeMoved(event:Event):void {
41 public function redraw(sl:StyleList=null):Boolean {
42 var tags:Object = node.getTagsCopy();
43 // ** apply :hover etc.
44 if (!sl) { sl=map.ruleset.getStyles(this.node,tags); }
45 if (!sl.hasStyles() && iconname=='') { return false; }
47 var r:Boolean=false; // ** rendered
49 for (var sublayer:uint=0; sublayer<10; sublayer++) {
51 if (sl.pointStyles[sublayer]) {
52 var s:PointStyle=sl.pointStyles[sublayer];
54 if (s.icon_image!=iconname) {
55 // 'load' icon (actually just from library)
56 if (map.ruleset.images[s.icon_image]) {
57 var loader:Loader = new Loader();
58 loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadedIcon);
59 loader.loadBytes(map.ruleset.images[s.icon_image]);
60 iconname=s.icon_image;
63 // already loaded, so just reposition
68 if (sl.textStyles[sublayer]) {
69 var t:TextStyle=sl.textStyles[sublayer];
73 var c:DisplayObject=map.getChildAt(map.NAMESPRITE);
74 Sprite(c).addChild(name);
76 t.writeNameLabel(name,tags[t.text],map.lon2coord(node.lon),map.latp2coord(node.latp));
79 if (!r && iconname!='') {
80 // not rendered any more, so remove
81 l=map.getChildAt(map.POISPRITE);
82 Sprite(l).removeChild(icon);
88 private function loadedIcon(event:Event):void {
90 icon.addChild(Bitmap(event.target.content));
91 var l:DisplayObject=map.getChildAt(map.POISPRITE);
92 Sprite(l).addChild(icon);
96 icon.addEventListener(MouseEvent.CLICK, mouseEvent);
97 icon.addEventListener(MouseEvent.DOUBLE_CLICK, mouseEvent);
98 icon.addEventListener(MouseEvent.MOUSE_OVER, mouseEvent);
99 icon.addEventListener(MouseEvent.MOUSE_OUT, mouseEvent);
100 icon.addEventListener(MouseEvent.MOUSE_DOWN, mouseEvent);
101 icon.addEventListener(MouseEvent.MOUSE_UP, mouseEvent);
102 icon.addEventListener(MouseEvent.MOUSE_MOVE, mouseEvent);
103 icon.buttonMode = true;
104 icon.mouseEnabled = true;
108 private function mouseEvent(event:MouseEvent):void {
109 map.entityMouseEvent(event, node);
112 private function updatePosition():void {
113 if (!loaded) { return; }
114 icon.x=map.lon2coord(node.lon)-icon.width/2;
115 icon.y=map.latp2coord(node.latp)-icon.height/2;