[Commits] r336 - sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tree

commits at geoext.org commits at geoext.org
Thu Apr 2 23:36:19 CEST 2009


Author: tschaub
Date: 2009-04-02 23:36:19 +0200 (Thu, 02 Apr 2009)
New Revision: 336

Modified:
   sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tree/LayerContainer.js
Log:
Respect layer order when adding to the container. (see #22)

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tree/LayerContainer.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tree/LayerContainer.js	2009-04-02 20:53:30 UTC (rev 335)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tree/LayerContainer.js	2009-04-02 21:36:19 UTC (rev 336)
@@ -57,11 +57,13 @@
             }
             this.layerStore.each(function(record) {
                 this.addLayerNode(record);
-            }, this)
+            }, this);
             this.layerStore.on({
-                "add": function(store, records, index){
+                "add": function(store, records, index) {
+                    var nodeIndex = this.recordIndexToNodeIndex(index);
+                    console.log(index, nodeIndex);
                     for(var i=0; i<records.length; ++i) {
-                        this.addLayerNode(records[i]);
+                        this.addLayerNode(records[i], nodeIndex);
                     }
                 },
                 "remove": function(store, record, index) {
@@ -74,13 +76,40 @@
     },
     
     /**
+     * Method: recordIndexToNodeIndex
+     * Convert a record index into a child node index.
+     *
+     * Parameters:
+     * index - {Number} The record index in the layer store.
+     *
+     * Returns:
+     * {Number} The appropriate child node index for the record.
+     */
+    recordIndexToNodeIndex: function(index) {
+        var store = this.layerStore;
+        var count = store.getCount();
+        var nodeIndex = -1;
+        for(var i=count-1; i>=0; --i) {
+            if(store.getAt(i).get("layer").displayInLayerSwitcher) {
+                ++nodeIndex;
+                if(index === i) {
+                    break;
+                }
+            }
+        };
+        return nodeIndex;
+    },
+    
+    /**
      * Method: addLayerNode
      * Adds a child node representing a layer of the map
      * 
      * Parameters:
      * layerRecord - {Ext.data.Record} the layer record to add the layer for
+     * index - {Number} Optional index for the new layer.  Default is 0.
      */
-    addLayerNode: function(layerRecord) {
+    addLayerNode: function(layerRecord, index) {
+        index = index || 0;
         var layer = layerRecord.get("layer");
         if (layer.displayInLayerSwitcher == true) {
             var node = new GeoExt.tree.LayerNode(Ext.applyIf({
@@ -88,7 +117,12 @@
                 layer: layer,
                 layerStore: this.layerStore
             }, this.defaults));
-            this.appendChild(node);
+            var sibling = this.item(index);
+            if(sibling) {
+                this.insertBefore(node, sibling);
+            } else {
+                this.appendChild(node);
+            }
         }
     },
     



More information about the Commits mailing list