Changeset 341


Ignore:
Timestamp:
04/03/09 01:18:58 (9 years ago)
Author:
tschaub
Message:

Correctly handle layer order on store.insert. (see #37)

Location:
sandbox/opengeo/geoexplorer
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • sandbox/opengeo/geoexplorer/lib/GeoExt/data/LayerStore.js

    r340 r341  
    142142        var layer = evt.layer;
    143143        if(evt.property === "order") {
    144             var layerIndex = this.map.getLayerIndex(layer);
    145             var recordIndex = this.findBy(function(rec, id) {
    146                 return rec.get("layer") === layer;
    147             });
    148             if(recordIndex > -1) {
    149                 if(layerIndex !== recordIndex) {
    150                     var record = this.getAt(recordIndex);
    151                     this._removing = true;
    152                     this.remove(record);
    153                     delete this._removing;
    154                     this._adding = true;
    155                     this.insert(layerIndex, [record]);
    156                     delete this._adding;
     144            if(!this._adding && !this._removing) {
     145                var layerIndex = this.map.getLayerIndex(layer);
     146                var recordIndex = this.findBy(function(rec, id) {
     147                    return rec.get("layer") === layer;
     148                });
     149                if(recordIndex > -1) {
     150                    if(layerIndex !== recordIndex) {
     151                        var record = this.getAt(recordIndex);
     152                        this._removing = true;
     153                        this.remove(record);
     154                        delete this._removing;
     155                        this._adding = true;
     156                        this.insert(layerIndex, [record]);
     157                        delete this._adding;
     158                    }
    157159                }
    158160            }
     
    204206        if(!this._adding) {
    205207            this._adding = true;
    206             for(var i=0; i<records.length; ++i) {
    207                 this.map.addLayer(records[i].get("layer"));
     208            var layer;
     209            for(var i=records.length-1; i>=0; --i) {
     210                layer = records[i].get("layer");
     211                this.map.addLayer(layer);
     212                if(index !== this.map.layers.length-1) {
     213                    this.map.setLayerIndex(layer, index);
     214                }
    208215            }
    209216            delete this._adding;
  • sandbox/opengeo/geoexplorer/tests/lib/GeoExt/data/LayerStore.html

    r340 r341  
    143143            t.eq(map.layers[2].name, "a", "[c, b, a] third layer correct on map");
    144144           
     145            map.destroy();
    145146           
    146147        }
     148       
     149        function test_insert(t) {
     150           
     151            t.plan(10);
     152           
     153            var map = new OpenLayers.Map("mappanel");
     154            var a = new OpenLayers.Layer.Vector("a");
     155            var b = new OpenLayers.Layer.Vector("b");
     156            var c = new OpenLayers.Layer.Vector("c");
     157            var d = new OpenLayers.Layer.Vector("d");
     158
     159            var store = new GeoExt.data.LayerStore({
     160                map: map
     161            });
     162           
     163            store.add(store.reader.readRecords([a, b, c]).records);
     164           
     165            // insert d into second position
     166            store.insert(1, store.reader.readRecords([d]).records);
     167           
     168            t.eq(store.getCount(), 4, "[a, d, b, c] four layers in store");
     169            t.eq(store.getAt(0).get("layer").name, "a", "[a, d, b, c] first layer correct in store");
     170            t.eq(store.getAt(1).get("layer").name, "d", "[a, d, b, c] second layer correct in store");
     171            t.eq(store.getAt(2).get("layer").name, "b", "[a, d, b, c] third layer correct in store");
     172            t.eq(store.getAt(3).get("layer").name, "c", "[a, d, b, c] fourth layer correct in store");
     173            t.eq(map.layers.length, 4, "[a, d, b, c] four layers on map");
     174            t.eq(map.layers[0].name, "a", "[a, d, b, c] first layer correct on map");
     175            t.eq(map.layers[1].name, "d", "[a, d, b, c] second layer correct on map");
     176            t.eq(map.layers[2].name, "b", "[a, d, b, c] third layer correct on map");
     177            t.eq(map.layers[3].name, "c", "[a, d, b, c] fourth layer correct on map");
     178           
     179            map.destroy();
     180
     181        }
     182       
    147183
    148184    </script>
Note: See TracChangeset for help on using the changeset viewer.