From f7b27532acd5e285ea15ad6cb468ba00b5aee933 Mon Sep 17 00:00:00 2001 From: Andy Allan Date: Tue, 7 Dec 2010 16:46:30 +0000 Subject: [PATCH] change relation.appendMember to use the undo system, and update various places as appropriate --- net/systemeD/halcyon/connection/Relation.as | 10 +++------- .../connection/actions/AddMemberToRelationAction.as | 2 +- .../halcyon/connection/actions/MergeWaysAction.as | 2 +- net/systemeD/potlatch2/RelationSelectPanel.mxml | 2 +- net/systemeD/potlatch2/TagViewer.mxml | 4 +++- .../mapfeatures/editors/RelationMemberEditor.as | 2 +- .../mapfeatures/editors/TurnRestrictionIcon.mxml | 6 +++--- 7 files changed, 13 insertions(+), 15 deletions(-) diff --git a/net/systemeD/halcyon/connection/Relation.as b/net/systemeD/halcyon/connection/Relation.as index 46688b0c..4d0d6cbc 100644 --- a/net/systemeD/halcyon/connection/Relation.as +++ b/net/systemeD/halcyon/connection/Relation.as @@ -79,13 +79,9 @@ package net.systemeD.halcyon.connection { performAction(new AddMemberToRelationAction(this, index, member, members)); } - public function appendMember(member:RelationMember):uint { - members.push(member); - member.entity.addParent(this); - markDirty(); - - dispatchEvent(new RelationMemberEvent(Connection.RELATION_MEMBER_ADDED, member.entity, this, members.length-1)); - return members.length; + public function appendMember(member:RelationMember, performAction:Function):uint { + performAction(new AddMemberToRelationAction(this, -1, member, members)); + return members.length + 1; } public function removeMember(entity:Entity, performAction:Function):void { diff --git a/net/systemeD/halcyon/connection/actions/AddMemberToRelationAction.as b/net/systemeD/halcyon/connection/actions/AddMemberToRelationAction.as index 7312038a..b41cfde8 100644 --- a/net/systemeD/halcyon/connection/actions/AddMemberToRelationAction.as +++ b/net/systemeD/halcyon/connection/actions/AddMemberToRelationAction.as @@ -8,7 +8,7 @@ package net.systemeD.halcyon.connection.actions { private var member:RelationMember; private var memberList:Array; - public function AddMemberToRelationAction(rel:Relation, index:uint, member:RelationMember, memberList:Array) { + public function AddMemberToRelationAction(rel:Relation, index:int, member:RelationMember, memberList:Array) { super(rel, "Add " + member.entity.getType() + " " + member.entity.id + " at position " + index + " to "); this.rel = rel; this.index = index; diff --git a/net/systemeD/halcyon/connection/actions/MergeWaysAction.as b/net/systemeD/halcyon/connection/actions/MergeWaysAction.as index da2117db..104362fc 100644 --- a/net/systemeD/halcyon/connection/actions/MergeWaysAction.as +++ b/net/systemeD/halcyon/connection/actions/MergeWaysAction.as @@ -46,7 +46,7 @@ package net.systemeD.halcyon.connection.actions { for each (var r:Relation in way2.parentRelations) { // ** needs to copy roles as well if (r.findEntityMemberIndex(way1)==-1) { - r.appendMember(new RelationMember(way1, '')); + r.appendMember(new RelationMember(way1, ''), push); } } } diff --git a/net/systemeD/potlatch2/RelationSelectPanel.mxml b/net/systemeD/potlatch2/RelationSelectPanel.mxml index ea3712a8..574ba41a 100644 --- a/net/systemeD/potlatch2/RelationSelectPanel.mxml +++ b/net/systemeD/potlatch2/RelationSelectPanel.mxml @@ -41,7 +41,7 @@ public function updateEntityAndClose():void { var relation:Relation = conn.getRelation(relationSelector.selectedItem.relId); - relation.appendMember(new RelationMember(entity, '')); + relation.appendMember(new RelationMember(entity, ''), MainUndoStack.getGlobalStack().addAction); PopUpManager.removePopUp(this); } diff --git a/net/systemeD/potlatch2/TagViewer.mxml b/net/systemeD/potlatch2/TagViewer.mxml index 2b9b2935..d40a1d59 100644 --- a/net/systemeD/potlatch2/TagViewer.mxml +++ b/net/systemeD/potlatch2/TagViewer.mxml @@ -537,6 +537,7 @@ var conn:Connection = Connection.getConnectionInstance(); var rel:Relation = selectedEntity as Relation + var action:CompositeUndoableAction = new CompositeUndoableAction("Rearrange relation members for "+rel); // drop members for (var i:int=rel.length-1 ; i>=0; i--) { @@ -554,8 +555,9 @@ } else if (memberObject.type == 'relation') { e = conn.getRelation(id); } - rel.appendMember(new RelationMember(e, memberObject.role)); + rel.appendMember(new RelationMember(e, memberObject.role), action.push); } + MainUndoStack.getGlobalStack().addAction(action); } private function editRelation(id:Number):void { diff --git a/net/systemeD/potlatch2/mapfeatures/editors/RelationMemberEditor.as b/net/systemeD/potlatch2/mapfeatures/editors/RelationMemberEditor.as index 92ce619a..9b350528 100644 --- a/net/systemeD/potlatch2/mapfeatures/editors/RelationMemberEditor.as +++ b/net/systemeD/potlatch2/mapfeatures/editors/RelationMemberEditor.as @@ -53,7 +53,7 @@ package net.systemeD.potlatch2.mapfeatures.editors { public function addMember(relation:Relation, role:String):void { if (_entity != null && !_entity.hasParent(relation)) - relation.appendMember(new RelationMember(_entity, role)); + relation.appendMember(new RelationMember(_entity, role), MainUndoStack.getGlobalStack().addAction); } public function set factory(factory:RelationMemberEditorFactory):void { diff --git a/net/systemeD/potlatch2/mapfeatures/editors/TurnRestrictionIcon.mxml b/net/systemeD/potlatch2/mapfeatures/editors/TurnRestrictionIcon.mxml index 378d89b7..943a41c9 100644 --- a/net/systemeD/potlatch2/mapfeatures/editors/TurnRestrictionIcon.mxml +++ b/net/systemeD/potlatch2/mapfeatures/editors/TurnRestrictionIcon.mxml @@ -106,11 +106,11 @@ for each (var memberEntity:Entity in old) { rel.removeMember(memberEntity, undo.push); } - undo.doAction(); // now add new entity - // ** FIXME - appendMember should be undoable - rel.appendMember(new RelationMember(entity,role)) + rel.appendMember(new RelationMember(entity,role), undo.push); + + undo.doAction(); if (show.label=='Hide') { setHighlights(true); } } -- 2.30.0