}
for each (poi in o.poisInside) {
- if (!nodeuis[poi.id]) { createNodeUI(poi); }
+ if (!nodeuis[poi.id]) { createNodeUI(poi,true); }
else if (redraw) { nodeuis[poi.id].redraw(); }
}
}
/** Make a UI object representing a node. */
- public function createNodeUI(node:Node,rotation:Number=0,layer:int=NO_LAYER,stateClasses:Object=null):NodeUI {
+ public function createNodeUI(node:Node,isPOI:Boolean,rotation:Number=0,layer:int=NO_LAYER,stateClasses:Object=null):NodeUI {
if (!nodeuis[node.id]) {
- nodeuis[node.id]=new NodeUI(node,this,rotation,layer,stateClasses);
+ nodeuis[node.id]=new NodeUI(node,this,isPOI,rotation,layer,stateClasses);
node.addEventListener(Connection.NODE_DELETED, nodeDeleted);
} else {
+ nodeuis[node.id].isPOI=isPOI;
for (var state:String in stateClasses) {
nodeuis[node.id].setStateClass(state,stateClasses[state]);
}
/** Redraw all entities */
public function redraw():void {
for each (var w:WayUI in wayuis) { w.recalculate(); w.invalidateStyleList(); w.redraw(); }
- /* sometimes (e.g. in Map.setStyle) Mappaint.redrawPOIs() is called immediately afterwards anyway. FIXME? */
- for each (var p:NodeUI in nodeuis) { p.invalidateStyleList(); p.redraw(); }
- for each (var m:MarkerUI in markeruis) { m.invalidateStyleList(); m.redraw(); }
+ for each (var p:NodeUI in nodeuis) { if (p.isPOI) { p.invalidateStyleList(); p.redraw(); } }
+ for each (var m:MarkerUI in markeruis) { m.invalidateStyleList(); m.redraw(); }
}
/** Redraw nodes and markers only */
public function redrawPOIs():void {
- for each (var p:NodeUI in nodeuis) { p.invalidateStyleList(); p.redraw(); }
- for each (var m:MarkerUI in markeruis) { m.invalidateStyleList(); m.redraw(); }
+ for each (var p:NodeUI in nodeuis) { if (p.isPOI) { p.invalidateStyleList(); p.redraw(); } }
+ for each (var m:MarkerUI in markeruis) { m.invalidateStyleList(); m.redraw(); }
}
/** Redraw a single entity if it exists */
private function newPOICreatedListener(event:EntityEvent):void {
var node:Node = event.entity as Node;
if (!node.within(map.edge_l, map.edge_r, map.edge_t, map.edge_b)) { return; }
- createNodeUI(node);
+ createNodeUI(node,true);
}
private function newMarkerCreatedListener(event:EntityEvent):void {
public class NodeUI extends EntityUI {
public var loaded:Boolean=false;
+ public var isPOI:Boolean;
private var iconnames:Object={}; // name of icon on each subpart
private var heading:Number=0; // heading within way
private var rotation:Number=0; // rotation applied to this POI
* @param heading Optional angle.
* @param layer Which layer on the MapPaint object it sits on. @default Top layer
* @param stateClasses A settings object definining the initial state of the node (eg, highlighted, hover...) */
- public function NodeUI(node:Node, paint:MapPaint, heading:Number=0, layer:int=NO_LAYER, stateClasses:Object=null) {
+ public function NodeUI(node:Node, paint:MapPaint, isPOI:Boolean, heading:Number=0, layer:int=NO_LAYER, stateClasses:Object=null) {
super(node,paint);
if (layer==NO_LAYER) { this.layer=paint.maxlayer; } else { this.layer=layer; }
+ this.isPOI=isPOI;
this.heading = heading;
if (stateClasses) {
for (var state:String in stateClasses) {
tags=applyStateClasses(tags);
if (entity.status) { tags['_status']=entity.status; }
if (!styleList || !styleList.isValidAt(paint.map.scale)) {
- styleList=paint.ruleset.getStyles(entity,tags,paint.map.scale);
+ styleList=paint.ruleset.getStyles(entity,tags,paint.map.scale,isPOI);
}
var suggestedLayer:Number=styleList.layerOverride();
// else { nodetags['_heading']=(heading[i]+heading[i-1])/2; }
// ** FIXME - heading isn't currently applied
nodeStateClasses['junction']=(node.numParentWays>1);
- paint.createNodeUI(node,r,layer,nodeStateClasses);
+ paint.createNodeUI(node,false,r,layer,nodeStateClasses);
}
if (!drawn) { return false; } // If not visible, no hitzone.
}
/** Create a StyleList for an Entity, by creating a blank StyleList, then running each StyleChooser over it.
+ Optionally, styleUntagged can be set to false, to abort (and return a blank StyleList) if the tag hash is empty.
@see net.systemeD.halcyon.styleparser.StyleList */
- public function getStyles(obj:Entity, tags:Object, zoom:uint):StyleList {
+ public function getStyles(obj:Entity, tags:Object, zoom:uint, styleUntagged:Boolean=true):StyleList {
var sl:StyleList=new StyleList();
- for each (var sc:StyleChooser in choosers) {
- sc.updateStyles(obj,tags,sl,zoom);
+ var tagged:Boolean=styleUntagged;
+ for (var k:String in tags) { tagged=true; break; }
+ if (tagged) {
+ for each (var sc:StyleChooser in choosers) {
+ sc.updateStyles(obj,tags,sl,zoom);
+ }
}
return sl;
}