+<?xml version="1.0" encoding="utf-8"?>
+<mx:VBox
+ xmlns:mx="http://www.adobe.com/2006/mxml"
+ xmlns:halcyon="net.systemeD.halcyon.*"
+ backgroundColor="white"
+ creationComplete="loadFeatures()">
+
+ <mx:ViewStack id="stack" width="100%" height="100%">
+
+ <mx:VBox width="100%" height="100%" label="Simple">
+ <mx:HBox borderStyle="solid" verticalAlign="middle" width="100%" paddingLeft="3">
+ <mx:Image id="iconImage"/>
+ <mx:Text condenseWhite="true" width="100%" id="iconText"/>
+ <mx:LinkButton label="?" click="openDescription()" id="helpLabel"/>
+ </mx:HBox>
+ </mx:VBox>
+
+ <mx:VBox width="100%" height="100%" label="Advanced" initialize="checkAdvanced()">
+ <mx:Label id="advancedID">
+ <mx:htmlText><![CDATA[<i>No Selection</i>]]></mx:htmlText>
+ </mx:Label>
+
+ <mx:DataGrid width="100%" height="100%" id="advancedTagGrid">
+ <mx:columns>
+ <mx:DataGridColumn dataField="key" headerText="Key"/>
+ <mx:DataGridColumn dataField="value" headerText="Value"/>
+ </mx:columns>
+ </mx:DataGrid>
+
+ <mx:Label text="Key: {advancedTagGrid.selectedItem.key}"/>
+ <mx:Label text="Value: {advancedTagGrid.selectedItem.value}"/>
+ </mx:VBox>
+
+ </mx:ViewStack>
+
+ <mx:LinkBar dataProvider="{stack}"/>
+
+ <mx:Script><![CDATA[
+ import net.systemeD.halcyon.connection.*;
+ import net.systemeD.halcyon.mapfeatures.*;
+
+ private var mapFeatures:MapFeatures;
+ private var selectedEntity:Entity;
+ private var variablesPattern:RegExp = /[$][{]([^}]+)[}]/g;
+
+ public function setEntity(entity:Entity):void {
+ this.selectedEntity = entity;
+
+ if ( advancedID != null )
+ setupAdvanced(entity);
+
+ var feature:XML = mapFeatures.findMatchingFeature(entity);
+ if ( feature != null )
+ setFeatureIcon(entity, feature);
+ else
+ blankFeatureIcon(entity);
+ }
+
+ private function setFeatureIcon(entity:Entity, feature:XML):void {
+ blankFeatureIcon(entity);
+
+ var icon:XMLList = feature.icon;
+ if ( icon.length == 0 )
+ return;
+
+ if ( icon[0].hasOwnProperty("@image") ) {
+ iconImage.source = icon.@image;
+ }
+
+ var txt:String = icon.children().toXMLString();
+ var replaceTag:Function = function():String {
+ var value:String = entity.getTag(arguments[1]);
+ return value == null ? "" : value;
+ };
+ txt = txt.replace(variablesPattern, replaceTag);
+ iconText.htmlText = "<i>"+feature.@name+"</i><br/>" + txt;
+ }
+
+ private function blankFeatureIcon(entity:Entity):void {
+ iconImage.source = null;
+ iconText.htmlText = entity == null ? "<i>Nothing selected</i>" : "<b>Not recognised</b><br/>Try looking at advanced";
+ }
+
+ private function checkAdvanced():void {
+ if ( selectedEntity != null )
+ setupAdvanced(selectedEntity);
+ }
+
+ private function setupAdvanced(entity:Entity):void {
+ var entityText:String = "xx";
+ if ( entity is Node ) entityText = "Node";
+ else if ( entity is Way ) entityText = "Way";
+ else if ( entity is Relation ) entityText = "Relation";
+ advancedID.htmlText = entityText+": <b>"+entity.id+"</b>";
+ advancedTagGrid.dataProvider = entity.getTagArray();
+ }
+
+ public function loadFeatures():void {
+ mapFeatures = MapFeatures.getInstance();
+ }
+
+ public function openDescription():void {
+ trace("open description here");
+ }
+ ]]></mx:Script>
+</mx:VBox>
+