1 package net.systemeD.halcyon {
3 import flash.display.*;
4 import flash.events.MouseEvent;
5 import flash.text.AntiAliasType;
6 import flash.text.GridFitType;
7 import net.systemeD.halcyon.Globals;
8 import net.systemeD.halcyon.styleparser.StyleList;
9 import net.systemeD.halcyon.connection.EntityEvent;
11 public class EntityUI {
13 protected var sprites:Array=new Array(); // instances in display list
14 protected var listenSprite:Sprite; // clickable sprite to receive events
15 protected var stateClasses:Object=new Object(); // special context-sensitive classes, e.g. :hover
16 protected var layer:int=0; // map layer
17 protected var suspended:Boolean=false; // suspend redrawing?
18 protected var redrawDue:Boolean=false; // redraw called while suspended?
19 protected var redrawStyleList:StyleList; // stylelist to be used when redrawing?
20 public var map:Map; // reference to parent map
22 protected const FILLSPRITE:uint=0;
23 protected const CASINGSPRITE:uint=1;
24 protected const STROKESPRITE:uint=2;
25 protected const NAMESPRITE:uint=3;
26 protected const NODESPRITE:uint=4;
27 protected const CLICKSPRITE:uint=5;
29 public static const DEFAULT_TEXTFIELD_PARAMS:Object = {
31 antiAliasType: AntiAliasType.ADVANCED,
32 gridFitType: GridFitType.NONE
35 public function EntityUI() {
38 // Add object (stroke/fill/roadname) to layer sprite
40 protected function addToLayer(s:DisplayObject,t:uint,sublayer:int=-1):void {
41 var l:DisplayObject=Map(map).getChildAt(map.WAYSPRITE+layer);
42 var o:DisplayObject=Sprite(l).getChildAt(t);
43 if (sublayer!=-1) { o=Sprite(o).getChildAt(sublayer); }
44 Sprite(o).addChild(s);
47 Sprite(s).mouseEnabled = false;
48 Sprite(s).mouseChildren = false;
52 public function removeSprites():void {
53 while (sprites.length>0) {
54 var d:DisplayObject=sprites.pop();
55 if (d.parent) { d.parent.removeChild(d); }
60 protected function createListenSprite(hitzone:Sprite):void {
61 if ( listenSprite == null ) {
62 listenSprite = new Sprite();
63 listenSprite.addEventListener(MouseEvent.CLICK, mouseEvent);
64 listenSprite.addEventListener(MouseEvent.DOUBLE_CLICK, mouseEvent);
65 listenSprite.addEventListener(MouseEvent.MOUSE_OVER, mouseEvent);
66 listenSprite.addEventListener(MouseEvent.MOUSE_OUT, mouseEvent);
67 listenSprite.addEventListener(MouseEvent.MOUSE_DOWN, mouseEvent);
68 listenSprite.addEventListener(MouseEvent.MOUSE_UP, mouseEvent);
69 listenSprite.addEventListener(MouseEvent.MOUSE_MOVE, mouseEvent);
71 listenSprite.hitArea = hitzone;
72 addToLayer(listenSprite, CLICKSPRITE);
73 listenSprite.buttonMode = true;
74 listenSprite.mouseEnabled = true;
77 protected function mouseEvent(event:MouseEvent):void {
80 public function setHighlight(stateType:String, isOn:*):void {
81 if ( isOn && stateClasses[stateType] == null ) {
82 stateClasses[stateType] = isOn;
83 } else if ( !isOn && stateClasses[stateType] != null ) {
84 delete stateClasses[stateType];
88 protected function applyStateClasses(tags:Object):Object {
89 for (var stateKey:String in stateClasses) {
90 tags[":"+stateKey] = 'yes';
97 public function redraw(sl:StyleList=null):Boolean {
98 if (suspended) { redrawStyleList=sl; redrawDue=true; return false; }
102 public function doRedraw(sl:StyleList):Boolean {
107 public function suspendRedraw(event:EntityEvent):void {
112 public function resumeRedraw(event:EntityEvent):void {
115 doRedraw(redrawStyleList);
117 redrawStyleList=null;