Nothing selected" :
"Not recognised
Try looking at the tags under the advanced properties";
popupChange.label = "unknown";
setLimitTypes(entity);
tw.setSelectedFeature(null);
helpLabel.visible = false;
}
private var tabComponents:Object = {};
private function initialiseEditors():void {
editorStack.removeAllChildren();
if ( selectedEntity == null || feature == null )
return;
var editorBox:VBox = createEditorBox();
editorBox.label = "Basic";
editorStack.addChild(editorBox);
var tabs:Object = {};
tabComponents = {};
for each (var factory:EditorFactory in feature.editors) {
if ( factory.presence.isEditorPresent(factory, selectedEntity, null) ) {
var editor:DisplayObject = factory.createEditorInstance(selectedEntity);
if ( editor != null )
editorBox.addChild(editor);
}
var category:String = factory.category;
var tab:VBox = tabs[category];
if ( tab == null ) {
tab = createEditorBox();
tab.label = category;
editorStack.addChild(tab);
tabs[category] = tab;
tabComponents[tab] = [];
}
var catEditor:DisplayObject = factory.createEditorInstance(selectedEntity);
if ( catEditor != null )
tabComponents[tab].push(catEditor);
// tab.addChild(catEditor);
}
}
private function createEditorBox():VBox {
var box:VBox = new VBox();
box.percentWidth = 100;
box.percentHeight = 100;
return box;
}
private function ensureEditorsPopulated(tab:VBox):void {
var components:Array = tabComponents[tab];
if ( components == null || tab == null || tab.numChildren >= components.length )
return;
for each (var component:DisplayObject in components ) {
tab.addChild(component);
}
}
private function checkAdvanced():void {
if ( selectedEntity != null )
setupAdvanced(selectedEntity);
}
private var listeningToRelations:Array = [];
private function setupAdvanced(entity:Entity):void {
if ( tagDataProvider == null ) {
tagDataProvider = new ArrayCollection();
advancedTagGrid.dataProvider = tagDataProvider;
}
tagDataProvider.removeAll();
if ( entity == null ) {
advancedID.htmlText = "";
} else {
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+": "+entity.id+"";
var tags:Array = entity.getTagArray();
tags.sortOn("key");
for each(var tag:Tag in tags)
tagDataProvider.addItem(tag);
}
removeRelationListeners();
if ( selectedEntity != null ) {
selectedEntity.removeEventListener(Connection.ADDED_TO_RELATION, addedToRelation);
selectedEntity.removeEventListener(Connection.REMOVED_FROM_RELATION, removedFromRelation);
}
if ( entity == null ) {
relationsGrid.dataProvider = null;
} else {
resetRelationsGrid(entity);
entity.addEventListener(Connection.ADDED_TO_RELATION, addedToRelation);
entity.addEventListener(Connection.REMOVED_FROM_RELATION, removedFromRelation);
}
}
private function addedToRelation(event:RelationMemberEvent):void {
resetRelationsGrid(selectedEntity);
}
private function removedFromRelation(event:RelationMemberEvent):void {
resetRelationsGrid(selectedEntity);
}
private function removeRelationListeners():void {
for each( var rel:Relation in listeningToRelations ) {
rel.removeEventListener(Connection.TAG_CHANGED, relationTagChanged);
rel.removeEventListener(Connection.RELATION_MEMBER_ADDED, entityRelationMemberChanged);
rel.removeEventListener(Connection.RELATION_MEMBER_REMOVED, entityRelationMemberChanged);
}
listeningToRelations = [];
}
private function resetRelationsGrid(entity:Entity):void {
removeRelationListeners();
var relations:Array = [];
for each( var rel:Relation in entity.parentRelations ) {
for each( var memberIndex:int in rel.findEntityMemberIndexes(entity)) {
var props:Object = {};
props["relation"] = rel;
props["id"] = rel.id;
props["index"] = memberIndex;
props["role"] = rel.getMember(memberIndex).role;
props["description"] = rel.getDescription();
props["id_idx"] = rel.id + "/"+memberIndex;
relations.push(props);
}
rel.addEventListener(Connection.TAG_CHANGED, relationTagChanged);
rel.addEventListener(Connection.RELATION_MEMBER_ADDED, entityRelationMemberChanged);
rel.addEventListener(Connection.RELATION_MEMBER_REMOVED, entityRelationMemberChanged);
listeningToRelations.push(rel);
}
relationsGrid.dataProvider = relations;
}
private function relationTagChanged(event:TagEvent):void {
resetRelationsGrid(selectedEntity);
}
private function entityRelationMemberChanged(event:RelationMemberEvent):void {
resetRelationsGrid(selectedEntity);
}
private function checkMembers():void {
if (selectedEntity is Relation) {
setupMembers(selectedEntity as Relation);
}
}
private function setupMembers(rel:Relation):void {
var members:Array = [];
for (var i:int=0 ; i=0; i--) {
rel.removeMemberByIndex(i);
}
// add members in new order
for each(var memberObject:Object in membersGrid.dataProvider) {
var e:Entity;
var id:int = memberObject.id;
if(memberObject.type == 'node') {
e = conn.getNode(id);
} else if (memberObject.type == 'way') {
e = conn.getWay(id);
} else if (memberObject.type == 'relation') {
e = conn.getRelation(id);
}
rel.appendMember(new RelationMember(e, memberObject.role));
trace("added member "+memberObject.type+" "+id+" in role "+memberObject.role);
}
trace("complete: relation "+rel.id+" now has "+rel.length+" members");
}
private function editRelation(id:uint):void {
trace("edit relation "+id);
var panel:RelationEditorPanel = RelationEditorPanel(
PopUpManager.createPopUp(Application(Application.application), RelationEditorPanel, true));
panel.setRelation(Connection.getConnectionInstance().getRelation(id));
PopUpManager.centerPopUp(panel);
}
private function tagChanged(event:TagEvent):void {
refreshFeatureIcon();
if ( tagDataProvider != null ) {
// check to see if the key is already in our list
var exists:Boolean = false;
var tag:Tag = null;
var i:uint;
for ( i = 0; i < tagDataProvider.length && !exists; i++ ) {
tag = Tag(tagDataProvider.getItemAt(i));
exists = tag.key == event.key;
}
if ( !exists ) {
tag = new Tag(selectedEntity, event.key, event.newValue);
tagDataProvider.addItem(tag);
tagDataProvider.refresh();
} else {
if ( event.newValue == null ) {
tagDataProvider.removeItemAt(i-1);
tagDataProvider.refresh();
} else {
tagDataProvider.itemUpdated(tag, "value");
}
}
}
}
public function loadFeatures():void {
mapFeatures = MapFeatures.getInstance();
stack.removeChild(membersVBox); // remove by default, will be added if relation
}
public function openDescription():void {
trace("open description here");
if ( feature != null && feature.hasHelpURL() )
navigateToURL(new URLRequest(feature.helpURL), "potlatch_help");
}
public function addNewTag():void {
var newKey:String = "(new tag)";
var newTag:Tag = new Tag(selectedEntity, newKey, "(new value)");
tagDataProvider.addItem(newTag);
advancedTagGrid.editedItemPosition = {rowIndex: tagDataProvider.getItemIndex(newTag), columnIndex: 0};
}
public function removeTag():void {
var k:String = advancedTagGrid.selectedItem.key;
selectedEntity.setTag(k, null);
}
public function addToRelation():void {
new RelationSelectPanel().init(selectedEntity);
}
public function removeFromRelation(id:Number, index:int):void {
Connection.getConnectionInstance().getRelation(id).removeMemberByIndex(index);
}
public function initFeatureBox():void {
tw = new CategorySelector();
tw.addEventListener("selectedType", changeFeatureType);
popupChange.popUp = tw;
}
public function changeFeatureType(event:Event):void {
if ( selectedEntity == null )
return;
var newFeature:Feature = tw.selectedType;
// remove tags from the current feature
if ( feature != null ) {
for each( var oldtag:Object in feature.tags ) {
selectedEntity.setTag(oldtag["k"], null);
}
}
// set tags for new feature
if ( newFeature != null ) {
for each( var newtag:Object in newFeature.tags ) {
selectedEntity.setTag(newtag["k"], newtag["v"]);
}
}
popupChange.close();
}
private function dragPOI(event:MouseEvent, tags:Array):void {
// Get the drag initiator component from the event object.
var dragInitiator:Image = event.currentTarget as Image;
var dragSource:DragSource = new DragSource();
dragSource.addData(tags, 'tags');
var dragProxy:Image = new Image();
dragProxy.source = event.currentTarget.source;
DragManager.doDrag(dragInitiator, dragSource, event, dragProxy);
}
]]>