1 <?xml version="1.0" encoding="utf-8"?>
3 xmlns:mx="http://www.adobe.com/2006/mxml"
4 xmlns:halcyon="net.systemeD.halcyon.*"
5 backgroundColor="white"
6 creationComplete="loadFeatures()">
8 <mx:ViewStack id="stack" width="100%" height="100%">
9 <mx:VBox width="100%" height="100%" label="Simple">
10 <mx:HBox borderStyle="inset" verticalAlign="middle" width="100%" paddingLeft="3" id="iconContainer">
11 <mx:Image id="iconImage"/>
12 <mx:VBox width="100%" verticalGap="1">
13 <mx:PopUpButton id="popupChange" creationComplete="initFeatureBox()" openAlways="true" width="100%"/>
14 <mx:Text condenseWhite="true" width="100%" id="iconText"/>
16 <mx:LinkButton label="?" click="openDescription()" id="helpLabel"/>
20 <mx:VBox width="100%" height="100%" label="Advanced" initialize="checkAdvanced()" verticalGap="1">
21 <mx:Label id="advancedID">
22 <mx:htmlText><![CDATA[<i>No Selection</i>]]></mx:htmlText>
25 <mx:DataGrid editable="true" width="100%" height="100%" id="advancedTagGrid">
27 <mx:DataGridColumn editable="true" dataField="key" headerText="Key"/>
28 <mx:DataGridColumn editable="true" dataField="value" headerText="Value"/>
32 <mx:HBox horizontalAlign="right" width="100%">
33 <mx:LinkButton label="Delete" click="removeTag()"/>
34 <mx:LinkButton label="Add" click="addNewTag()"/>
40 <mx:LinkBar dataProvider="{stack}"/>
43 import net.systemeD.halcyon.connection.*;
44 import net.systemeD.halcyon.mapfeatures.*;
46 import mx.collections.*;
47 import mx.containers.*;
50 import mx.managers.PopUpManager;
51 import flash.geom.Point;
53 private var mapFeatures:MapFeatures;
54 private var selectedEntity:Entity;
55 private var collection:ArrayCollection;
56 private var tw:CategorySelector = null;
57 private var feature:Feature = null;
59 public function setEntity(entity:Entity):void {
60 if ( selectedEntity != entity ) {
61 if ( selectedEntity != null )
62 selectedEntity.removeEventListener(Connection.TAG_CHANGE, tagChanged);
63 selectedEntity = entity;
64 selectedEntity.addEventListener(Connection.TAG_CHANGE, tagChanged);
67 if ( advancedID != null )
68 setupAdvanced(entity);
73 private function refreshFeatureIcon():void {
74 feature = mapFeatures.findMatchingFeature(selectedEntity);
75 if ( feature != null )
76 setFeatureIcon(selectedEntity, feature);
78 blankFeatureIcon(selectedEntity);
81 private function setFeatureIcon(entity:Entity, feature:Feature):void {
82 blankFeatureIcon(entity);
84 iconImage.source = feature.image;
86 var txt:String = feature.htmlDetails(entity);
87 iconText.htmlText = txt;
88 popupChange.label = feature.name;
91 private function blankFeatureIcon(entity:Entity):void {
92 iconImage.source = null;
93 iconText.htmlText = entity == null ?
94 "<i>Nothing selected</i>" :
95 "<b>Not recognised</b><br/>Try looking at the tags under the advanced properties";
96 popupChange.label = "unknown";
99 private function checkAdvanced():void {
100 if ( selectedEntity != null )
101 setupAdvanced(selectedEntity);
104 private function setupAdvanced(entity:Entity):void {
105 var entityText:String = "xx";
106 if ( entity is Node ) entityText = "Node";
107 else if ( entity is Way ) entityText = "Way";
108 else if ( entity is Relation ) entityText = "Relation";
110 advancedID.htmlText = entityText+": <b>"+entity.id+"</b>";
112 if ( collection == null ) {
113 collection = new ArrayCollection();
114 //var sort:Sort = new Sort();
115 //sort.fields = [new SortField("key", true)];
116 //collection.sort = sort;
117 //collection.refresh();
118 advancedTagGrid.dataProvider = collection;
120 collection.removeAll();
121 var tags:Array = entity.getTagArray();
123 for each(var tag:Tag in tags)
124 collection.addItem(tag);
127 private function tagChanged(event:TagEvent):void {
128 refreshFeatureIcon();
130 if ( collection != null ) {
131 // check to see if the key is already in our list
132 var exists:Boolean = false;
135 for ( i = 0; i < collection.length && !exists; i++ ) {
136 tag = Tag(collection.getItemAt(i));
137 exists = tag.key == event.key;
140 tag = new Tag(selectedEntity, event.key, event.newValue);
141 collection.addItem(tag);
142 collection.refresh();
144 if ( event.newValue == null ) {
145 collection.removeItemAt(i-1);
146 collection.refresh();
152 public function loadFeatures():void {
153 mapFeatures = MapFeatures.getInstance();
156 public function openDescription():void {
157 trace("open description here");
160 public function addNewTag():void {
161 var newKey:String = "(new tag)";
162 var newTag:Tag = new Tag(selectedEntity, newKey, "(new value)");
163 collection.addItem(newTag);
164 advancedTagGrid.editedItemPosition = {rowIndex: collection.getItemIndex(newTag), columnIndex: 0};
167 public function removeTag():void {
168 var k:String = advancedTagGrid.selectedItem.key;
169 selectedEntity.setTag(k, null);
172 public function initFeatureBox():void {
173 tw = new CategorySelector();
174 tw.addEventListener("selectedType", changeFeatureType);
175 popupChange.popUp = tw;
178 public function changeFeatureType(event:Event):void {
179 if ( selectedEntity == null )
182 // remove tags from the current feature
183 if ( feature != null ) {
184 for each( var tag:Object in feature.tags ) {
185 selectedEntity.setTag(tag["k"], null);
189 // set tags for new feature
190 for each( var tag:Object in tw.selectedType.tags ) {
191 selectedEntity.setTag(tag["k"], tag["v"]);
194 trace("w000t "+tw.selectedType);