[Commits] r972 - in apps/opengeo/geoexplorer/trunk/lib: . GeoExplorer/Embed

commits at geoext.org commits at geoext.org
Wed Jun 3 02:21:23 CEST 2009


Author: tschaub
Date: 2009-06-03 02:21:23 +0200 (Wed, 03 Jun 2009)
New Revision: 972

Modified:
   apps/opengeo/geoexplorer/trunk/lib/GeoExplorer.js
   apps/opengeo/geoexplorer/trunk/lib/GeoExplorer/Embed/Embed.js
Log:
Only allow one visible background layer.

Modified: apps/opengeo/geoexplorer/trunk/lib/GeoExplorer/Embed/Embed.js
===================================================================
--- apps/opengeo/geoexplorer/trunk/lib/GeoExplorer/Embed/Embed.js	2009-06-02 22:06:45 UTC (rev 971)
+++ apps/opengeo/geoexplorer/trunk/lib/GeoExplorer/Embed/Embed.js	2009-06-03 00:21:23 UTC (rev 972)
@@ -79,7 +79,7 @@
         
         // create layer store
         this.layers = this.mapPanel.layers;
-        this.initLayerStoreHandlers();
+        this.registerBackgroundListeners();
 
         var addLayerButton = new Ext.Button({
             tooltip : "Add Layers",

Modified: apps/opengeo/geoexplorer/trunk/lib/GeoExplorer.js
===================================================================
--- apps/opengeo/geoexplorer/trunk/lib/GeoExplorer.js	2009-06-02 22:06:45 UTC (rev 971)
+++ apps/opengeo/geoexplorer/trunk/lib/GeoExplorer.js	2009-06-03 00:21:23 UTC (rev 972)
@@ -286,7 +286,7 @@
         
         // create layer store
         this.layers = this.mapPanel.layers;
-        this.initLayerStoreHandlers();                       
+        this.registerBackgroundListeners();                       
 
         var addLayerButton = new Ext.Button({
             tooltip : "Add Layers",
@@ -307,8 +307,6 @@
             }
         });
 
-        //this is a hack around OpenLayers #2111
-        var map = this.map
         var removeLayerAction = new Ext.Action({
             text: "Remove Layer",
             iconCls: "icon-removelayers",
@@ -319,26 +317,10 @@
                 if(node && node.layer) {
                     var layer = node.layer;
                     var store = node.layerStore;
-
                     var record = store.getAt(store.findBy(function(record) {
                         return record.get("layer") === layer;
                     }))
-
-                    //make sure one base layer is always visible.
-                    if(layer.getVisibility() && record.get("background")){
-
-                        var firstBaseLayer = store.getAt(store.findBy(function(record) {
-                            return record.get("background") 
-                                && (record.get("layer") != layer);
-                        }))
-
-                        if(firstBaseLayer){
-                            firstBaseLayer.get("layer").setVisibility(true);
-                        }
-                    }
-
                     store.remove(record);
-
                     removeLayerAction.disable();
                 }
             }
@@ -467,60 +449,64 @@
         });    
     },
 
-    initLayerStoreHandlers: function(){
-        if(!this.layers){
-            console.log("Can't initialize LayerStore handlers without a layer store");
-            return;
-        }
+    registerBackgroundListeners: function() {
+        
+        var updateBackground = function(store, candidate) {
 
-        var prepareBackground = function(store, records, index){
- 
-           var backgroundChanged = function(evt){
-               var changedLayer = evt.object;
-                
-                if(changedLayer.getVisibility()){                    
-                    store.each(function(record){
-                        if(record.get("background") 
-                           && (record.get("layer") 
-                               != changedLayer)){
-                            record.get("layer").setVisibility(false);
-                        }
-                    });
-                } else {
-                    var visibleLayerIndex = store.findBy(function(record){
-                        return record.get("layer").getVisibility() 
-                            && record.get("background");
-                    })
-
-                    if(-1 == visibleLayerIndex){
-                        changedLayer.setVisibility(true);
+            var vis = [], all = [];
+            store.each(function(record) {
+                if(record.get("background")) {
+                    all.push(record);
+                    if(record.get("layer").getVisibility()) {
+                        vis.push(record);
                     }
                 }
-            }
+            });
             
-            var layer;
-            for(var i = 0; i < records.length; i++){
-                if(records[i].get("background")){
-                    layer = records[i].get("layer");
-                   
-                    layer.events.on({
-                        "visibilitychanged" : backgroundChanged
+            if(all.length) {
+                candidate = candidate || all[0];
+                if(vis.length === 0) {
+                    candidate.get("layer").setVisibility(true);
+                } else if(vis.length > 1) {
+                    Ext.each(vis, function(r) {
+                        if(r !== candidate) {
+                            window.setTimeout(function() {
+                                r.get("layer").setVisibility(false);
+                            }, 0);
+                            return false;
+                        }
                     });
-
-                    //to make sure only one visible background layer is set
-                    layer.events.triggerEvent("visibilitychanged");
                 }
             }
-        };
+        }
 
+        // make sure one base layer is always visible after add, remove or update
         this.layers.on({
-            "add" : prepareBackground,
-            scope: this
+            add: function(store, records, index) {
+                var candidate;
+                Ext.each(records, function(r) {
+                    if(r.get("background")) {
+                        candidate = r;
+                        return false;
+                    }
+                });
+                if(candidate) {
+                    updateBackground(store, candidate);
+                }
+            },
+            remove: function(store, record, index) {
+                if(record.get("background")) {
+                    updateBackground(store);
+                }
+            },
+            update: function(store, record, op) {
+                if(record.get("background")) {
+                    updateBackground(store, record);
+                }
+            }
         });
 
     },
-
-
     
     /** private: method[activate]
      * Activate the application.  Call after application is configured.



More information about the Commits mailing list