[Commits] r1129 - in sandbox/opengeo/geoexplorer: . build examples lib lib/GeoExt lib/GeoExt/data lib/GeoExt/widgets lib/GeoExt/widgets/form lib/GeoExt/widgets/tips lib/GeoExt/widgets/tree resources/css tests tests/lib/GeoExt/data tests/lib/GeoExt/widgets tests/lib/GeoExt/widgets/tree

commits at geoext.org commits at geoext.org
Tue Jun 23 00:01:49 CEST 2009


Author: tschaub
Date: 2009-06-23 00:01:48 +0200 (Tue, 23 Jun 2009)
New Revision: 1129

Added:
   sandbox/opengeo/geoexplorer/build/Makefile
   sandbox/opengeo/geoexplorer/build/geoext-license.js
   sandbox/opengeo/geoexplorer/resources/css/gxtheme-slate.css
   sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/LegendImage.html
Modified:
   sandbox/opengeo/geoexplorer/build/full.cfg
   sandbox/opengeo/geoexplorer/build/readme.txt
   sandbox/opengeo/geoexplorer/examples/feature-grid.html
   sandbox/opengeo/geoexplorer/examples/feature-grid.js
   sandbox/opengeo/geoexplorer/examples/layercontainer.html
   sandbox/opengeo/geoexplorer/examples/layercontainer.js
   sandbox/opengeo/geoexplorer/examples/legendpanel.html
   sandbox/opengeo/geoexplorer/examples/legendpanel.js
   sandbox/opengeo/geoexplorer/examples/mappanel-div.html
   sandbox/opengeo/geoexplorer/examples/mappanel-div.js
   sandbox/opengeo/geoexplorer/examples/mappanel-viewport.html
   sandbox/opengeo/geoexplorer/examples/mappanel-viewport.js
   sandbox/opengeo/geoexplorer/examples/mappanel-window.html
   sandbox/opengeo/geoexplorer/examples/mappanel-window.js
   sandbox/opengeo/geoexplorer/examples/popup.html
   sandbox/opengeo/geoexplorer/examples/popup.js
   sandbox/opengeo/geoexplorer/examples/search-form.html
   sandbox/opengeo/geoexplorer/examples/search-form.js
   sandbox/opengeo/geoexplorer/examples/toolbar.html
   sandbox/opengeo/geoexplorer/examples/toolbar.js
   sandbox/opengeo/geoexplorer/examples/tree.html
   sandbox/opengeo/geoexplorer/examples/tree.js
   sandbox/opengeo/geoexplorer/examples/wms-capabilities.html
   sandbox/opengeo/geoexplorer/examples/wms-capabilities.js
   sandbox/opengeo/geoexplorer/examples/zoom-chooser.html
   sandbox/opengeo/geoexplorer/examples/zoom-chooser.js
   sandbox/opengeo/geoexplorer/examples/zoomslider.html
   sandbox/opengeo/geoexplorer/examples/zoomslider.js
   sandbox/opengeo/geoexplorer/lib/GeoExt.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/SingleFile.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/data/FeatureReader.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/data/FeatureRecord.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/data/FeatureStore.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/data/LayerReader.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/data/LayerRecord.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/data/LayerStore.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/data/ProtocolProxy.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/data/ScaleStore.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/data/WMSCapabilitiesReader.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/data/WMSCapabilitiesStore.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/Action.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/LegendImage.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/LegendPanel.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/LegendWMS.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/MapPanel.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/Popup.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/ZoomSlider.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/form.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/form/BasicForm.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/form/FormPanel.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/form/SearchAction.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tips/SliderTip.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tips/ZoomSliderTip.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tree/BaseLayerContainer.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tree/LayerContainer.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tree/LayerNode.js
   sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tree/OverlayLayerContainer.js
   sandbox/opengeo/geoexplorer/license.txt
   sandbox/opengeo/geoexplorer/resources/css/gxtheme-gray.css
   sandbox/opengeo/geoexplorer/resources/css/popup.css
   sandbox/opengeo/geoexplorer/tests/lib/GeoExt/data/LayerStore.html
   sandbox/opengeo/geoexplorer/tests/lib/GeoExt/data/ScaleStore.html
   sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/Action.html
   sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/LegendPanel.html
   sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/ZoomSlider.html
   sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/tree/LayerContainer.html
   sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/tree/LayerNode.html
   sandbox/opengeo/geoexplorer/tests/list-tests.html
Log:
merge up to r1128 from trunk

Added: sandbox/opengeo/geoexplorer/build/Makefile
===================================================================
--- sandbox/opengeo/geoexplorer/build/Makefile	                        (rev 0)
+++ sandbox/opengeo/geoexplorer/build/Makefile	2009-06-22 22:01:48 UTC (rev 1129)
@@ -0,0 +1,68 @@
+# Makefile for GeoExplorer apps
+
+LIB_NAME = GeoExt
+ZIP_NAME = $(LIB_NAME).zip
+
+CSS_DIR = $(LIB_NAME)/resources/css
+CSS_IMPORTS = $(shell cat ../resources/css/geoext-all-debug.css | grep '@import' | sed 's/^@import "\(.*\)";/\1/')
+ALL_CSS = $(CSS_DIR)/geoext-all.css
+
+.PHONEY: help clean ext examples lib zip dist
+
+help:
+	@echo "Please use 'make <target>' where <target> is one or more of"
+	@echo "  clean    to clean up after building"
+	@echo "  ext      to make a custom Ext JS build. See readme.txt for requirements"
+	@echo "  examples to make the examples dir"
+	@echo "  lib      to make a standalone dir of lib resources"
+	@echo "  zip      to make a zip archive of a standalone lib"
+	@echo "  dist     to make a zip archive of a standalone lib with examples"
+	@echo
+	@echo "Example use:"
+	@echo "  make lib"
+	@echo "  make lib LIB_NAME=MyLib"
+	@echo "  make zip"
+	@echo "  make zip ZIP_NAME=MyZip.zip"
+
+clean:
+	-rm -rf $(LIB_NAME)
+	-rm -f $(ZIP_NAME)
+
+ext:
+	@echo "Building ext.js."
+	mkdir -p $(LIB_NAME)/script
+	jsbuild full.cfg -v -o $(LIB_NAME)/script/ -s ext.js
+
+examples:
+	mkdir -p $(LIB_NAME)/examples 
+	svn export --force ../examples $(LIB_NAME)/examples
+	for file in `find $(LIB_NAME)/examples/ -name "*.html"`; do \
+	    sed -i "s/\.\.\/lib\/GeoExt\.js/\.\.\/script\/GeoExt\.js/g" $${file} ; \
+	    sed -i "s/geoext-all-debug\.css/geoext-all\.css/g" $${file} ; \
+	done ; 	
+
+lib:
+	@echo "Building the library."
+	mkdir -p $(LIB_NAME)/script $(LIB_NAME)/resources/css
+	
+	jsbuild full.cfg -v -o $(LIB_NAME)/script/ -s GeoExt.js
+	
+	svn export --force ../resources $(LIB_NAME)/resources
+	
+	for file in `find $(CSS_DIR) -name "*.css"`; do \
+	    csstidy $${file} --template=highest $${file} ; \
+	done ;
+	echo "" > $(ALL_CSS)
+	for filename in $(CSS_IMPORTS); do \
+	    cat $(CSS_DIR)/$${filename} >> $(ALL_CSS) ; \
+	done ;
+	-rm $(CSS_DIR)/geoext-all-debug.css
+
+	cp ../license.txt $(LIB_NAME)
+
+zip: lib
+	@echo "Archiving the library."
+	-rm -f $(ZIP_NAME)
+	zip $(ZIP_NAME) -r $(LIB_NAME)
+
+dist: examples zip
\ No newline at end of file

Modified: sandbox/opengeo/geoexplorer/build/full.cfg
===================================================================
--- sandbox/opengeo/geoexplorer/build/full.cfg	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/build/full.cfg	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,5 +1,6 @@
 [GeoExt.js]
 root = ../lib
+license = geoext-license.js
 exclude =
     GeoExt.js
     GeoExt/SingleFile.js

Added: sandbox/opengeo/geoexplorer/build/geoext-license.js
===================================================================
--- sandbox/opengeo/geoexplorer/build/geoext-license.js	                        (rev 0)
+++ sandbox/opengeo/geoexplorer/build/geoext-license.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -0,0 +1,30 @@
+/*
+
+Copyright (c) 2008-2009, The Open Source Geospatial Foundation
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of the Open Source Geospatial Foundation nor the names
+      of its contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+*/

Modified: sandbox/opengeo/geoexplorer/build/readme.txt
===================================================================
--- sandbox/opengeo/geoexplorer/build/readme.txt	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/build/readme.txt	2009-06-22 22:01:48 UTC (rev 1129)
@@ -2,23 +2,54 @@
 ===============
 
 This directory contains configuration files necessary for building GeoExt
-(and ExtJS).  The build configuration is intended for use with the jsbuild
+(and Ext JS).  The build configuration is intended for use with the jsbuild
 utility included in JSTools (http://projects.opengeo.org/jstools).
 
 Brief instructions
 ------------------
 
-Install JSTools.
+This build dir contains a Makefile, which can be used to build GeoExt. The
+build process requires a bash-like shell, make, sed, find and svn. All this
+should be available on well equipped development *nix and OS X boxes. In
+addition, JSTools and csstidy are required. The latter is available as csstidy
+package on debian-style linux systems.
 
+    $ sudo aptitude install csstidy
+
+To install JSTools, python-setuptools is required. This is available as
+python-setuptools package on debian-style linux systems.
+
+    $ sudo aptitude install python-setuptools
+    
+Now you can easily install JSTools.
+
     $ easy_install http://svn.opengeo.org/jstools/trunk/
 
-Change into the core/trunk/build directory.
+Change into the core/trunk/build directory (the one containing the readme.txt
+file you are reading right now), if you are not already here.
 
-    $ cd core/trunk/build
+    $ cd geoext/build
 
-Run jsbuild.
+From here, you can build the library.
 
-    $ jsbuild full.cfg
+    $ make zip
     
-For more complete instructions on building GeoExt, see the documentation
-on the project website: http://www.geoext.org/trac/geoext/wiki/builds.
+Now you can take the resulting GeoExt.zip file and unpack it on your web
+server. The library itself resides in the script folder, the resources folder
+contains css files and images.
+
+For more complete instructions on building GeoExt with jsbuild, see the
+documentation on the project website:
+http://www.geoext.org/trac/geoext/wiki/builds.
+
+The Makefile also contains a target for building Ext JS. This requires Ext JS
+to be installed in ../../ext (relative to this build dir). Make sure to
+provide a license file matching your Ext JS installation and replace the
+provided ext-license.js file with it. To build the library with ext.js in the
+script folder, run make with the ext and zip targets.
+
+    $ make ext zip
+    
+The Makefile has even more targets. Invoke make help to see them all.
+
+    $ make help
\ No newline at end of file

Modified: sandbox/opengeo/geoexplorer/examples/feature-grid.html
===================================================================
--- sandbox/opengeo/geoexplorer/examples/feature-grid.html	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/feature-grid.html	2009-06-22 22:01:48 UTC (rev 1129)
@@ -4,8 +4,8 @@
 
         <script type="text/javascript" src="http://extjs.cachefly.net/builds/ext-cdn-771.js"></script>
         <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/resources/css/ext-all.css" />
-        <link rel="stylesheet" type="text/css" href="http://extjs.com/deploy/dev/examples/shared/examples.css"></link>
-        <script src="http://openlayers.org/api/2.8-rc2/OpenLayers.js"></script>
+        <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/examples/shared/examples.css" />
+        <script src="http://openlayers.org/api/2.8/OpenLayers.js"></script>
         <script type="text/javascript" src="../lib/GeoExt.js"></script>
         
         <script type="text/javascript" src="feature-grid.js"></script>

Modified: sandbox/opengeo/geoexplorer/examples/feature-grid.js
===================================================================
--- sandbox/opengeo/geoexplorer/examples/feature-grid.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/feature-grid.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,3 +1,11 @@
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
+ * Published under the BSD license.
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
+ * of the license.
+ */
+
 Ext.BLANK_IMAGE_URL = "../../../../ext/resources/images/default/s.gif"
 
 var mapPanel, store, gridPanel, mainPanel;

Modified: sandbox/opengeo/geoexplorer/examples/layercontainer.html
===================================================================
--- sandbox/opengeo/geoexplorer/examples/layercontainer.html	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/layercontainer.html	2009-06-22 22:01:48 UTC (rev 1129)
@@ -4,8 +4,8 @@
 
         <script type="text/javascript" src="http://extjs.cachefly.net/builds/ext-cdn-771.js"></script>
         <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/resources/css/ext-all.css" />
-        <link rel="stylesheet" type="text/css" href="http://extjs.com/deploy/dev/examples/shared/examples.css"></link>
-        <script src="http://openlayers.org/api/2.8-rc2/OpenLayers.js"></script>
+        <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/examples/shared/examples.css" />
+        <script src="http://openlayers.org/api/2.8/OpenLayers.js"></script>
         <script type="text/javascript" src="../lib/GeoExt.js"></script>
 
         <script type="text/javascript" src="layercontainer.js"></script>

Modified: sandbox/opengeo/geoexplorer/examples/layercontainer.js
===================================================================
--- sandbox/opengeo/geoexplorer/examples/layercontainer.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/layercontainer.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,3 +1,11 @@
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
+ * Published under the BSD license.
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
+ * of the license.
+ */
+
 var store, tree, panel;
 Ext.onReady(function() {
     

Modified: sandbox/opengeo/geoexplorer/examples/legendpanel.html
===================================================================
--- sandbox/opengeo/geoexplorer/examples/legendpanel.html	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/legendpanel.html	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,10 +1,10 @@
 <html>
     <head>
-        <script type="text/javascript" src="http://dev.geoext.org/trunk/ext/adapter/ext/ext-base.js"></script>
-        <script type="text/javascript" src="http://dev.geoext.org/trunk/ext/ext-all.js"></script>
+        <script type="text/javascript" src="http://extjs.cachefly.net/ext-2.2.1/adapter/ext/ext-base.js"></script>
+        <script type="text/javascript" src="http://extjs.cachefly.net/ext-2.2.1/ext-all.js"></script>
         <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/resources/css/ext-all.css" />
-        <link rel="stylesheet" type="text/css" href="http://extjs.com/deploy/dev/examples/shared/examples.css"></link>
-        <script src="http://openlayers.org/api/2.8-rc2/OpenLayers.js"></script>
+        <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/examples/shared/examples.css" />
+        <script src="http://openlayers.org/api/2.8/OpenLayers.js"></script>
         <script type="text/javascript" src="../lib/GeoExt.js"></script>
 
         <script type="text/javascript" src="legendpanel.js"></script>

Modified: sandbox/opengeo/geoexplorer/examples/legendpanel.js
===================================================================
--- sandbox/opengeo/geoexplorer/examples/legendpanel.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/legendpanel.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,3 +1,10 @@
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
+ * Published under the BSD license.
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
+ * of the license.
+ */
 
 var mapPanel;
 
@@ -6,12 +13,12 @@
     map.addLayers([
         new OpenLayers.Layer.WMS(
             "Tasmania",
-            "http://publicus.opengeo.org/geoserver/wms?",
+            "http://demo.opengeo.org/geoserver/wms?",
             {layers: 'topp:tasmania_state_boundaries', format: 'image/png', transparent: true},
             {singleTile: true}),
         new OpenLayers.Layer.WMS(
             "Cities and Roads",
-            "http://publicus.opengeo.org/geoserver/wms?",
+            "http://demo.opengeo.org/geoserver/wms?",
             {layers: 'topp:tasmania_cities,topp:tasmania_roads', format: 'image/png', transparent: true},
             {singleTile: true}),
         new OpenLayers.Layer.Vector('Polygons', {styleMap: new OpenLayers.StyleMap({
@@ -26,7 +33,7 @@
 
     var addLayer = function() {
         var wmslayer = new OpenLayers.Layer.WMS("Bodies of Water",
-            "http://publicus.opengeo.org/geoserver/wms?",
+            "http://demo.opengeo.org/geoserver/wms?",
             {layers: 'topp:tasmania_water_bodies', format: 'image/png', transparent: true},
             {singleTile: true});
         mapPanel.map.addLayer(wmslayer);

Modified: sandbox/opengeo/geoexplorer/examples/mappanel-div.html
===================================================================
--- sandbox/opengeo/geoexplorer/examples/mappanel-div.html	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/mappanel-div.html	2009-06-22 22:01:48 UTC (rev 1129)
@@ -4,8 +4,8 @@
 
         <script type="text/javascript" src="http://extjs.cachefly.net/builds/ext-cdn-771.js"></script>
         <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/resources/css/ext-all.css" />
-        <link rel="stylesheet" type="text/css" href="http://extjs.com/deploy/dev/examples/shared/examples.css"></link>
-        <script src="http://openlayers.org/api/2.8-rc2/OpenLayers.js"></script>
+        <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/examples/shared/examples.css" />
+        <script src="http://openlayers.org/api/2.8/OpenLayers.js"></script>
         <script type="text/javascript" src="../lib/GeoExt.js"></script>
 
         <script type="text/javascript" src="mappanel-div.js"></script>

Modified: sandbox/opengeo/geoexplorer/examples/mappanel-div.js
===================================================================
--- sandbox/opengeo/geoexplorer/examples/mappanel-div.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/mappanel-div.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,3 +1,10 @@
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
+ * Published under the BSD license.
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
+ * of the license.
+ */
 
 var mapPanel;
 
@@ -4,8 +11,8 @@
 Ext.onReady(function() {
     var map = new OpenLayers.Map();
     var layer = new OpenLayers.Layer.WMS(
-        "bluemarble",
-        "http://sigma.openplans.org/geoserver/wms?",
+        "Global Imagery",
+        "http://demo.opengeo.org/geoserver/wms",
         {layers: 'bluemarble'}
     );
     map.addLayer(layer);

Modified: sandbox/opengeo/geoexplorer/examples/mappanel-viewport.html
===================================================================
--- sandbox/opengeo/geoexplorer/examples/mappanel-viewport.html	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/mappanel-viewport.html	2009-06-22 22:01:48 UTC (rev 1129)
@@ -4,20 +4,14 @@
 
         <script type="text/javascript" src="http://extjs.cachefly.net/builds/ext-cdn-771.js"></script>
         <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/resources/css/ext-all.css" />
-        <link rel="stylesheet" type="text/css" href="http://extjs.com/deploy/dev/examples/shared/examples.css"></link>
-
+        <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/examples/shared/examples.css" />
         <!-- Google Maps API for "localhost" -->
         <!--
         <script src='http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAjpkAC9ePGem0lIq5XcMiuhR_wWLPFku8Ix9i2SXYRVK3e45q1BQUd_beF8dtzKET_EteAjPdGDwqpQ'></script>
         -->
         <!-- Google Maps API for "dev.geoext.org" -->
         <script src='http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAA_5ak-hsiH4j5bQQn7-k66xTWxvN8zH6Ta_pgIhhU0TB7bG8iAhS99ituPif4lG-2CHXoZ3qenLnK1g'></script>
-
-        <script src="http://openlayers.org/api/2.8-rc4/OpenLayers.js"></script>
-        <!--
-        <script type="text/javascript" src="../../openlayers/lib/OpenLayers.js"></script>
-        -->
-
+        <script src="http://openlayers.org/api/2.8/OpenLayers.js"></script>
         <script type="text/javascript" src="../lib/GeoExt.js"></script>
         
         <script type="text/javascript" src="mappanel-viewport.js"></script>

Modified: sandbox/opengeo/geoexplorer/examples/mappanel-viewport.js
===================================================================
--- sandbox/opengeo/geoexplorer/examples/mappanel-viewport.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/mappanel-viewport.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,3 +1,11 @@
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
+ * Published under the BSD license.
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
+ * of the license.
+ */
+
 var mapPanel;
 
 Ext.onReady(function() {
@@ -31,8 +39,8 @@
 
     } else {
         layer = new OpenLayers.Layer.WMS(
-            "bluemarble",
-            "http://sigma.openplans.org/geoserver/wms?",
+            "Global Imagery",
+            "http://demo.opengeo.org/geoserver/wms",
             {layers: 'bluemarble'},
             {isBaseLayer: true}
         );

Modified: sandbox/opengeo/geoexplorer/examples/mappanel-window.html
===================================================================
--- sandbox/opengeo/geoexplorer/examples/mappanel-window.html	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/mappanel-window.html	2009-06-22 22:01:48 UTC (rev 1129)
@@ -4,8 +4,8 @@
 
         <script type="text/javascript" src="http://extjs.cachefly.net/builds/ext-cdn-771.js"></script>
         <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/resources/css/ext-all.css" />
-        <link rel="stylesheet" type="text/css" href="http://extjs.com/deploy/dev/examples/shared/examples.css"></link>
-        <script src="http://openlayers.org/api/2.8-rc2/OpenLayers.js"></script>
+        <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/examples/shared/examples.css" />
+        <script src="http://openlayers.org/api/2.8/OpenLayers.js"></script>
         <script type="text/javascript" src="../lib/GeoExt.js"></script>
         
         <script type="text/javascript" src="mappanel-window.js"></script>

Modified: sandbox/opengeo/geoexplorer/examples/mappanel-window.js
===================================================================
--- sandbox/opengeo/geoexplorer/examples/mappanel-window.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/mappanel-window.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,3 +1,11 @@
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
+ * Published under the BSD license.
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
+ * of the license.
+ */
+
 var mapPanel;
 
 Ext.onReady(function() {
@@ -10,8 +18,8 @@
             xtype: "gx_mappanel",
             id: "mappanel",
             layers: [new OpenLayers.Layer.WMS(
-                "bluemarble",
-                "http://sigma.openplans.org/geoserver/wms?",
+                "Global Imagery",
+                "http://demo.opengeo.org/geoserver/wms",
                 {layers: 'bluemarble'}
             )],
             extent: "-5,35,15,55"

Modified: sandbox/opengeo/geoexplorer/examples/popup.html
===================================================================
--- sandbox/opengeo/geoexplorer/examples/popup.html	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/popup.html	2009-06-22 22:01:48 UTC (rev 1129)
@@ -4,9 +4,9 @@
 
         <script type="text/javascript" src="http://extjs.cachefly.net/builds/ext-cdn-771.js"></script>
         <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/resources/css/ext-all.css" />
-        <link rel="stylesheet" type="text/css" href="http://extjs.com/deploy/dev/examples/shared/examples.css"></link>
+        <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/examples/shared/examples.css" />
         <link rel="stylesheet" type="text/css" href="../resources/css/geoext-all-debug.css" />
-        <script src="http://openlayers.org/api/2.8-rc2/OpenLayers.js"></script>
+        <script src="http://openlayers.org/api/2.8/OpenLayers.js"></script>
         <script type="text/javascript" src="../lib/GeoExt.js"></script>
         
         <script type="text/javascript" src="popup.js"></script>

Modified: sandbox/opengeo/geoexplorer/examples/popup.js
===================================================================
--- sandbox/opengeo/geoexplorer/examples/popup.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/popup.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,3 +1,11 @@
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
+ * Published under the BSD license.
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
+ * of the license.
+ */
+
 // make the references to the map panel and the popup 
 // global, this is useful for looking at their states
 // from the console

Modified: sandbox/opengeo/geoexplorer/examples/search-form.html
===================================================================
--- sandbox/opengeo/geoexplorer/examples/search-form.html	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/search-form.html	2009-06-22 22:01:48 UTC (rev 1129)
@@ -2,8 +2,8 @@
     <head>
         <script type="text/javascript" src="http://extjs.cachefly.net/builds/ext-cdn-771.js"></script>
         <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/resources/css/ext-all.css" />
-        <link rel="stylesheet" type="text/css" href="http://extjs.com/deploy/dev/examples/shared/examples.css"></link>
-        <script src="http://openlayers.org/api/2.8-rc2/OpenLayers.js"></script>
+        <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/examples/shared/examples.css" />
+        <script src="http://openlayers.org/api/2.8/OpenLayers.js"></script>
         <script type="text/javascript" src="../lib/GeoExt.js"></script>
 
         <script type="text/javascript" src="search-form.js"></script>

Modified: sandbox/opengeo/geoexplorer/examples/search-form.js
===================================================================
--- sandbox/opengeo/geoexplorer/examples/search-form.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/search-form.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,3 +1,10 @@
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
+ * Published under the BSD license.
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
+ * of the license.
+ */
 
 var formPanel;
 

Modified: sandbox/opengeo/geoexplorer/examples/toolbar.html
===================================================================
--- sandbox/opengeo/geoexplorer/examples/toolbar.html	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/toolbar.html	2009-06-22 22:01:48 UTC (rev 1129)
@@ -3,18 +3,9 @@
         <title>GeoExt Toolbar Example</title>
 
         <script type="text/javascript" src="http://extjs.cachefly.net/builds/ext-cdn-771.js"></script>
-        <!--
-        <script type="text/javascript" src="../../ext/adapter/ext/ext-base.js"></script>
-        <script type="text/javascript" src="../../ext/ext-all-debug.js"></script>
-        <link rel="stylesheet" type="text/css" href="../../ext/resources/css/ext-all.css" />
-        <link rel="stylesheet" type="text/css" href="../../ext/examples/shared/examples.css"></link>
-        -->
         <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/resources/css/ext-all.css" />
-        <link rel="stylesheet" type="text/css" href="http://extjs.com/deploy/dev/examples/shared/examples.css"></link>
-        <script src="http://openlayers.org/api/2.8-rc2/OpenLayers.js"></script>
-        <!--
-        <script src="../../openlayers/lib/OpenLayers.js"></script>
-        -->
+        <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/examples/shared/examples.css" />
+        <script src="http://openlayers.org/api/2.8/OpenLayers.js"></script>
         <script type="text/javascript" src="../lib/GeoExt.js"></script>
 
         <script type="text/javascript" src="toolbar.js"></script>

Modified: sandbox/opengeo/geoexplorer/examples/toolbar.js
===================================================================
--- sandbox/opengeo/geoexplorer/examples/toolbar.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/toolbar.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,3 +1,10 @@
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
+ * Published under the BSD license.
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
+ * of the license.
+ */
 
 Ext.onReady(function() {
     var map = new OpenLayers.Map();
@@ -2,4 +9,4 @@
     var wms = new OpenLayers.Layer.WMS(
-        "bluemarble",
-        "http://sigma.openplans.org/geoserver/wms?",
+        "Global Imagery",
+        "http://demo.opengeo.org/geoserver/wms",
         {layers: 'bluemarble'}

Modified: sandbox/opengeo/geoexplorer/examples/tree.html
===================================================================
--- sandbox/opengeo/geoexplorer/examples/tree.html	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/tree.html	2009-06-22 22:01:48 UTC (rev 1129)
@@ -4,8 +4,8 @@
         
         <script type="text/javascript" src="http://extjs.cachefly.net/builds/ext-cdn-771.js"></script>
         <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/resources/css/ext-all.css" />
-        <link rel="stylesheet" type="text/css" href="http://extjs.com/deploy/dev/examples/shared/examples.css"></link>
-        <script src="http://openlayers.org/api/2.8-rc2/OpenLayers.js"></script>
+        <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/examples/shared/examples.css" />
+        <script src="http://openlayers.org/api/2.8/OpenLayers.js"></script>
         <script type="text/javascript" src="../lib/GeoExt.js"></script>
 
         <script type="text/javascript" src="tree.js"></script>

Modified: sandbox/opengeo/geoexplorer/examples/tree.js
===================================================================
--- sandbox/opengeo/geoexplorer/examples/tree.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/tree.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,3 +1,11 @@
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
+ * Published under the BSD license.
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
+ * of the license.
+ */
+
 var mapPanel;
 Ext.onReady(function() {
     // using OpenLayers.Format.JSON to create a nice formatted string of the
@@ -24,8 +32,8 @@
         center: [146.1569825, -41.6109735],
         zoom: 6,
         layers: [
-            new OpenLayers.Layer.WMS("Blue Marble",
-                "http://sigma.openplans.org/geoserver/wms", {
+            new OpenLayers.Layer.WMS("Global Imagery",
+                "http://demo.opengeo.org/geoserver/wms", {
                     layers: "bluemarble"
                 }, {
                     buffer: 0,

Modified: sandbox/opengeo/geoexplorer/examples/wms-capabilities.html
===================================================================
--- sandbox/opengeo/geoexplorer/examples/wms-capabilities.html	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/wms-capabilities.html	2009-06-22 22:01:48 UTC (rev 1129)
@@ -4,8 +4,8 @@
 
         <script type="text/javascript" src="http://extjs.cachefly.net/builds/ext-cdn-771.js"></script>
         <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/resources/css/ext-all.css" />
-        <link rel="stylesheet" type="text/css" href="http://extjs.com/deploy/dev/examples/shared/examples.css"></link>
-        <script src="http://openlayers.org/api/2.8-rc2/OpenLayers.js"></script>
+        <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/examples/shared/examples.css" />
+        <script src="http://openlayers.org/api/2.8/OpenLayers.js"></script>
         <script type="text/javascript" src="../lib/GeoExt.js"></script>
         
         <script type="text/javascript" src="wms-capabilities.js"></script>

Modified: sandbox/opengeo/geoexplorer/examples/wms-capabilities.js
===================================================================
--- sandbox/opengeo/geoexplorer/examples/wms-capabilities.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/wms-capabilities.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,3 +1,11 @@
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
+ * Published under the BSD license.
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
+ * of the license.
+ */
+
 var store;
 Ext.onReady(function() {
     
@@ -30,7 +38,6 @@
     function mapPreview(grid, index) {
         var record = grid.getStore().getAt(index);
         var layer = record.get("layer").clone();
-        layer.isBaseLayer = true; // default is false
         
         var win = new Ext.Window({
             title: "Preview: " + record.get("title"),

Modified: sandbox/opengeo/geoexplorer/examples/zoom-chooser.html
===================================================================
--- sandbox/opengeo/geoexplorer/examples/zoom-chooser.html	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/zoom-chooser.html	2009-06-22 22:01:48 UTC (rev 1129)
@@ -4,8 +4,8 @@
 
         <script type="text/javascript" src="http://extjs.cachefly.net/builds/ext-cdn-771.js"></script>
         <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/resources/css/ext-all.css" />
-        <link rel="stylesheet" type="text/css" href="http://extjs.com/deploy/dev/examples/shared/examples.css"></link>
-        <script src="http://openlayers.org/api/2.8-rc2/OpenLayers.js"></script>
+        <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/examples/shared/examples.css" />
+        <script src="http://openlayers.org/api/2.8/OpenLayers.js"></script>
         <script type="text/javascript" src="../lib/GeoExt.js"></script>
         
         <script type="text/javascript" src="zoom-chooser.js"></script>

Modified: sandbox/opengeo/geoexplorer/examples/zoom-chooser.js
===================================================================
--- sandbox/opengeo/geoexplorer/examples/zoom-chooser.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/zoom-chooser.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,3 +1,10 @@
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
+ * Published under the BSD license.
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
+ * of the license.
+ */
 
 var mapPanel;
 
@@ -4,8 +11,8 @@
 Ext.onReady(function() {
     var map = new OpenLayers.Map();
     var layer = new OpenLayers.Layer.WMS(
-        "bluemarble",
-        "http://sigma.openplans.org/geoserver/wms?",
+        "Global Imagery",
+        "http://demo.opengeo.org/geoserver/wms",
         {layers: 'bluemarble'}
     );
     map.addLayer(layer);

Modified: sandbox/opengeo/geoexplorer/examples/zoomslider.html
===================================================================
--- sandbox/opengeo/geoexplorer/examples/zoomslider.html	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/zoomslider.html	2009-06-22 22:01:48 UTC (rev 1129)
@@ -4,8 +4,8 @@
 
         <script type="text/javascript" src="http://extjs.cachefly.net/builds/ext-cdn-771.js"></script>
         <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/resources/css/ext-all.css" />
-        <link rel="stylesheet" type="text/css" href="http://extjs.com/deploy/dev/examples/shared/examples.css"></link>
-        <script src="http://openlayers.org/api/2.8-rc2/OpenLayers.js"></script>
+        <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/examples/shared/examples.css" />
+        <script src="http://openlayers.org/api/2.8/OpenLayers.js"></script>
         <script type="text/javascript" src="../lib/GeoExt.js"></script>
 
         <script type="text/javascript" src="zoomslider.js"></script>

Modified: sandbox/opengeo/geoexplorer/examples/zoomslider.js
===================================================================
--- sandbox/opengeo/geoexplorer/examples/zoomslider.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/examples/zoomslider.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,3 +1,11 @@
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
+ * Published under the BSD license.
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
+ * of the license.
+ */
+
 var panel, slider;
 
 Ext.onReady(function() {
@@ -30,6 +38,7 @@
     // create a separate slider bound to the map but displayed elsewhere
     slider = new GeoExt.ZoomSlider({
         map: panel.map,
+        aggressive: true,                                                                                                                                                   
         width: 200,
         plugins: new GeoExt.ZoomSliderTip({
             template: "<div>Zoom Level: {zoom}</div>"

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/SingleFile.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/SingleFile.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/SingleFile.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,20 +1,9 @@
-/*
- * Copyright (C) 2007-2008  Camptocamp, OpenGeo
- *
- * This file is part of GeoExt
- *
- * GeoExt is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GeoExt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GeoExt.  If not, see <http://www.gnu.org/licenses/>.
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
+ * Published under the BSD license.
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
+ * of the license.
  */
 
 Ext.namespace("GeoExt");

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/data/FeatureReader.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/data/FeatureReader.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/data/FeatureReader.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,20 +1,9 @@
-/*
- * Copyright (C) 2008 Eric Lemoine, Camptocamp France SAS
- *
- * This file is part of GeoExt
- *
- * GeoExt is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GeoExt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GeoExt.  If not, see <http://www.gnu.org/licenses/>.
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
+ * Published under the BSD license.
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
+ * of the license.
  */
 
 /**

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/data/FeatureRecord.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/data/FeatureRecord.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/data/FeatureRecord.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,9 +1,10 @@
-/* Copyright (C) 2008-2009 The Open Source Geospatial Foundation
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
  * Published under the BSD license.
- * See http://geoext.org/svn/geoext/core/trunk/license.txt for the full text
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
  * of the license.
- * 
- * pending approval */
+ */
 
 /** api: (define)
  *  module = GeoExt.data

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/data/FeatureStore.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/data/FeatureStore.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/data/FeatureStore.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,9 +1,10 @@
-/* Copyright (C) 2008-2009 The Open Source Geospatial Foundation ¹
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
  * Published under the BSD license.
- * See http://geoext.org/svn/geoext/core/trunk/license.txt for the full text
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
  * of the license.
- * 
- * ¹ pending approval */
+ */
 
 /**
  * @include GeoExt/data/FeatureReader.js

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/data/LayerReader.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/data/LayerReader.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/data/LayerReader.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,9 +1,10 @@
-/* Copyright (C) 2008-2009 The Open Source Geospatial Foundation
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
  * Published under the BSD license.
- * See http://geoext.org/svn/geoext/core/trunk/license.txt for the full text
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
  * of the license.
- * 
- * ¹ pending approval */
+ */
 
 /**
  * @include GeoExt/data/LayerRecord.js

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/data/LayerRecord.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/data/LayerRecord.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/data/LayerRecord.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,9 +1,10 @@
-/* Copyright (C) 2008-2009 The Open Source Geospatial Foundation
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
  * Published under the BSD license.
- * See http://geoext.org/svn/geoext/core/trunk/license.txt for the full text
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
  * of the license.
- * 
- * pending approval */
+ */
 
 /** api: (define)
  *  module = GeoExt.data

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/data/LayerStore.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/data/LayerStore.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/data/LayerStore.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,9 +1,10 @@
-/* Copyright (C) 2008-2009 The Open Source Geospatial Foundation ¹
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
  * Published under the BSD license.
- * See http://geoext.org/svn/geoext/core/trunk/license.txt for the full text
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
  * of the license.
- * 
- * ¹ pending approval */
+ */
 
 /**
  * @include GeoExt/data/LayerReader.js
@@ -154,6 +155,7 @@
             "clear": this.onClear,
             "add": this.onAdd,
             "remove": this.onRemove,
+            "update": this.onUpdate,
             scope: this
         });
         this.data.on({
@@ -209,6 +211,8 @@
                         delete this._adding;
                     }
                 }
+            } else if(evt.property === "name") {
+                record.set("title", layer.name);
             } else {
                 this.fireEvent("update", this, record, Ext.data.Record.EDIT);
             }
@@ -235,11 +239,18 @@
      *  Handler for a map's removelayer event
      */
     onRemoveLayer: function(evt){
-        if(!this._removing) {
-            var layer = evt.layer;
-            this._removing = true;
-            this.remove(this.getById(layer.id));
-            delete this._removing;
+        //TODO replace the check for undloadDestroy with a listener for the
+        // map's beforedestroy event, doing unbind(). This can be done as soon
+        // as http://trac.openlayers.org/ticket/2136 is fixed.
+        if(this.map.unloadDestroy) {
+            if(!this._removing) {
+                var layer = evt.layer;
+                this._removing = true;
+                this.remove(this.getById(layer.id));
+                delete this._removing;
+            }
+        } else {
+            this.unbind();
         }
     },
     
@@ -327,6 +338,23 @@
             }
         }
     },
+    
+    /** private: method[onUpdate]
+     *  :param store: ``Ext.data.Store``
+     *  :param record: ``Ext.data.Record``
+     *  :param operation: ``Number``
+     * 
+     *  Handler for a store's update event
+     */
+    onUpdate: function(store, record, operation) {
+        if(operation === Ext.data.Record.EDIT) {
+            var layer = record.get("layer");
+            var title = record.get("title");
+            if(title !== layer.name) {
+                layer.setName(title);
+            }
+        }
+    },
 
     /** private: method[removeMapLayer]
      *  :param record: ``Ext.data.Record``
@@ -348,6 +376,13 @@
      */
     onReplace: function(key, oldRecord, newRecord){
         this.removeMapLayer(oldRecord);
+    },
+    
+    /** private: method[destroy]
+     */
+    destroy: function() {
+        this.unbind();
+        GeoExt.data.LayerStore.superclass.destroy.call(this);
     }
 };
 

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/data/ProtocolProxy.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/data/ProtocolProxy.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/data/ProtocolProxy.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,20 +1,9 @@
-/*
- * Copyright (C) 2008 Eric Lemoine, Camptocamp France SAS
- *
- * This file is part of GeoExt
- *
- * GeoExt is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GeoExt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GeoExt.  If not, see <http://www.gnu.org/licenses/>.
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
+ * Published under the BSD license.
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
+ * of the license.
  */
 
 /** api: (define)
@@ -32,7 +21,7 @@
 /** api: constructor
  *  .. class:: ProtocolProxy
  *   
- *      A data proxy for use with ``OpenLayers.Proxy`` objects.
+ *      A data proxy for use with ``OpenLayers.Protocol`` objects.
  */
 Ext.extend(GeoExt.data.ProtocolProxy, Ext.data.DataProxy, {
 

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/data/ScaleStore.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/data/ScaleStore.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/data/ScaleStore.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,9 +1,10 @@
-/* Copyright (C) 2008-2009 The Open Source Geospatial Foundation ¹
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
  * Published under the BSD license.
- * See http://geoext.org/svn/geoext/core/trunk/license.txt for the full text
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
  * of the license.
- * 
- * ¹ pending approval */
+ */
 
 /** api: (define)
  *  module = GeoExt.data
@@ -48,7 +49,9 @@
 
         GeoExt.data.ScaleStore.superclass.constructor.call(this, config);
 
-        if (map) this.bind(map);
+        if (map) {
+            this.bind(map);
+        }
     },
 
     /** api: method[bind]
@@ -103,13 +106,16 @@
      */
     populateFromMap: function() {
         var zooms = [];
+        var resolutions = this.map.baseLayer.resolutions;
+        var units = this.map.baseLayer.units;
 
-        for (var i = this.map.numZoomLevels-1; i > 0; i--) { 
-            var res = this.map.getResolutionForZoom(i);
-            var units = this.map.baseLayer.units;
-            var scale = OpenLayers.Util.getScaleFromResolution(res, units);
-
-            zooms.push({level: i, resolution: res, scale: scale});
+        for (var i=resolutions.length-1; i >= 0; i--) {
+            var res = resolutions[i];
+            zooms.push({
+                level: i,
+                resolution: res,
+                scale: OpenLayers.Util.getScaleFromResolution(res, units)
+            });
         }
 
         this.loadData(zooms);

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/data/WMSCapabilitiesReader.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/data/WMSCapabilitiesReader.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/data/WMSCapabilitiesReader.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,7 +1,15 @@
 /**
- * Copyright (c) 2008 The Open Planning Project
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
+ * Published under the BSD license.
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
+ * of the license.
  */
 
+/**
+ * @include GeoExt/data/LayerRecord.js
+ */
+
 /** api: (define)
  *  module = GeoExt.data
  *  class = WMSCapabilitiesReader

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/data/WMSCapabilitiesStore.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/data/WMSCapabilitiesStore.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/data/WMSCapabilitiesStore.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,5 +1,9 @@
 /**
- * Copyright (c) 2008 The Open Planning Project
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
+ * Published under the BSD license.
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
+ * of the license.
  */
 
 /**

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/Action.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/Action.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/Action.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,9 +1,10 @@
-/* Copyright (C) 2008-2009 The Open Source Geospatial Foundation
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
  * Published under the BSD license.
- * See http://geoext.org/svn/geoext/core/trunk/license.txt for the full text
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
  * of the license.
- * 
- * pending approval */
+ */
 
 /** api: (define)
  *  module = GeoExt
@@ -17,10 +18,9 @@
  * 
  *  .. code-block:: javascript
  *  
- *      var ctrl = new OpenLayers.Control.ZoomToMaxExtent();
- *      var action = new GeoExt.Action(ctrl, {
- *          text: "max extent"
- *          control: ctrl,
+ *      var action = new GeoExt.Action({
+ *          text: "max extent",
+ *          control: new OpenLayers.Control.ZoomToMaxExtent(),
  *          map: map
  *      });
  *      var toolbar = new Ext.Toolbar([action]);
@@ -42,6 +42,13 @@
      */
     control: null,
 
+    /** api: config[map]
+     *  ``OpenLayers.Map`` The OpenLayers map that the control should be added
+     *  to.  For controls that don't need to be added to a map or have already
+     *  been added to one, this config property may be omitted.
+     */
+    map: null,
+
     /** private: property[uScope]
      *  ``Object`` The user-provided scope, used when calling uHandler,
      *  uToggleHandler, and uCheckHandler.
@@ -91,6 +98,7 @@
             // If map is provided in config, add control to map.
             if(config.map) {
                 config.map.addControl(ctrl);
+                delete config.map;
             }
             ctrl.events.on({
                 activate: this.onCtrlActivate,

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/LegendImage.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/LegendImage.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/LegendImage.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,13 +1,15 @@
-/* Copyright (C) 2008-2009 The Open Source Geospatial Foundation
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
  * Published under the BSD license.
- * See http://geoext.org/svn/geoext/core/trunk/license.txt for the full text
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
  * of the license.
- * 
- * pending approval */
+ */
 
 /** api: (define)
  *  module = GeoExt
  *  class = LegendImage
+ *  base_link = `Ext.Panel <http://extjs.com/deploy/dev/docs/?class=Ext.Panel>`_
  */
 
 Ext.namespace('GeoExt');
@@ -24,19 +26,31 @@
      *  ``String``  The url of the image to load
      */
     url: null,
+    
+    /** api: config[defaultImgSrc]
+     *  ``String`` Path to image that will be used if the legend image fails
+     *  to load.  Default is Ext.BLANK_IMAGE_URL.
+     */
+    defaultImgSrc: null,
 
     /** api: config[imgCls]
      *  ``String``  Optional css class to apply to img tag
      */
     imgCls: null,
-
+    
     /** private: method[initComponent]
      *  Initializes the legend image component. 
      */
     initComponent: function() {
         GeoExt.LegendImage.superclass.initComponent.call(this);
-        this.autoEl = {tag: 'img',
-            'class': (this.imgCls ? this.imgCls : ''), src: this.url};
+        if(this.defaultImgSrc === null) {
+            this.defaultImgSrc = Ext.BLANK_IMAGE_URL;
+        }
+        this.autoEl = {
+            tag: "img",
+            "class": (this.imgCls ? this.imgCls : ""),
+            src: this.defaultImgSrc
+        };
     },
 
     /** api: method[setUrl]
@@ -45,8 +59,11 @@
      *  Sets the url of the image.
      */
     setUrl: function(url) {
+        this.url = url;
         var el = this.getEl();
         if (el) {
+            el.un("error", this.onImageLoadError, this);
+            el.on("error", this.onImageLoadError, this, {single: true});
             el.dom.src = url;
         }
     },
@@ -57,14 +74,19 @@
      */
     onRender: function(ct, position) {
         GeoExt.LegendImage.superclass.onRender.call(this, ct, position);
-        this.getEl().on('error', this.onImageLoadError, this);
+        if(this.url) {
+            this.setUrl(this.url);
+        }
     },
 
     /** private: method[onDestroy]
      *  Private method called during the destroy sequence.
      */
     onDestroy: function() {
-        this.getEl().un('error', this.onImageLoadError, this);
+        var el = this.getEl();
+        if(el) {
+            el.un("error", this.onImageLoadError, this);
+        }
         GeoExt.LegendImage.superclass.onDestroy.apply(this, arguments);
     },
     
@@ -72,9 +94,10 @@
      *  Private method called if the legend image fails loading.
      */
     onImageLoadError: function() {
-        this.getEl().dom.src = Ext.BLANK_IMAGE_URL;
+        this.getEl().dom.src = this.defaultImgSrc;
     }
 
 });
 
+
 Ext.reg('gx_legendimage', GeoExt.LegendImage);

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/LegendPanel.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/LegendPanel.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/LegendPanel.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,13 +1,15 @@
-/* Copyright (C) 2008-2009 The Open Source Geospatial Foundation
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
  * Published under the BSD license.
- * See http://geoext.org/svn/geoext/core/trunk/license.txt for the full text
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
  * of the license.
- *
- * pending approval */
+ */
 
 /** api: (define)
  *  module = GeoExt
  *  class = LegendPanel
+ *  base_link = `Ext.Panel <http://extjs.com/deploy/dev/docs/?class=Ext.Panel>`_
  */
 
 Ext.namespace('GeoExt');
@@ -96,6 +98,7 @@
         var store = this.layerStore;
         var count = store.getCount();
         var panelIndex = -1;
+        var legendCount = this.items ? this.items.length : 0;
         for(var i=count-1; i>=0; --i) {
             var layer = store.getAt(i).get("layer");
             var legendGenerator = GeoExt[
@@ -104,7 +107,7 @@
             if(layer.displayInLayerSwitcher && legendGenerator &&
                 (store.getAt(i).get("hideInLegend") !== true)) {
                     ++panelIndex;
-                    if(index === i) {
+                    if(index === i || panelIndex > legendCount-1) {
                         break;
                     }
             }
@@ -126,6 +129,11 @@
     onStoreUpdate: function(store, record, operation) {
         var layer = record.get('layer');
         var legend = this.getComponent(layer.id);
+        if ((this.showTitle && !record.get('hideTitle')) && 
+            (legend.items.get(0).text !== record.get('title'))) {
+                // we need to update the title
+                legend.items.get(0).setText(record.get('title'));
+        }
         if (legend) {
             legend.setVisible(layer.getVisibility() && 
                 layer.displayInLayerSwitcher && !record.get('hideInLegend'));
@@ -148,7 +156,7 @@
      *  :param index: ``Integer`` The index of the inserted record.
      */
     onStoreAdd: function(store, records, index) {
-        var panelIndex = this.recordIndexToPanelIndex(index);
+        var panelIndex = this.recordIndexToPanelIndex(index+records.length-1);
         for (var i=0, len=records.length; i<len; i++) {
             this.addLegend(records[i], panelIndex);
         }
@@ -278,4 +286,4 @@
     
 });
 
-Ext.reg('gx_legendpanel', GeoExt.LegendPanel);
\ No newline at end of file
+Ext.reg('gx_legendpanel', GeoExt.LegendPanel);

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/LegendWMS.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/LegendWMS.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/LegendWMS.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,9 +1,10 @@
-/* Copyright (C) 2008-2009 The Open Source Geospatial Foundation
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
  * Published under the BSD license.
- * See http://geoext.org/svn/geoext/core/trunk/license.txt for the full text
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
  * of the license.
- *
- * pending approval */
+ */
 
 /**
  * @include GeoExt/widgets/LegendImage.js
@@ -12,6 +13,7 @@
 /** api: (define)
  *  module = GeoExt
  *  class = LegendWMS
+ *  base_link = `Ext.Panel <http://extjs.com/deploy/dev/docs/?class=Ext.Panel>`_
  */
 Ext.namespace('GeoExt');
 

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/MapPanel.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/MapPanel.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/MapPanel.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,9 +1,10 @@
-/* Copyright (C) 2008-2009 The Open Source Geospatial Foundation ¹
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
  * Published under the BSD license.
- * See http://geoext.org/svn/geoext/core/trunk/license.txt for the full text
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
  * of the license.
- * 
- * ¹ pending approval */
+ */
 
 /**
  * @include GeoExt/data/LayerStore.js

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/Popup.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/Popup.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/Popup.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,9 +1,9 @@
-/* Copyright (C) 2008-2009 The Open Source Geospatial Foundation [1]
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
  * Published under the BSD license.
- * See http://geoext.org/svn/geoext/core/trunk/license.txt for the full text
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
  * of the license.
- * 
- * [1] pending approval
  */
 
 /** api: (define)

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/ZoomSlider.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/ZoomSlider.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/ZoomSlider.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,5 +1,9 @@
 /**
- * Copyright (c) 2008 The Open Planning Project
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
+ * Published under the BSD license.
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
+ * of the license.
  */
 
 /**
@@ -43,6 +47,7 @@
  *          extent: [-5, 35, 15, 55],
  *          items: [{
  *              xtype: "gx_zoomslider",
+ *              aggressive: true,
  *              vertical: true,
  *              height: 100,
  *              x: 10,
@@ -69,6 +74,13 @@
      *  The CSS class name for the slider elements.  Default is "gx-zoomslider".
      */
     baseCls: "gx-zoomslider",
+
+    /** api: config[aggressive]
+     *  ``Boolean``
+     *  If set to true, the map is zoomed as soon as the thumb is moved. Otherwise 
+     *  the map is zoomed when the thumb is released (default).
+     */
+    aggressive: false,
     
     /** private: property[updating]
      *  ``Boolean``
@@ -88,12 +100,13 @@
             }
             this.bind(this.map);
         }
-        this.on({
-            "changecomplete": this.changeHandler,
-            "beforedestroy": this.unbind,
-            scope: this
-        });
-        
+
+        if (this.aggressive === true) {
+            this.on('change', this.changeHandler, this);
+        } else {
+            this.on('changecomplete', this.changeHandler, this);
+        }
+        this.on("beforedestroy", this.unbind, this);        
     },
     
     /** private: method[onRender]

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/form/BasicForm.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/form/BasicForm.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/form/BasicForm.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,9 +1,10 @@
-/* Copyright (C) 2008-2009 The Open Source Geospatial Foundation
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
  * Published under the BSD license.
- * See http://geoext.org/svn/geoext/core/trunk/license.txt for the full text
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
  * of the license.
- * 
- * pending approval */
+ */
 
 /**
  * @include GeoExt/widgets/form/SearchAction.js

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/form/FormPanel.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/form/FormPanel.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/form/FormPanel.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,9 +1,10 @@
-/* Copyright (C) 2008-2009 The Open Source Geospatial Foundation
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
  * Published under the BSD license.
- * See http://geoext.org/svn/geoext/core/trunk/license.txt for the full text
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
  * of the license.
- * 
- * pending approval */
+ */
 
 /** api: (define)
  *  module = GeoExt.form

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/form/SearchAction.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/form/SearchAction.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/form/SearchAction.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,9 +1,10 @@
-/* Copyright (C) 2008-2009 The Open Source Geospatial Foundation
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
  * Published under the BSD license.
- * See http://geoext.org/svn/geoext/core/trunk/license.txt for the full text
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
  * of the license.
- * 
- * pending approval */
+ */
 
 /** api: (define)
  *  module = GeoExt.form

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/form.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/form.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/form.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,9 +1,10 @@
-/* Copyright (C) 2008-2009 The Open Source Geospatial Foundation
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
  * Published under the BSD license.
- * See http://geoext.org/svn/geoext/core/trunk/license.txt for the full text
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
  * of the license.
- * 
- * pending approval */
+ */
 
 Ext.namespace("GeoExt.form");
 

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tips/SliderTip.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tips/SliderTip.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tips/SliderTip.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,5 +1,9 @@
 /**
- * Copyright (c) 2008 The Open Planning Project
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
+ * Published under the BSD license.
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
+ * of the license.
  */
 
 /** api: (define)

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tips/ZoomSliderTip.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tips/ZoomSliderTip.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tips/ZoomSliderTip.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,9 +1,13 @@
 /**
- * Copyright (c) 2008 The Open Planning Project
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
+ * Published under the BSD license.
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
+ * of the license.
  */
 
 /**
- * @include GeoExt/widgets/tips/SliderTip.js
+ * @requires GeoExt/widgets/tips/SliderTip.js
  */
 
 /** api: (extends)
@@ -69,7 +73,7 @@
     /** private: method[getText]
      *  :param slider: ``Ext.Slider`` The slider this tip is attached to.
      */
-    getText : function(slider) {
+    getText: function(slider) {
         var data = {
             zoom: slider.getZoom(),
             resolution: slider.getResolution(),

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tree/BaseLayerContainer.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tree/BaseLayerContainer.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tree/BaseLayerContainer.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,9 +1,10 @@
-/* Copyright (C) 2008-2009 The Open Source Geospatial Foundation ¹
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
  * Published under the BSD license.
- * See http://geoext.org/svn/geoext/core/trunk/license.txt for the full text
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
  * of the license.
- * 
- * ¹ pending approval */
+ */
 
 /**
  * @requires GeoExt/widgets/tree/LayerContainer.js

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tree/LayerContainer.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tree/LayerContainer.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tree/LayerContainer.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,9 +1,10 @@
-/* Copyright (C) 2008-2009 The Open Source Geospatial Foundation ¹
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
  * Published under the BSD license.
- * See http://geoext.org/svn/geoext/core/trunk/license.txt for the full text
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
  * of the license.
- * 
- * ¹ pending approval */
+ */
 
 /**
  * @include GeoExt/widgets/tree/LayerNode.js
@@ -79,7 +80,7 @@
      */
     onStoreAdd: function(store, records, index) {
         if(!this._reordering) {
-            var nodeIndex = this.recordIndexToNodeIndex(index);
+            var nodeIndex = this.recordIndexToNodeIndex(index+records.length-1);
             for(var i=0; i<records.length; ++i) {
                 this.addLayerNode(records[i], nodeIndex);
             }
@@ -99,16 +100,6 @@
         }
     },
 
-    /** private: method[onDestroy]
-     */
-    onDestroy: function() {
-        if(this.layerStore) {
-            this.layerStore.un("add", this.onStoreAdd, this);
-            this.layerStore.un("remove", this.onStoreRemove, this);
-        }
-        GeoExt.tree.LayerContainer.superclass.onDestroy.apply(this, arguments);
-    },
-    
     /** private: method[recordIndexToNodeIndex]
      *  :param index: ``Number`` The record index in the layer store.
      *  :return: ``Number`` The appropriate child node index for the record.
@@ -116,11 +107,12 @@
     recordIndexToNodeIndex: function(index) {
         var store = this.layerStore;
         var count = store.getCount();
+        var nodeCount = this.childNodes.length;
         var nodeIndex = -1;
         for(var i=count-1; i>=0; --i) {
             if(store.getAt(i).get("layer").displayInLayerSwitcher) {
                 ++nodeIndex;
-                if(index === i) {
+                if(index === i || nodeIndex > nodeCount-1) {
                     break;
                 }
             }
@@ -161,7 +153,7 @@
         var layer = layerRecord.get("layer");
         if (layer.displayInLayerSwitcher === true) {
             var node = new GeoExt.tree.LayerNode(Ext.applyIf({
-                iconCls: layer.isBayeLayer ? 'baselayer-icon' : 'layer-icon',
+                iconCls: layer.isBaseLayer ? 'baselayer-icon' : 'layer-icon',
                 layer: layer,
                 layerStore: this.layerStore
             }, this.defaults));
@@ -218,8 +210,17 @@
             this.layerStore.insert(newRecordIndex, [record]);
             delete this._reordering;
         }
+    },
+
+    /** private: method[destroy]
+     */
+    destroy: function() {
+        if(this.layerStore) {
+            this.layerStore.un("add", this.onStoreAdd, this);
+            this.layerStore.un("remove", this.onStoreRemove, this);
+        }
+        GeoExt.tree.LayerContainer.superclass.destroy.apply(this, arguments);
     }
-    
 });
 
 /**

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tree/LayerNode.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tree/LayerNode.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tree/LayerNode.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,9 +1,10 @@
-/* Copyright (C) 2008-2009 The Open Source Geospatial Foundation ¹
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
  * Published under the BSD license.
- * See http://geoext.org/svn/geoext/core/trunk/license.txt for the full text
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
  * of the license.
- * 
- * ¹ pending approval */
+ */
 
 Ext.namespace("GeoExt.tree");
 
@@ -63,11 +64,11 @@
         node.visibilityChanging = false;
     },
     
-    /** private: method[onDestroy]
+    /** private: method[destroy]
      */
-    onDestroy: function() {
+    destroy: function() {
         delete this.radio;
-        GeoExt.tree.LayerNodeUI.superclass.onDestroy.call(this);
+        GeoExt.tree.LayerNodeUI.superclass.destroy.call(this);
     }
 });
 
@@ -224,53 +225,102 @@
      *  state
      */
     addVisibilityEventHandlers: function() {
-        this.layer.events.register("visibilitychanged", this, function() {
-            if(!this.visibilityChanging &&
-                    this.attributes.checked != this.layer.getVisibility()) {
-                this.getUI().toggleCheck(this.layer.getVisibility());
-            }
-        });
+        this.layer.events.on({
+            "visibilitychanged": this.onLayerVisibilityChanged,
+            scope: this
+        }); 
         this.on({
-            "checkchange": function(node, checked) {
-                if (checked && this.layer.isBaseLayer && this.layer.map) {
-                    this.layer.map.setBaseLayer(this.layer);
-                }
-                this.layer.setVisibility(checked);
-            },
+            "checkchange": this.onCheckChange,
             scope: this
         });
     },
     
+    /** private: method[onLayerVisiilityChanged
+     *  handler for visibilitychanged events on the layer
+     */
+    onLayerVisibilityChanged: function() {
+        if(!this.visibilityChanging &&
+                this.attributes.checked != this.layer.getVisibility()) {
+            this.getUI().toggleCheck(this.layer.getVisibility());
+        }
+    },
+    
+    /** private: method[onCheckChange]
+     *  :param node: ``GeoExt.tree.LayerNode``
+     *  :param checked: ``Boolean``
+     *
+     *  handler for checkchange events 
+     */
+    onCheckChange: function(node, checked) {
+        if (checked && this.layer.isBaseLayer && this.layer.map) {
+            this.layer.map.setBaseLayer(this.layer);
+        }
+        this.layer.setVisibility(checked);
+    },
+    
     /** private: method[addStoreEventHandlers]
      *  Adds handlers that make sure the node disappeares when the layer is
      *  removed from the store, and appears when it is re-added.
      */
     addStoreEventHandlers: function() {
         this.layerStore.on({
-            "add": function(store, records, index) {
-                var l;
-                for(var i=0; i<records.length; ++i) {
-                    l = records[i].get("layer");
-                    if(this.layer == l) {
-                        this.getUI().show();
-                    } else if (this.layer == l.name) {
-                        // layer is a string, which means the node has not yet
-                        // been rendered because the layer was not found. But
-                        // now we have the layer and can render.
-                        this.render(bulkRender);
-                        return;
-                    }
-                }
-            },
-            "remove": function(store, record, index) {
-                if(this.layer == record.get("layer")) {
-                    this.getUI().hide();
-                }
-            },
+            "add": this.onStoreAdd,
+            "remove": this.onStoreRemove,
+            "update": this.onStoreUpdate,
             scope: this
         });
     },
     
+    /** private: method[onStoreAdd]
+     *  :param store: ``Ext.data.Store``
+     *  :param records: ``Array(Ext.data.Record)``
+     *  :param index: ``Number``
+     *
+     *  handler for add events on the store 
+     */
+    onStoreAdd: function(store, records, index) {
+        var l;
+        for(var i=0; i<records.length; ++i) {
+            l = records[i].get("layer");
+            if(this.layer == l) {
+                this.getUI().show();
+            } else if (this.layer == l.name) {
+                // layer is a string, which means the node has not yet
+                // been rendered because the layer was not found. But
+                // now we have the layer and can render.
+                this.render(bulkRender);
+                return;
+            }
+        }
+    },
+    
+    /** private: method[onStoreRemove]
+     *  :param store: ``Ext.data.Store``
+     *  :param record: ``Ext.data.Record``
+     *  :param index: ``Number``
+     *
+     *  handler for remove events on the store 
+     */
+    onStoreRemove: function(store, record, index) {
+        if(this.layer == record.get("layer")) {
+            this.getUI().hide();
+        }
+    },
+
+    /** private: method[onStoreUpdate]
+     *  :param store: ``Ext.data.Store``
+     *  :param record: ``Ext.data.Record``
+     *  :param operation: ``String``
+     *  
+     *  Listener for the store's update event.
+     */
+    onStoreUpdate: function(store, record, operation) {
+    	var layer = record.get("layer");
+        if(this.layer == layer && this.text !== layer.name) {
+            this.setText(layer.name);
+        }
+    },
+
     /** private: method[addChildNodes]
      *  Calls the add method of a node type configured as ``childNodeType``
      *  to add children.
@@ -281,6 +331,29 @@
         } else if(typeof this.childNodeType.add === "function") {
             this.childNodeType.add(this);
         }
+    },
+    
+    /** private: method[destroy]
+     */
+    destroy: function() {
+        var layer = this.layer;
+        if (layer instanceof OpenLayers.Layer) {
+            layer.events.un({
+                "visibilitychanged": this.onLayerVisibilityChanged,
+                scope: this
+            });
+        }
+        delete this.layer;
+        var layerStore = this.layerStore;
+        if(layerStore) {
+            layerStore.un("add", this.onStoreAdd, this);
+            layerStore.un("remove", this.onStoreRemove, this);
+            layerStore.un("update", this.onStoreUpdate, this);
+        }
+        delete this.layerStore;
+        this.un("checkchange", this.onCheckChange, this);
+
+        GeoExt.tree.LayerNode.superclass.destroy.call(this);
     }
 });
 

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tree/OverlayLayerContainer.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tree/OverlayLayerContainer.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt/widgets/tree/OverlayLayerContainer.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,9 +1,10 @@
-/* Copyright (C) 2008-2009 The Open Source Geospatial Foundation ¹
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
  * Published under the BSD license.
- * See http://geoext.org/svn/geoext/core/trunk/license.txt for the full text
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
  * of the license.
- * 
- * ¹ pending approval */
+ */
 
 /**
  * @requires GeoExt/widgets/tree/LayerContainer.js

Modified: sandbox/opengeo/geoexplorer/lib/GeoExt.js
===================================================================
--- sandbox/opengeo/geoexplorer/lib/GeoExt.js	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/lib/GeoExt.js	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,9 +1,10 @@
-/* Copyright (C) 2008-2009 The Open Source Geospatial Foundation ¹
+/**
+ * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
+ * 
  * Published under the BSD license.
- * See http://geoext.org/svn/geoext/core/trunk/license.txt for the full text
+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
  * of the license.
- * 
- * ¹ pending approval */
+ */
 
 /*
  * The code in this file is based on code taken from OpenLayers.
@@ -32,7 +33,12 @@
      */
     var getScriptLocation = function() {
         var scriptLocation = "";
-        var scripts = document.getElementsByTagName('script');
+        // If we load other scripts right before GeoExt using the same
+        // mechanism to add script resources dynamically (e.g. OpenLayers), 
+        // document.getElementsByTagName will not find the GeoExt script tag
+        // in FF2. Using document.documentElement.getElementsByTagName instead
+        // works around this issue.
+        var scripts = document.documentElement.getElementsByTagName('script');
         for(var i=0, len=scripts.length; i<len; i++) {
             var src = scripts[i].getAttribute('src');
             if(src) {

Modified: sandbox/opengeo/geoexplorer/license.txt
===================================================================
--- sandbox/opengeo/geoexplorer/license.txt	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/license.txt	2009-06-22 22:01:48 UTC (rev 1129)
@@ -7,7 +7,7 @@
 License
 =======
 
-Copyright (c) 2008-2009, The Open Source Geospatial Foundation ¹
+Copyright (c) 2008-2009, The Open Source Geospatial Foundation
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
@@ -34,7 +34,6 @@
 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 POSSIBILITY OF SUCH DAMAGE.
 
-¹ pending approval
 
 
 Notice about ExtJS

Modified: sandbox/opengeo/geoexplorer/resources/css/gxtheme-gray.css
===================================================================
--- sandbox/opengeo/geoexplorer/resources/css/gxtheme-gray.css	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/resources/css/gxtheme-gray.css	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,9 +1,9 @@
 .gx-popup-anc {
-	background: transparent url(../images/gray/anchor.png) no-repeat 0 0;
-        position: relative;
-        top:-1px;
-        left:5px;
-        z-index:2;
-        height:16px;
-        width:31px;
+    background: transparent url(../images/gray/anchor.png) no-repeat 0 0;
+    position: relative;
+    top:-1px;
+    left:5px;
+    z-index:2;
+    height:16px;
+    width:31px;
 }
\ No newline at end of file

Added: sandbox/opengeo/geoexplorer/resources/css/gxtheme-slate.css
===================================================================
--- sandbox/opengeo/geoexplorer/resources/css/gxtheme-slate.css	                        (rev 0)
+++ sandbox/opengeo/geoexplorer/resources/css/gxtheme-slate.css	2009-06-22 22:01:48 UTC (rev 1129)
@@ -0,0 +1,9 @@
+.gx-popup-anc {
+	background: transparent url(../images/slate/anchor.png) no-repeat 0 0;
+        position: relative;
+        top:-1px;
+        left:5px;
+        z-index:2;
+        height:16px;
+        width:31px;
+}

Modified: sandbox/opengeo/geoexplorer/resources/css/popup.css
===================================================================
--- sandbox/opengeo/geoexplorer/resources/css/popup.css	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/resources/css/popup.css	2009-06-22 22:01:48 UTC (rev 1129)
@@ -1,10 +1,9 @@
-
 .gx-popup-anc {
-	background: transparent url(../images/default/anchor.png) no-repeat 0 0;
-        position: relative;
-        top:-1px;
-        left:5px;
-        z-index:2;
-        height:16px;
-        width:31px;
+    background: transparent url(../images/default/anchor.png) no-repeat 0 0;
+    position: relative;
+    top:-1px;
+    left:5px;
+    z-index:2;
+    height:16px;
+    width:31px;
 }

Modified: sandbox/opengeo/geoexplorer/tests/lib/GeoExt/data/LayerStore.html
===================================================================
--- sandbox/opengeo/geoexplorer/tests/lib/GeoExt/data/LayerStore.html	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/tests/lib/GeoExt/data/LayerStore.html	2009-06-22 22:01:48 UTC (rev 1129)
@@ -285,6 +285,26 @@
 
         }
         
+        function test_update(t) {
+            t.plan(2);
+            
+            var map = new OpenLayers.Map("mappanel");
+            var layer = new OpenLayers.Layer("foo");
+            map.addLayer(layer);
+
+            var store = new GeoExt.data.LayerStore({
+                map: map
+            });
+
+            layer.setName("newName");
+            t.eq(store.getAt(0).get("title"), "newName", "record title synced from layer name");
+            
+            store.getAt(0).set("title", "newTitle");
+            t.eq(layer.name, "newTitle", "layer name synced from record title");
+                                    
+            map.destroy();
+        }
+        
         function test_events(t) {
             t.plan(21);
             
@@ -370,7 +390,30 @@
             
         }
         
+        function test_map_destroy(t) {
+            t.plan(1);
+            
+            var map = new OpenLayers.Map({div: "mappanel", allOverlays: true});
+            var a = new OpenLayers.Layer("a");
+            var b = new OpenLayers.Layer("b");
+            map.addLayers([a, b]);
 
+            var store = new GeoExt.data.LayerStore({
+                map: map
+            });
+            
+            var count = 0;
+            store.on("remove", function() {
+                count++;
+            });
+            
+            map.removeLayer(a);
+            map.destroy();
+            
+            t.eq(count, 1, "store's remove handler called once");
+        }
+        
+
     </script>
   </head>  
   <body>

Modified: sandbox/opengeo/geoexplorer/tests/lib/GeoExt/data/ScaleStore.html
===================================================================
--- sandbox/opengeo/geoexplorer/tests/lib/GeoExt/data/ScaleStore.html	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/tests/lib/GeoExt/data/ScaleStore.html	2009-06-22 22:01:48 UTC (rev 1129)
@@ -45,6 +45,8 @@
             map = createMap();
             store = new GeoExt.data.ScaleStore({map: map});
             t.ok(store.map == map, "ctor sets the passed map in the instance");
+            
+            map.destroy();
         }
 
         function test_bind_unbind(t) {
@@ -84,15 +86,31 @@
             store.unbind();
             t.eq(map.events.listeners["changebaselayer"][0], undefined,
                  "unbind unregisters changebaselayer listener (map has a base layer)");
+            
+            map.destroy();
         }
 
         function test_scalestore(t) {
-            t.plan(1);
+            t.plan(3);
 
             var mapPanel = loadMapPanel();
             var map = mapPanel.map;
             var store = new GeoExt.data.ScaleStore({map: map});
-            t.eq(store.data.length, 15, 'Found expected number of zoomlevels');
+            var levels = map.baseLayer.resolutions.length;
+            t.eq(store.getCount(), levels,
+                 'Found expected number of zoomlevels: ' + levels);
+            
+            var low = store.getAt(0).get("resolution");
+            t.eq(low, map.baseLayer.resolutions[levels-1],
+                 'First record has lowest res value: ' + low);
+
+            var high = store.getAt(levels-1).get("resolution");
+            t.eq(high, map.baseLayer.resolutions[0],
+                 'Last record has highest res value: ' + high);
+            
+            map.destroy();
+            mapPanel.destroy();
+            
         }
         
     </script>

Modified: sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/Action.html
===================================================================
--- sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/Action.html	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/Action.html	2009-06-22 22:01:48 UTC (rev 1129)
@@ -8,7 +8,7 @@
 
     <script type="text/javascript">
         function test_constructor(t) {
-            t.plan(11)
+            t.plan(12)
 
             var ctrl, scope, handler, toggleHandler, checkHandler, cfg, action;
 
@@ -34,6 +34,8 @@
                  "constructor sets control in the instance");
             t.ok(action.control.map === map,
                  "constructor adds control to map if provided");
+            t.ok(!action.initialConfig.map,
+                 "action does not have a reference to the map");
             t.ok(action.uScope == scope,
                  "constructor sets this.uScope to user-provided scope");
             t.ok(action.uHandler == handler,

Added: sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/LegendImage.html
===================================================================
--- sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/LegendImage.html	                        (rev 0)
+++ sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/LegendImage.html	2009-06-22 22:01:48 UTC (rev 1129)
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <script type="text/javascript" src="../../../../../openlayers/lib/OpenLayers.js"></script>
+    <script type="text/javascript" src="../../../../../ext/adapter/ext/ext-base.js"></script>
+    <script type="text/javascript" src="../../../../../ext/ext-all-debug.js"></script>
+    <script type="text/javascript" src="../../../../lib/GeoExt.js"></script>
+
+    <script type="text/javascript">
+
+        function test_constructor(t) {
+            t.plan(2);
+            
+            var legend;
+            
+            // create a legend with the default config
+            legend = new GeoExt.LegendImage();
+            t.eq(legend.defaultImgSrc, Ext.BLANK_IMAGE_URL, "defaultImgSrc defaults to Ext.BLANK_IMAGE_URL");
+            legend.destroy();
+            
+            // create a legend with a custom defaultImgSrc
+            legend = new GeoExt.LegendImage({defaultImgSrc: "foo"});
+            t.eq(legend.defaultImgSrc, "foo", "defaultImgSrc can be set in config");
+            legend.destroy();
+            
+        }
+        
+        function test_onImageLoadError(t) {
+            t.plan(2);
+            
+            var legend, calls = 0;
+
+            // create a legend with a bogus image url (one call to error handler)
+            legend = new GeoExt.LegendImage({
+                url: "bogus",
+                defaultImgSrc: "also-bogus",
+                renderTo: "legend",
+                onImageLoadError: function() {
+                    ++calls;
+                    GeoExt.LegendImage.prototype.onImageLoadError.apply(this, arguments);
+                }
+            });
+            t.delay_call(0.5, function() {
+                t.eq(calls, 1, "onImageLoadError called once for bogus image src");
+                var el = legend.getEl();
+                t.eq(el && el.dom.src.split("/").pop(), "also-bogus", "defaultImgSrc set as image src");
+                legend.destroy();
+            });            
+            
+        }
+
+
+    </script>
+  <body>
+    <div id="legend"></div>
+  </body>
+</html>

Modified: sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/LegendPanel.html
===================================================================
--- sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/LegendPanel.html	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/LegendPanel.html	2009-06-22 22:01:48 UTC (rev 1129)
@@ -45,7 +45,7 @@
             mapPanel.layers.getAt(0).set("legendURL", newUrl);
 
             var item = lp.getComponent(mapPanel.map.layers[0].id);
-            var url = item.items.items[1].items.items[0].getEl().dom.src;
+            var url = item.items.get(1).items.get(0).getEl().dom.src;
             t.eq(url, newUrl, "Update the image with the provided legendURL");
 
             lp.destroy();
@@ -111,7 +111,7 @@
             lp.render();
 
             var item = lp.getComponent(mapPanel.map.layers[0].id);
-            var url = item.items.items[1].items.items[0].url;
+            var url = item.items.get(1).items.get(0).url;
             var expectedUrl = "/ows?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetLegendGraphic&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_xml&FORMAT=image%2Fgif&LAYER=a";
             t.eq(url, expectedUrl, "GetLegendGraphic url is generated correctly");
 
@@ -147,6 +147,37 @@
             mapPanel.destroy();
         }
 
+        function test_changelayername(t) {
+            t.plan(3);
+            var mapPanel = loadMapPanel();
+            var lp  = new GeoExt.LegendPanel({
+                renderTo: 'legendpanel'});
+            lp.render();
+
+            var layer = mapPanel.map.layers[0];
+            var cmp = lp.getComponent(layer.id);
+            t.eq(cmp.items.get(0).text, 'test', "Layer name is test before change");
+
+            layer.setName("My new name");
+
+            t.eq(cmp.items.get(0).text, "My new name", "Layer name was changed correctly to 'My new name'");
+
+            lp.destroy();
+
+            var lp  = new GeoExt.LegendPanel({
+                showTitle: false,
+                renderTo: 'legendpanel'});
+            lp.render();
+
+            layer.setName("My new new name");
+            var cmp = lp.getComponent(layer.id);
+            t.eq(cmp.items.get(0).text, "", "When showTitle is false, there is no label for a layer and it is not changed");
+
+            lp.destroy();
+
+            mapPanel.destroy();
+        }
+
     </script>
   <body>
     <div id="legendpanel"></div>

Modified: sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/ZoomSlider.html
===================================================================
--- sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/ZoomSlider.html	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/ZoomSlider.html	2009-06-22 22:01:48 UTC (rev 1129)
@@ -57,8 +57,36 @@
             map.destroy();
 
         }
+        
+        function test_zoomslider_aggressive(t) {
+            t.plan(2);
+            var slider1 = new GeoExt.ZoomSlider({
+                renderTo: document.body
+            });
+            slider1.on({
+                "changecomplete": function() {
+                    t.ok(true, "changecomplete triggered in non-aggressive mode");
+                }
+            });
+            var slider2 = new GeoExt.ZoomSlider({
+                renderTo: document.body,
+                aggressive: true
+            });
+            slider2.on({
+                "change": function() {
+                    t.ok(true, "change triggered in aggressive mode");
+                }
+            });
+            
+            slider1.setValue(slider1.maxValue, undefined, true);
+            slider2.setValue(slider2.maxValue, undefined, true);
+            
+            slider1.destroy();
+            slider2.destroy();
+        }
 
     </script>
+  </head>
   <body>
     <div id="map" style="width: 512px; height: 256px;"></div>
   </body>

Modified: sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/tree/LayerContainer.html
===================================================================
--- sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/tree/LayerContainer.html	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/tree/LayerContainer.html	2009-06-22 22:01:48 UTC (rev 1129)
@@ -54,9 +54,73 @@
             t.ok(node.firstChild.layer === layer, "child layer is correct");
 
             node.destroy();
+            map.destroy();
             
         }
         
+        function test_order(t) {
+            
+            t.plan(16);
+            
+            var map = new OpenLayers.Map({
+                div: "map",
+                allOverlays: true
+            });
+            
+            var store = new GeoExt.data.LayerStore({
+                map: map
+            });
+            
+            var root = new GeoExt.tree.LayerContainer({
+                layerStore: store
+            });
+            
+            var panel = new Ext.tree.TreePanel({
+                renderTo: document.body,
+                root: root
+            });
+            
+            var a = new OpenLayers.Layer("a");
+            var b = new OpenLayers.Layer("b");
+            var c = new OpenLayers.Layer("c");
+            var d = new OpenLayers.Layer("d");
+            
+            var reader = new GeoExt.data.LayerReader();
+            
+            // add two records to empty root
+            store.add(reader.readRecords([a, b]).records);
+            t.eq(root.childNodes.length, 2, "[a, b] two records added");
+            t.eq(root.childNodes[0].layer.name, "b", "[a, b] last layer drawn at top of root");
+            t.eq(root.childNodes[1].layer.name, "a", "[a, b] first layer drawn at bottom of root");
+            
+            // add two records to root with two existing child nodes
+            store.add(reader.readRecords([c, d]).records);
+            t.eq(root.childNodes.length, 4, "[a, b, c, d] four records total");
+            t.eq(root.childNodes[0].layer.name, "d", "[a, b, c, d] last layer drawn at top of root");
+            t.eq(root.childNodes[1].layer.name, "c", "[a, b, c, d] third layer drawn at correct index");
+            t.eq(root.childNodes[2].layer.name, "b", "[a, b, c, d] second layer drawn at correct index");
+            t.eq(root.childNodes[3].layer.name, "a", "[a, b, c, d] first layer drawn at bottom of root");
+            
+            // remove the first two layers in draw order
+            store.remove(store.getAt(0));
+            store.remove(store.getAt(0));
+            t.eq(root.childNodes.length, 2, "[c, d] two records total");
+            t.eq(root.childNodes[0].layer.name, "d", "[c, d] last layer drawn at top of root");
+            t.eq(root.childNodes[1].layer.name, "c", "[c, d] first layer drawn at bottom of root");
+            
+            // insert two records in the middle
+            store.insert(1, reader.readRecords([a, b]).records);
+            t.eq(root.childNodes.length, 4, "[c, a, b, d] four records total");
+            t.eq(root.childNodes[0].layer.name, "d", "[c, a, b, d] last layer drawn at top of root");
+            t.eq(root.childNodes[1].layer.name, "b", "[c, a, b, d] third layer drawn at correct index");
+            t.eq(root.childNodes[2].layer.name, "a", "[c, a, b, d] second layer drawn at correct index");
+            t.eq(root.childNodes[3].layer.name, "c", "[c, a, b, d] first layer drawn at bottom of root");
+            
+            root.destroy();
+            map.destroy();
+            
+        }
+        
         </script>
     </head>
     <body>

Modified: sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/tree/LayerNode.html
===================================================================
--- sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/tree/LayerNode.html	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/tests/lib/GeoExt/widgets/tree/LayerNode.html	2009-06-22 22:01:48 UTC (rev 1129)
@@ -68,6 +68,33 @@
             mapPanel.render("map");
             
         }
+
+        function test_changelayername(t) {
+            t.plan(1);
+
+            var layer = new OpenLayers.Layer("test");
+
+            var mapPanel = new GeoExt.MapPanel({
+                layers: [layer],
+                allOverlays: true
+            });
+
+            var node = new GeoExt.tree.LayerNode({
+                layer: "test",
+                layerStore: mapPanel.layers
+            });
+
+            var panel = new Ext.tree.TreePanel({
+                 root: node
+            });
+            panel.render(document.body);
+
+            layer.setName("My new name");
+            t.eq(node.text, "My new name", "Node is named 'My new name' after layer setName is called");
+
+            node.destroy();
+            mapPanel.destroy();
+        }
         
         </script>
     </head>
@@ -75,4 +102,4 @@
         <div id="map" style="width: 100px; height: 100px;"></div>
         <div id="tree" style="width: 100px; height: 100px;"></div>
     </body>
-</html>
\ No newline at end of file
+</html>

Modified: sandbox/opengeo/geoexplorer/tests/list-tests.html
===================================================================
--- sandbox/opengeo/geoexplorer/tests/list-tests.html	2009-06-22 21:25:56 UTC (rev 1128)
+++ sandbox/opengeo/geoexplorer/tests/list-tests.html	2009-06-22 22:01:48 UTC (rev 1129)
@@ -17,6 +17,7 @@
   <li>lib/GeoExt/widgets/form/FormPanel.html</li>
   <li>lib/GeoExt/widgets/tree/LayerNode.html</li>
   <li>lib/GeoExt/widgets/tree/LayerContainer.html</li>
+  <li>lib/GeoExt/widgets/LegendImage.html</li>
   <li>lib/GeoExt/widgets/LegendPanel.html</li>
   <li>lib/GeoExt/widgets/ZoomSlider.html</li>
 </ul>



More information about the Commits mailing list