1 package net.systemeD.potlatch2.mapfeatures.editors {
3 import net.systemeD.halcyon.connection.*;
4 import net.systemeD.potlatch2.mapfeatures.*;
5 import mx.containers.VBox;
8 public class RelationMemberEditor extends VBox {
10 protected var _factory:RelationMemberEditorFactory;
11 protected var _entity:Entity;
13 [Bindable(event="factory_set")]
14 public function get fieldName():String {
15 return _factory == null ? "" : _factory.name;
18 [Bindable(event="factory_set")]
19 public function get fieldDescription():String {
20 return _factory == null ? "" : _factory.description;
23 [Bindable(event="relations_changed")]
24 public function get matchedRelations():Array {
28 var relationTagPatterns:Object = _factory.relationTagPatterns;
29 var matched:Array = [];
31 for each(var relation:Relation in _entity.parentRelations) {
32 var addable:Boolean = true;
33 for ( var k:String in relationTagPatterns ) {
34 var relVal:String = relation.getTag(k);
35 if ( relationTagPatterns[k].indexOf(relVal) < 0 ) {
40 if (_factory.role && !relation.hasMemberInRole(_entity,_factory.role) ) { continue; }
43 for each( var memberIndex:int in relation.findEntityMemberIndexes(_entity)) {
44 var props:Object = {};
45 props["relation"] = relation;
46 props["id"] = relation.id;
47 props["index"] = memberIndex;
48 props["role"] = relation.getMember(memberIndex).role;
49 props["entity"] = _entity;
57 public function addMember(relation:Relation, role:String):void {
58 if (_entity != null && !_entity.hasParent(relation))
59 relation.appendMember(new RelationMember(_entity, role), MainUndoStack.getGlobalStack().addAction);
62 public function set factory(factory:RelationMemberEditorFactory):void {
64 dispatchEvent(new Event("factory_set"));
67 public function set entity(entity:Entity):void {
70 entity.addEventListener(Connection.ADDED_TO_RELATION, relationsChanged, false, 0, true);
71 entity.addEventListener(Connection.REMOVED_FROM_RELATION, relationsChanged, false, 0, true);
72 dispatchEvent(new Event("relations_changed"));
75 protected function relationsChanged(event:Event):void {
76 dispatchEvent(new Event("relations_changed"));