Changeset 340


Ignore:
Timestamp:
04/03/09 00:57:37 (8 years ago)
Author:
tschaub
Message:

Listen for layer reordering on the map and update store. (see #37)

Location:
sandbox/opengeo/geoexplorer
Files:
3 edited

Legend:

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

    r334 r340  
    9797            this.map = map;
    9898            map.events.on({
     99                "changelayer": this.onLayerChange,
    99100                "addlayer": this.onAddLayer,
    100101                "removelayer": this.onRemoveLayer,
     
    116117        if(this.map) {
    117118            this.map.events.un({
     119                "changelayer": this.onLayerChange,
    118120                "addlayer": this.onAddLayer,
    119121                "removelayer": this.onRemoveLayer,
     
    126128            });
    127129            this.map = null;
     130        }
     131    },
     132   
     133    /**
     134     * Method: onLayerChange
     135     * Handler for layer changes.  When layer order changes, this moves the
     136     *     appropriate record within the store.
     137     *
     138     * Parameters:
     139     * evt - {Object}
     140     */
     141    onLayerChange: function(evt) {
     142        var layer = evt.layer;
     143        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;
     157                }
     158            }
    128159        }
    129160    },
  • sandbox/opengeo/geoexplorer/modifications.txt

    r334 r340  
    99 * Set allOverlays in MapPanel (see #35)
    1010 * Take care not to add records twice in LayerStore (see #36)
     11 * Respect layer order in map and store (see #37)
    1112 * Merge changes from trunk up to r319
    1213
  • sandbox/opengeo/geoexplorer/tests/lib/GeoExt/data/LayerStore.html

    r334 r340  
    9595        }
    9696       
     97        function test_reorder(t) {
     98           
     99            t.plan(24);
     100           
     101            var map = new OpenLayers.Map("mappanel");
     102            var a = new OpenLayers.Layer.Vector("a");
     103            var b = new OpenLayers.Layer.Vector("b");
     104            var c = new OpenLayers.Layer.Vector("c");
     105
     106            var store = new GeoExt.data.LayerStore({
     107                map: map
     108            });
     109           
     110            store.add(store.reader.readRecords([a, b, c]).records);
     111
     112            t.eq(store.getCount(), 3, "[a, b, c] three layers in store");
     113            t.eq(store.getAt(0).get("layer").name, "a", "[a, b, c] first layer correct in store");
     114            t.eq(store.getAt(1).get("layer").name, "b", "[a, b, c] second layer correct in store");
     115            t.eq(store.getAt(2).get("layer").name, "c", "[a, b, c] third layer correct in store");
     116            t.eq(map.layers.length, 3, "[a, b, c] three layers on map");
     117            t.eq(map.layers[0].name, "a", "[a, b, c] first layer correct on map");
     118            t.eq(map.layers[1].name, "b", "[a, b, c] second layer correct on map");
     119            t.eq(map.layers[2].name, "c", "[a, b, c] third layer correct on map");
     120           
     121            // move "a" to second position
     122            map.setLayerIndex(a, 1);
     123
     124            t.eq(store.getCount(), 3, "[b, a, c] three layers in store");
     125            t.eq(store.getAt(0).get("layer").name, "b", "[b, c, a] first layer correct in store");
     126            t.eq(store.getAt(1).get("layer").name, "a", "[b, c, a] second layer correct in store");
     127            t.eq(store.getAt(2).get("layer").name, "c", "[b, c, a] third layer correct in store");
     128            t.eq(map.layers.length, 3, "[a, b, c] three layers on map");
     129            t.eq(map.layers[0].name, "b", "[b, c, a] first layer correct on map");
     130            t.eq(map.layers[1].name, "a", "[b, c, a] second layer correct on map");
     131            t.eq(map.layers[2].name, "c", "[b, c, a] third layer correct on map");
     132           
     133            // move "c" to first position
     134            map.setLayerIndex(c, 0);
     135
     136            t.eq(store.getCount(), 3, "[c, b, a] three layers in store");
     137            t.eq(store.getAt(0).get("layer").name, "c", "[c, b, a] first layer correct in store");
     138            t.eq(store.getAt(1).get("layer").name, "b", "[c, b, a] second layer correct in store");
     139            t.eq(store.getAt(2).get("layer").name, "a", "[c, b, a] third layer correct in store");
     140            t.eq(map.layers.length, 3, "[c, b, a] three layers on map");
     141            t.eq(map.layers[0].name, "c", "[c, b, a] first layer correct on map");
     142            t.eq(map.layers[1].name, "b", "[c, b, a] second layer correct on map");
     143            t.eq(map.layers[2].name, "a", "[c, b, a] third layer correct on map");
     144           
     145           
     146        }
     147
    97148    </script>
    98149  <body>
Note: See TracChangeset for help on using the changeset viewer.