Merge pull request #30 from gravitystorm/background-panel
authorRichard Fairhurst <richard@systemeD.net>
Sun, 4 Mar 2012 14:34:01 +0000 (06:34 -0800)
committerRichard Fairhurst <richard@systemeD.net>
Sun, 4 Mar 2012 14:34:01 +0000 (06:34 -0800)
Background panel

1  2 
net/systemeD/potlatch2/TagViewer.mxml
net/systemeD/potlatch2/panels/BackgroundMergePanel.mxml
net/systemeD/potlatch2/panels/BackgroundPanel.mxml

index a2cbc157b3e66c768f8803f2203806e119746735,8c2e975b203b6b631964811415a37195f7916b6f..bbca135b9170cd8350fc5cb32be7e6b9a8bf87a3
@@@ -1,10 -1,4 +1,10 @@@
  <?xml version="1.0" encoding="utf-8"?>
 +<!---
 +  The TagViewer is the container for the entire sidebar. It has a number of components, and subpanels, in a ViewStack that change
 +  depending on what is selected, i.e. the ControllerState.
 +
 +  @see net.systemeD.potlatch2.controller.ControllerState
 +    -->
  <mx:VBox
      xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:mx="library://ns.adobe.com/flex/mx"
                markerPanelContents.init(selectedEntity, layer);
                sidebar.selectedChild = markerPanel;
              } else if (connection is SnapshotConnection) {
-               backgroundPanelContents.init(selectedEntity, layer);
+               backgroundPanelContents.init(selectedEntity);
                sidebar.selectedChild = backgroundPanel;
              } else {
                refreshFeatureIcon();
index d8827f1a0e7d072d537ae33c0be212e98175de06,b1e76cd8e06a9df76e8f2d22a246654e256ffe26..a68da1bb09e428e465e1bdd650c6fc3eded8de6c
@@@ -1,24 -1,26 +1,28 @@@
  <?xml version="1.0" encoding="utf-8"?>
 -
 -<!--
 -    Background Merge Panel
 +<!---
 +    The Background Merge Panel allows the tags from two features - one from
 +    a read-only vector background layer, one from an editable layer - to be
 +    compared. Tags are highlighted depending whether they match, and tags from
 +    the background layer can be easily merged.
  -->
  
- <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" height="100%">
-   <mx:Text id="backgroundMergePanelText" text="Review and Merge tags from the Background layer" width="100%" styleName="helpInfo" />
+ <mx:VBox
+     xmlns:fx="http://ns.adobe.com/mxml/2009"
+     xmlns:mx="library://ns.adobe.com/flex/mx"
+     xmlns:s="library://ns.adobe.com/flex/spark"
+     height="100%">
+   <s:RichText id="backgroundMergePanelText" width="100%">Review and Merge tags from the Background layer</s:RichText>
    <mx:DataGrid editable="false" id="backgroundPanelDG" width="100%" height="50%">
      <mx:columns>
        <mx:DataGridColumn editable="false" dataField="k" headerText="Key" />
        <mx:DataGridColumn editable="false" dataField="e" headerText="OSM value" />
-       <mx:DataGridColumn editable="false" headerText="Merge" width="50" textAlign="center">
+       <mx:DataGridColumn editable="false" headerText="Merge" width="150" textAlign="center">
          <mx:itemRenderer>
-           <mx:Component>
-             <mx:HBox horizontalAlign="center" verticalAlign="middle">
-               <mx:Button label="&lt;&lt;" visible="{parentDocument.buttonVisible(data.b, data.e)}" click="parentDocument.mergeForKey(data.k);" />
+           <fx:Component>
+             <mx:HBox horizontalAlign="center" verticalAlign="middle" width="100%">
+               <s:Button width="50" label="&lt;&lt;" visible="{parentDocument.buttonVisible(data.b, data.e)}" click="parentDocument.mergeForKey(data.k);" />
              </mx:HBox>
-           </mx:Component>
+           </fx:Component>
          </mx:itemRenderer>
        </mx:DataGridColumn>
        <mx:DataGridColumn editable="false" itemRenderer="net.systemeD.potlatch2.panels.BackgroundMergeFieldComponent" dataField="b" headerText="Background value" />
    <mx:ViewStack id="statusStack" resizeToContent="true" width="100%">
      <mx:VBox id="empty" />
      <mx:VBox id="not_complete">
-       <mx:Text text="All the data copied to the main layer? Click 'complete'!" />
-       <mx:Button label="Complete" click="markComplete()"/>
+       <s:VGroup width="100%">
+         <s:RichText width="100%">If all the information from this feature is accounted for in the main layer, you can mark this feature as 'complete'.</s:RichText>
+         <s:RichText width="100%">This lets other contributors see what still needs reconciling.</s:RichText>
+         <s:Button label="Mark feature as Complete" click="markComplete()"/>
+       </s:VGroup>
      </mx:VBox>
-     <mx:VBox id="complete">
-       <mx:Text text="This feature has been marked as complete. If this is wrong, press the button below." />
-       <mx:Button label="Not complete" click="markNotComplete()"/>
+     <mx:VBox id="complete" width="100%">
+       <s:VGroup width="100%">
+         <s:RichText width="100%">This feature has been marked as 'complete'. If this is incorrect, and there is still reconciling required, you can mark this feature as 'not complete'.</s:RichText>
+         <s:Button label="Mark feature as Not complete" click="markNotComplete()"/>
+       </s:VGroup>
      </mx:VBox>
    </mx:ViewStack>
-   <mx:Script><![CDATA[
+   <fx:Script><![CDATA[
  
        import net.systemeD.halcyon.connection.*;
        import net.systemeD.halcyon.MapPaint;
        private var backgroundEntity:Entity;
        private var tagDataProvider:ArrayCollection;
  
 +      /**
 +      * @param entities The two entities that are being compared. One should be from a background layer, but the
 +      *                 order is not important.
 +      */
        public function init(entities:Array):void {
            if ( tagDataProvider == null ) {
                tagDataProvider = new ArrayCollection();
            updateTagDataProvider();
        }
  
 +      /**
 +      * Should the button for merging tags be shown?
 +      *
 +      * @param b The tag value for the background entity
 +      * @param e The tag value for the editable entity
 +      */
        public function buttonVisible(b:String, e:String):Boolean {
            if (b != null && b != e) {
                return true;
            return false;
        }
  
 +      /**
 +      * Merge the data for the given key. Results in the value being copied to the editable entity, using the
 +      * global undo stack.
 +      *
 +      * @param key The tag key to be merged.
 +      */
        public function mergeForKey(key:String):void {
            editableEntity.setTag(key, backgroundEntity.getTag(key), MainUndoStack.getGlobalStack().addAction);
        }
  
 -      // Don't call this for things you don't want coloured in. Like for empty tags.
 +      /**
 +      * Figure out an appropriate background color for the row. Don't call this for things you don't want coloured in. Like for empty tags.
 +      *
 +      * @param i The row index in the tagDataProvider
 +      * @return The colour to be used as the background of the field
 +      */
        public function getColorFor(i:int):int {
            if (tagDataProvider[i].e == tagDataProvider[i].b) {
                return 0xDDFFDD; // matching, green
            }
        }
    ]]>
-   </mx:Script>
+   </fx:Script>
  </mx:VBox>
index b6c9348c1c68a0efc4c346717728fbae2eab2783,1bfd5293e1d0599a74d95b2b61916a8e13a30575..394f400cf5a4c6a60665bf862670d3c21459ec14
@@@ -1,44 -1,55 +1,55 @@@
  <?xml version="1.0" encoding="utf-8"?>
 -
 -<!--
 -    Background Panel
 +<!---
 +    The Background Panel displays details about the background feature selected. It is currently only used
 +    by the SnapshotConnection, and so has functionality to allow marking features as "complete".
  -->
  
  <mx:VBox
      xmlns:fx="http://ns.adobe.com/mxml/2009"
      xmlns:mx="library://ns.adobe.com/flex/mx"
+     xmlns:s="library://ns.adobe.com/flex/spark"
      height="100%">
-   <mx:Text id="backgroundPanelText" text="You have selected a Background Feature." width="100%" styleName="helpInfo" />
+   <s:VGroup width="100%">
+     <s:RichText width="100%" id="backgroundPanelText" text="You have selected a Background Feature." />
+     <s:RichText text="{connectionName}" />
+   </s:VGroup>
    <mx:DataGrid editable="false" id="backgroundPanelDG" width="100%" height="50%">
      <mx:columns>
        <mx:DataGridColumn editable="false" dataField="key" headerText="key" />
        <mx:DataGridColumn editable="false" dataField="value" headerText="value" />
      </mx:columns>
    </mx:DataGrid>
+   <s:VGroup width="100%">
+     <s:RichText width="100%">You can see a side-by-side tagging comparison by ctrl+clicking a feature on the main layer.</s:RichText>
+   </s:VGroup>
    <mx:ViewStack id="statusStack" resizeToContent="true" width="100%">
      <mx:VBox id="empty" />
-     <mx:VBox id="not_complete">
-       <mx:Text text="All the data copied to the main layer? Click 'complete'!" />
-       <mx:Button label="Complete" click="markComplete()"/>
+     <mx:VBox id="not_complete" width="100%">
+       <s:VGroup width="100%">
+         <s:RichText width="100%">If all the information from this feature is accounted for in the main layer, you can mark this feature as 'complete'.</s:RichText>
+         <s:RichText width="100%">This lets other contributors see what still needs reconciling.</s:RichText>
+         <s:Button label="Mark feature as Complete" click="markComplete()"/>
+       </s:VGroup>
      </mx:VBox>
-     <mx:VBox id="complete">
-       <mx:Text text="This feature has been marked as complete. If this is wrong, press the button below." />
-       <mx:Button label="Not complete" click="markNotComplete()"/>
+     <mx:VBox id="complete" width="100%">
+       <s:VGroup width="100%">
+         <s:RichText width="100%">This feature has been marked as 'complete'. If this is incorrect, and there is still reconciling required, you can mark this feature as 'not complete'.</s:RichText>
+         <s:Button label="Mark feature as Not complete" click="markNotComplete()"/>
+       </s:VGroup>
      </mx:VBox>
    </mx:ViewStack>
    <fx:Script><![CDATA[
  
        import net.systemeD.halcyon.connection.*;
-       import net.systemeD.halcyon.MapPaint;
        import net.systemeD.potlatch2.utils.SnapshotConnection;
        import mx.collections.*;
  
        private var selectedEntity:Entity;
        private var tagDataProvider:ArrayCollection;
-       private var layer:MapPaint;
+       [Bindable]
+       private var connectionName:String;
  
-       public function init(entity:Entity, layer:MapPaint):void {
-           this.layer = layer;
+       public function init(entity:Entity):void {
            if ( tagDataProvider == null ) {
                tagDataProvider = new ArrayCollection();
                backgroundPanelDG.dataProvider = tagDataProvider;
@@@ -46,6 -57,7 +57,7 @@@
  
            selectedEntity=entity;
            selectedEntity.addEventListener(Connection.STATUS_CHANGED, statusEvent, false, 0, true);
+           connectionName = selectedEntity.connection.name;
            setStatusStack();
            updateTagDataProvider();
        }