[Commits] r341 - in sandbox/opengeo/geoexplorer: lib/GeoExt/data tests/lib/GeoExt/data

commits at geoext.org commits at geoext.org
Fri Apr 3 01:18:58 CEST 2009


Author: tschaub
Date: 2009-04-03 01:18:58 +0200 (Fri, 03 Apr 2009)
New Revision: 341

Modified:
   sandbox/opengeo/geoexplorer/lib/GeoExt/data/LayerStore.js
   sandbox/opengeo/geoexplorer/tests/lib/GeoExt/data/LayerStore.html
Log:
Correctly handle layer order on store.insert.  (see #37)

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/data/LayerStore.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/data/LayerStore.js	2009-04-02 22:57:37 UTC (rev 340)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/data/LayerStore.js	2009-04-02 23:18:58 UTC (rev 341)
@@ -141,19 +141,21 @@
     onLayerChange: function(evt) {
         var layer = evt.layer;
         if(evt.property === "order") {
-            var layerIndex = this.map.getLayerIndex(layer);
-            var recordIndex = this.findBy(function(rec, id) {
-                return rec.get("layer") === layer;
-            });
-            if(recordIndex > -1) {
-                if(layerIndex !== recordIndex) {
-                    var record = this.getAt(recordIndex);
-                    this._removing = true;
-                    this.remove(record);
-                    delete this._removing;
-                    this._adding = true;
-                    this.insert(layerIndex, [record]);
-                    delete this._adding;
+            if(!this._adding && !this._removing) {
+                var layerIndex = this.map.getLayerIndex(layer);
+                var recordIndex = this.findBy(function(rec, id) {
+                    return rec.get("layer") === layer;
+                });
+                if(recordIndex > -1) {
+                    if(layerIndex !== recordIndex) {
+                        var record = this.getAt(recordIndex);
+                        this._removing = true;
+                        this.remove(record);
+                        delete this._removing;
+                        this._adding = true;
+                        this.insert(layerIndex, [record]);
+                        delete this._adding;
+                    }
                 }
             }
         }
@@ -203,8 +205,13 @@
     onAdd: function(store, records, index) {
         if(!this._adding) {
             this._adding = true;
-            for(var i=0; i<records.length; ++i) {
-                this.map.addLayer(records[i].get("layer"));
+            var layer;
+            for(var i=records.length-1; i>=0; --i) {
+                layer = records[i].get("layer");
+                this.map.addLayer(layer);
+                if(index !== this.map.layers.length-1) {
+                    this.map.setLayerIndex(layer, index);
+                }
             }
             delete this._adding;
         }

Modified: sandbox/opengeo/geoexplorer/tests/lib/GeoExt/data/LayerStore.html
===================================================================
--- sandbox/opengeo/geoexplorer/tests/lib/GeoExt/data/LayerStore.html	2009-04-02 22:57:37 UTC (rev 340)
+++ sandbox/opengeo/geoexplorer/tests/lib/GeoExt/data/LayerStore.html	2009-04-02 23:18:58 UTC (rev 341)
@@ -142,9 +142,45 @@
             t.eq(map.layers[1].name, "b", "[c, b, a] second layer correct on map");
             t.eq(map.layers[2].name, "a", "[c, b, a] third layer correct on map");
             
+            map.destroy();
             
         }
+        
+        function test_insert(t) {
+            
+            t.plan(10);
+            
+            var map = new OpenLayers.Map("mappanel");
+            var a = new OpenLayers.Layer.Vector("a");
+            var b = new OpenLayers.Layer.Vector("b");
+            var c = new OpenLayers.Layer.Vector("c");
+            var d = new OpenLayers.Layer.Vector("d");
 
+            var store = new GeoExt.data.LayerStore({
+                map: map
+            });
+            
+            store.add(store.reader.readRecords([a, b, c]).records);
+            
+            // insert d into second position
+            store.insert(1, store.reader.readRecords([d]).records);
+            
+            t.eq(store.getCount(), 4, "[a, d, b, c] four layers in store");
+            t.eq(store.getAt(0).get("layer").name, "a", "[a, d, b, c] first layer correct in store");
+            t.eq(store.getAt(1).get("layer").name, "d", "[a, d, b, c] second layer correct in store");
+            t.eq(store.getAt(2).get("layer").name, "b", "[a, d, b, c] third layer correct in store");
+            t.eq(store.getAt(3).get("layer").name, "c", "[a, d, b, c] fourth layer correct in store");
+            t.eq(map.layers.length, 4, "[a, d, b, c] four layers on map");
+            t.eq(map.layers[0].name, "a", "[a, d, b, c] first layer correct on map");
+            t.eq(map.layers[1].name, "d", "[a, d, b, c] second layer correct on map");
+            t.eq(map.layers[2].name, "b", "[a, d, b, c] third layer correct on map");
+            t.eq(map.layers[3].name, "c", "[a, d, b, c] fourth layer correct on map");
+            
+            map.destroy();
+
+        }
+        
+
     </script>
   <body>
     <div id="mappanel"></div>



More information about the Commits mailing list