1 <?xml version="1.0" encoding="utf-8"?>
7 <mx:DataGrid editable="true" doubleClickEnabled="true" doubleClick="addNewTag()"
8 xmlns:controls="net.systemeD.controls.*"
9 xmlns:mx="http://www.adobe.com/2006/mxml">
14 <mx:DataGridColumn editable="true" dataField="key" headerText="Key">
17 <controls:AutoComplete
18 dataProvider="{MapFeatures.getInstance().getAutoCompleteKeys(outerDocument.getEntityType())}"
21 restrict=" -"
22 typedText="{outerDocument.selectedItem.key}">
23 <mx:Script><![CDATA[ import net.systemeD.potlatch2.mapfeatures.*; ]]></mx:Script>
24 </controls:AutoComplete>
31 <mx:DataGridColumn editable="true" dataField="value" headerText="Value">
34 <controls:AutoComplete
35 dataProvider="{MapFeatures.getInstance().getAutoCompleteValues(outerDocument.getEntityType(),outerDocument.selectedItem.key)}"
38 restrict=" -"
39 typedText="{outerDocument.selectedItem.value}">
40 <mx:Script><![CDATA[ import net.systemeD.potlatch2.mapfeatures.*; ]]></mx:Script>
41 </controls:AutoComplete>
46 <!-- Delete button -->
48 <mx:DataGridColumn width="20" editable="false">
51 <mx:HBox horizontalAlign="center" verticalAlign="middle">
52 <mx:Image source="@Embed('../../../embedded/delete_small.svg')"
53 click='event.stopPropagation();outerDocument.removeTag();'
54 buttonMode="true" useHandCursor="true" width="12" height="12">
64 import net.systemeD.halcyon.connection.*;
65 import mx.collections.*;
67 private var selectedEntity:Entity;
68 private var tagDataProvider:ArrayCollection;
70 /** Assign a new selected Entity, and update editing controls appropriately. */
71 public function init(entity:Entity):void {
72 if (selectedEntity==entity) return;
73 if (selectedEntity) selectedEntity.removeEventListener(Connection.TAG_CHANGED, tagChanged);
75 selectedEntity=entity;
76 if (!selectedEntity) return;
77 selectedEntity.addEventListener(Connection.TAG_CHANGED, tagChanged, false, 0, true);
79 if ( tagDataProvider == null ) {
80 tagDataProvider = new ArrayCollection();
81 dataProvider = tagDataProvider;
83 tagDataProvider.removeAll();
86 var tags:Array = selectedEntity.getTagArray();
88 for each(var tag:Tag in tags) { tagDataProvider.addItem(tag); }
91 /** Update dataProvider in response to a tag being edited or removed */
92 private function tagChanged(event:TagEvent):void {
93 var set:Boolean=false;
94 for (var i:uint=0; i<tagDataProvider.length; i++) {
95 if (tagDataProvider[i].key==event.oldKey) {
96 if (event.newValue && event.key) {
98 // this entry in the dataProvider has changed
99 tagDataProvider[i].key=event.key;
100 tagDataProvider[i].value=event.newValue;
103 // trap duplicate tags
104 tagDataProvider.removeItemAt(i);
107 // this entry in the dataProvider has been deleted
108 tagDataProvider.removeItemAt(i);
112 // tell Flex to redraw the grid because we've changed a tag
116 /** Create editing controls for a new key/value pair, with default values. */
117 public function addNewTag():void {
118 var newKey:String = "(new tag)";
119 var newTag:Tag = new Tag(selectedEntity, newKey, "(new value)");
120 tagDataProvider.addItem(newTag);
121 editedItemPosition = {rowIndex: tagDataProvider.getItemIndex(newTag), columnIndex: 0};
124 /** Remove the selected tag from the selected entity. */
125 public function removeTag():void {
126 var k:String = selectedItem.key;
127 selectedEntity.setTag(k, null, MainUndoStack.getGlobalStack().addAction);
130 /** Return the type ("node", "way", "relation") of the selected entity. */
131 public function getEntityType():String {
132 return selectedEntity.getType();