[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