1 <?xml version="1.0" encoding="utf-8"?>
7 <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" height="100%">
8 <mx:Text id="backgroundMergePanelText" text="W00t!!!" width="100%" styleName="helpInfo" />
9 <mx:DataGrid editable="false" id="backgroundPanelDG" width="100%" height="50%">
11 <mx:DataGridColumn editable="false" dataField="k" headerText="Key" />
12 <mx:DataGridColumn editable="false" dataField="e" headerText="OSM value" />
13 <mx:DataGridColumn editable="false" headerText="Merge" width="50" textAlign="center">
16 <mx:HBox horizontalAlign="center" verticalAlign="middle">
17 <mx:Button label="<<" visible="{parentDocument.buttonVisible(data.b, data.e)}" click="parentDocument.mergeForKey(data.k);" />
22 <mx:DataGridColumn editable="false" itemRenderer="net.systemeD.potlatch2.panels.BackgroundMergeFieldComponent" dataField="b" headerText="Background value" />
25 <mx:ViewStack id="statusStack" resizeToContent="true" width="100%">
26 <mx:VBox id="empty" />
27 <mx:VBox id="not_complete">
28 <mx:Text text="All the data copied to the main layer? Click 'complete'!" />
29 <mx:Button label="Complete" click="markComplete()"/>
31 <mx:VBox id="complete">
32 <mx:Text text="This feature has been marked as complete. If this is wrong, press the button below." />
33 <mx:Button label="Not complete" click="markNotComplete()"/>
38 import net.systemeD.halcyon.connection.*;
39 import net.systemeD.halcyon.MapPaint;
40 import net.systemeD.potlatch2.utils.SnapshotConnection;
42 import mx.collections.*;
44 private var editableEntity:Entity;
45 private var backgroundEntity:Entity;
46 private var tagDataProvider:ArrayCollection;
48 public function init(entities:Array):void {
49 if ( tagDataProvider == null ) {
50 tagDataProvider = new ArrayCollection();
51 backgroundPanelDG.dataProvider = tagDataProvider;
54 if (parentDocument.controller.map.getLayerForEntity(entities[0]).isBackground) {
55 backgroundEntity = entities[0];
56 editableEntity = entities[1];
58 backgroundEntity = entities[1];
59 editableEntity = entities[0];
61 backgroundEntity.addEventListener(Connection.STATUS_CHANGED, statusEvent, false, 0, true);
63 editableEntity.addEventListener(Connection.TAG_CHANGED, tagChanged, false, 0, true);
64 updateTagDataProvider();
67 private function updateTagDataProvider():void {
71 tagDataProvider.removeAll();
73 for each (tag in backgroundEntity.getTagArray() ) {
77 for each (tag in editableEntity.getTagArray() ) {
81 keys=keys.filter(function(k:*, i:int, arr:Array):Boolean { return arr.indexOf(k) == i } ); // remove duplicates
84 for each (var key:String in keys) {
85 tagDataProvider.addItem({k:key, e:editableEntity.getTag(key), b:backgroundEntity.getTag(key)});
87 backgroundPanelDG.invalidateList();
90 private function tagChanged(e:Event):void {
91 updateTagDataProvider();
94 public function buttonVisible(b:String, e:String):Boolean {
95 if (b != null && b != e) {
101 public function mergeForKey(key:String):void {
102 editableEntity.setTag(key, backgroundEntity.getTag(key), MainUndoStack.getGlobalStack().addAction);
105 // Don't call this for things you don't want coloured in. Like for empty tags.
106 public function getColorFor(i:int):int {
107 if (tagDataProvider[i].e == tagDataProvider[i].b) {
108 return 0xDDFFDD; // matching, green
109 } else if (tagDataProvider[i].e == null) {
110 return 0xDDDDFF; // new value, blue
111 } else if (tagDataProvider[i].b) {
112 return 0xFFDDDD; // conflicting, red
114 return NaN; // which is interpretted as black
117 private function statusEvent(e:Event):void {
121 private function setStatusStack():void {
122 switch (backgroundEntity.status) {
124 statusStack.selectedChild = not_complete;
127 statusStack.selectedChild = complete;
130 statusStack.selectedChild = empty;
134 private function markComplete():void {
135 if (backgroundEntity.connection is SnapshotConnection) {
136 SnapshotConnection(backgroundEntity.connection).markComplete(backgroundEntity);
140 private function markNotComplete():void {
141 if (backgroundEntity.connection is SnapshotConnection) {
142 SnapshotConnection(backgroundEntity.connection).markNotComplete(backgroundEntity);