[Commits] r1254 - in apps/opengeo/geoexplorer/branches/0.1.x: . build src src/html src/script src/script/app src/script/app/GeoExplorer src/script/ux src/theme src/theme/app src/theme/app/img

commits at geoext.org commits at geoext.org
Tue Jul 14 21:54:24 CEST 2009


Author: tschaub
Date: 2009-07-14 21:54:24 +0200 (Tue, 14 Jul 2009)
New Revision: 1254

Added:
   apps/opengeo/geoexplorer/branches/0.1.x/build/build.xml
   apps/opengeo/geoexplorer/branches/0.1.x/build/jsbuild.cfg
   apps/opengeo/geoexplorer/branches/0.1.x/src/
   apps/opengeo/geoexplorer/branches/0.1.x/src/html/
   apps/opengeo/geoexplorer/branches/0.1.x/src/html/about.html
   apps/opengeo/geoexplorer/branches/0.1.x/src/html/index.html
   apps/opengeo/geoexplorer/branches/0.1.x/src/script/
   apps/opengeo/geoexplorer/branches/0.1.x/src/script/app/
   apps/opengeo/geoexplorer/branches/0.1.x/src/script/app/GeoExplorer.js
   apps/opengeo/geoexplorer/branches/0.1.x/src/script/app/GeoExplorer/
   apps/opengeo/geoexplorer/branches/0.1.x/src/script/app/loader.js
   apps/opengeo/geoexplorer/branches/0.1.x/src/script/ux/
   apps/opengeo/geoexplorer/branches/0.1.x/src/script/ux/RowExpander.js
   apps/opengeo/geoexplorer/branches/0.1.x/src/theme/
   apps/opengeo/geoexplorer/branches/0.1.x/src/theme/app/
   apps/opengeo/geoexplorer/branches/0.1.x/src/theme/app/about.css
   apps/opengeo/geoexplorer/branches/0.1.x/src/theme/app/geoexplorer.css
   apps/opengeo/geoexplorer/branches/0.1.x/src/theme/app/ie.css
   apps/opengeo/geoexplorer/branches/0.1.x/src/theme/app/img/
Removed:
   apps/opengeo/geoexplorer/branches/0.1.x/about.html
   apps/opengeo/geoexplorer/branches/0.1.x/build/Makefile
   apps/opengeo/geoexplorer/branches/0.1.x/build/build.cfg
   apps/opengeo/geoexplorer/branches/0.1.x/build/index.html
   apps/opengeo/geoexplorer/branches/0.1.x/debug.html
   apps/opengeo/geoexplorer/branches/0.1.x/lib/
   apps/opengeo/geoexplorer/branches/0.1.x/script/
   apps/opengeo/geoexplorer/branches/0.1.x/theme/
Modified:
   apps/opengeo/geoexplorer/branches/0.1.x/build/readme.txt
   apps/opengeo/geoexplorer/branches/0.1.x/readme-dev.txt
Log:
new structure

Deleted: apps/opengeo/geoexplorer/branches/0.1.x/about.html
===================================================================
--- apps/opengeo/geoexplorer/branches/0.1.x/about.html	2009-07-14 17:43:57 UTC (rev 1253)
+++ apps/opengeo/geoexplorer/branches/0.1.x/about.html	2009-07-14 19:54:24 UTC (rev 1254)
@@ -1,36 +0,0 @@
-<html>
-    <head>
-        <title>About GeoExplorer</title>
-        <link rel="stylesheet" type="text/css" href="theme/app/about.css"/>
-    </head>
-    <body>
-    <div class="logo"></div>
-    <h2> GeoExplorer </h2>
-    <div class="versioninfo">Version 0.1</div>
-    <h3> Engineering & Design by OpenGeo </h3>
-    <a href="http://opengeo.org/">http://opengeo.org/</a>
-    &copy; 2009, OpenGeo under the BSD license.
-
-    <h3> GeoExt Framework </h3>
-    <a href="http://geoext.org/">http://geoext.org/</a>
-    &copy; 2009, OSGeo under the BSD license.
-
-    <h3> GeoSilk Icons </h3>
-    <a href="http://projects.opengeo.org/geosilk/">http://projects.opengeo.org/geosilk/</a>
-    &copy; 2009, OpenGeo under CC-BY 3.0.
-
-    <h3> Silk Icons </h3>
-    <a href="http://famfamfam.com/lab/icons/silk/">http://famfamfam.com/lab/icons/silk/</a>
-    &copy; Mark James under CC-BY 3.0.
-
-    <h3> Contributors </h3>
-    <ul>
-    <li>Tim Schaub</li>
-    <li>David Winslow</li>
-    <li>Sebastian Benthall</li>
-    <li>Andreas Hocevar</li>
-    <li>Tim Coulter</li>
-    <li>Rolando Pe&ntilde;ate</li>
-    </ul>
-    </body>
-</html>

Deleted: apps/opengeo/geoexplorer/branches/0.1.x/build/Makefile
===================================================================
--- apps/opengeo/geoexplorer/branches/0.1.x/build/Makefile	2009-07-14 17:43:57 UTC (rev 1253)
+++ apps/opengeo/geoexplorer/branches/0.1.x/build/Makefile	2009-07-14 19:54:24 UTC (rev 1254)
@@ -1,41 +0,0 @@
-# Makefile for GeoExplorer apps
-
-APP_NAME = GeoExplorer
-ZIP_NAME = $(APP_NAME).zip
-
-.PHONEY: help clean app zip
-
-help:
-	@echo "Please use 'make <target>' where <target> is one of"
-	@echo "  app     to make a standalone dir of app resources"
-	@echo "  zip     to make a zip archive of a standalone app"
-	@echo
-	@echo "Example use:"
-	@echo "  make app"
-	@echo "  make app APP_NAME=MyApp"
-	@echo "  make zip"
-	@echo "  make zip ZIP_NAME=MyZip.zip"
-
-clean:
-	-rm -rf $(APP_NAME)
-	-rm -f $(ZIP_NAME)
-
-app:
-	@echo "Building the application."
-	mkdir -p $(APP_NAME)/script $(APP_NAME)/theme
-	
-	jsbuild build.cfg -v -o $(APP_NAME)/script/
-	
-	svn export --force ../theme/app $(APP_NAME)/theme/app
-	svn export --force ../externals/openlayers/theme/default/ $(APP_NAME)/theme/ol
-	svn export --force ../externals/geoext/resources $(APP_NAME)/theme/gx
-	
-	cp index.html $(APP_NAME)
-	cp ../about.html $(APP_NAME)
-	cp ../license.txt $(APP_NAME)
-	cp readme.txt $(APP_NAME)
-
-zip: clean app
-	@echo "Archiving the application."
-	zip $(ZIP_NAME) -r $(APP_NAME)
-

Deleted: apps/opengeo/geoexplorer/branches/0.1.x/build/build.cfg
===================================================================
--- apps/opengeo/geoexplorer/branches/0.1.x/build/build.cfg	2009-07-14 17:43:57 UTC (rev 1253)
+++ apps/opengeo/geoexplorer/branches/0.1.x/build/build.cfg	2009-07-14 19:54:24 UTC (rev 1254)
@@ -1,71 +0,0 @@
-[GeoExt.js]
-root = ../externals/geoext/lib
-license = ../externals/geoext/build/geoext-license.js
-
-include =
-    GeoExt/data/WMSCapabilitiesStore.js
-    GeoExt/data/ScaleStore.js
-    GeoExt/widgets/Action.js
-    GeoExt/widgets/LegendPanel.js
-    GeoExt/widgets/LegendWMS.js
-    GeoExt/widgets/MapPanel.js
-    GeoExt/widgets/Popup.js
-    GeoExt/widgets/tree/LayerContainer.js
-    GeoExt/widgets/ZoomSlider.js
-
-exclude =
-    GeoExt.js
-    GeoExt/SingleFile.js
-
-
-[OpenLayers.js]
-root = ../externals/openlayers/lib
-license = ../externals/openlayers/build/license.txt
-
-first =
-    OpenLayers/SingleFile.js
-    OpenLayers.js
-    OpenLayers/BaseTypes.js
-    OpenLayers/BaseTypes/Class.js
-    OpenLayers/Util.js
-    OpenLayers/Popup.js
-
-include =
-    OpenLayers/Map.js
-    OpenLayers/Rule.js
-    OpenLayers/StyleMap.js
-    OpenLayers/Handler/Path.js
-    OpenLayers/Handler/Polygon.js
-    OpenLayers/Control/PanPanel.js
-    OpenLayers/Control/ZoomPanel.js
-    OpenLayers/Control/Navigation.js
-    OpenLayers/Control/NavigationHistory.js
-    OpenLayers/Control/Measure.js
-    OpenLayers/Control/ScaleLine.js
-    OpenLayers/Control/WMSGetFeatureInfo.js
-    OpenLayers/Format/GML.js
-    OpenLayers/Format/WMSCapabilities/v1_1_0.js
-    OpenLayers/Format/WMSCapabilities/v1_1_1.js
-    OpenLayers/Format/WMSGetFeatureInfo.js
-    OpenLayers/Layer/WMS.js
-    OpenLayers/Layer/Vector.js
-    OpenLayers/Renderer/SVG.js
-    OpenLayers/Renderer/VML.js
-    OpenLayers/Renderer/Canvas.js
-    OpenLayers/Request/XMLHttpRequest.js
-    
-exclude =
-    OpenLayers/Popup/AnchoredBubble.js
-
-[GeoExplorer.js]
-root = ../lib
-license = license.js
-
-exclude =
-    Ext/grid/RowExpander.js
-    
-[ExtUx.js]
-root = ../lib
-license = ext-license.js
-include =
-    Ext/grid/RowExpander.js
\ No newline at end of file

Added: apps/opengeo/geoexplorer/branches/0.1.x/build/build.xml
===================================================================
--- apps/opengeo/geoexplorer/branches/0.1.x/build/build.xml	                        (rev 0)
+++ apps/opengeo/geoexplorer/branches/0.1.x/build/build.xml	2009-07-14 19:54:24 UTC (rev 1254)
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="GeoExplorer" default="dist" basedir=".">
+
+    <description>
+        GeoExplorer Build File
+    </description>
+
+    <property name="src" location="../src"/>
+    <property name="externals" location="../externals"/>
+    <property name="build" location="GeoExplorer"/>
+
+    <target name="init">
+        <tstamp/>
+        <mkdir dir="${build}"/>
+    </target>
+    
+    <target name="dev" depends="clean, init" description="set up development build">
+        <echo>Setting up development build.</echo>
+
+        <filterset id="dev-replacements">
+            <filter token="title" value="GeoExplorer (debug)"/>
+            <!-- Ext Resources -->
+            <filter token="ext-all.js" value="ext-all-debug.js"/>
+            <!-- OpenLayers Resources -->
+            <filter token="ol-style.css" value="../../externals/openlayers/theme/default/style.css"/>
+            <filter token="OpenLayers.js" value="../../externals/openlayers/lib/OpenLayers.js"/>
+            <!-- GeoExt Resources -->
+            <filter token="geoext-all.css" value="../../externals/geoext/resources/css/geoext-all-debug.css"/>
+            <filter token="gxtheme-gray.css" value="../../externals/geoext/resources/css/gxtheme-gray.css"/>
+            <filter token="GeoExt.js" value="../../externals/geoext/lib/GeoExt.js"/>
+            <!-- GeoExplorer Resources -->
+            <filter token="theme-dir" value="../../src/theme/app"/>
+            <filter token="GeoExplorer.js" value="../../src/script/app/loader.js"/>
+            <filter token="ux.js" value="../../src/script/ux/RowExpander.js"/>
+            <filter token="blank.gif" value="../../src/theme/app/img/blank.gif"/>
+        </filterset>
+
+        <copy file="${src}/html/index.html" todir="${build}">
+            <filterset refid="dev-replacements"/>
+        </copy>
+        <copy file="${src}/html/about.html" todir="${build}">
+            <filterset refid="dev-replacements"/>
+        </copy>
+
+    </target>
+    
+    <target name="jsbuild" depends="init" description="concatenate JavaScript source">
+        <echo>Concatenating JavaScript.</echo>
+        <mkdir dir="${build}/script"/>
+        <exec executable="jsbuild" failonerror="true">
+            <arg line="jsbuild.cfg -v"/>
+            <arg value="-o"/>
+            <arg path="${build}/script"/>
+        </exec>
+    </target>
+
+    <target name="dist" depends="clean, init, jsbuild" description="prepare app for distribution">
+        <echo>Preparing for distribution.</echo>
+        
+        <copy todir="${build}/theme/app">
+            <fileset dir="${src}/theme/app">
+                <!-- .svn excluded by default -->
+            </fileset>
+        </copy>
+
+        <copy todir="${build}/theme/ol">
+            <fileset dir="${externals}/openlayers/theme/default">
+                <!-- .svn excluded by default -->
+            </fileset>
+        </copy>
+
+        <copy todir="${build}/theme/gx">
+            <fileset dir="${externals}/geoext/resources">
+                <!-- .svn excluded by default -->
+            </fileset>
+        </copy>
+
+        <filterset id="dist-replacements">
+            <filter token="title" value="GeoExplorer"/>
+            <!-- Ext Resources -->
+            <filter token="ext-all.js" value="ext-all.js"/>
+            <!-- OpenLayers Resources -->
+            <filter token="ol-style.css" value="theme/ol/style.css"/>
+            <filter token="OpenLayers.js" value="script/OpenLayers.js"/>
+            <!-- GeoExt Resources -->
+            <filter token="geoext-all.css" value="theme/gx/css/geoext-all-debug.css"/>
+            <filter token="gxtheme-gray.css" value="theme/gx/css/gxtheme-gray.css"/>
+            <filter token="GeoExt.js" value="script/GeoExt.js"/>
+            <!-- GeoExplorer Resources -->
+            <filter token="theme-dir" value="theme/app"/>
+            <filter token="GeoExplorer.js" value="script/GeoExplorer.js"/>
+            <filter token="ux.js" value="script/ux.js"/>
+            <filter token="blank.gif" value="theme/app/img/blank.gif"/>
+        </filterset>
+
+        <copy file="${src}/html/index.html" todir="${build}">
+            <filterset refid="dist-replacements"/>
+        </copy>
+        <copy file="${src}/html/about.html" todir="${build}">
+            <filterset refid="dist-replacements"/>
+        </copy>        
+        
+    </target>
+
+    <target name="zip" depends="dist" description="create zip archive of app">
+        <echo>Preparing zip archive.</echo>
+        <zip destfile="GeoExplorer.zip">
+            <zipfileset dir="${build}" prefix="GeoExplorer"/>
+        </zip>
+    </target>
+    
+    <target name="clean" description="remove previous build">
+        <delete dir="${build}"/>
+    </target>
+
+</project>
+

Deleted: apps/opengeo/geoexplorer/branches/0.1.x/build/index.html
===================================================================
--- apps/opengeo/geoexplorer/branches/0.1.x/build/index.html	2009-07-14 17:43:57 UTC (rev 1253)
+++ apps/opengeo/geoexplorer/branches/0.1.x/build/index.html	2009-07-14 19:54:24 UTC (rev 1254)
@@ -1,70 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
-    <head>
-        <title>GeoExplorer</title>
-        <link rel="shortcut icon" href="theme/app/img/favicon.ico"/>
-        
-        <!-- Ext resources -->
-        <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.cachefly.net/ext-2.2.1/resources/css/xtheme-gray.css" />
-        <script src="http://extjs.cachefly.net/ext-2.2.1/adapter/ext/ext-base.js"></script>
-        <script src="http://extjs.cachefly.net/ext-2.2.1/ext-all.js"></script>
-        <script src="script/ExtUx.js"></script> 
-
-        <!-- OpenLayers resources -->
-        <link rel="stylesheet" type="text/css" href="theme/ol/style.css" />
-        <script src="script/OpenLayers.js"></script>
-
-        <!-- GeoExt resources -->
-        <link rel="stylesheet" type="text/css" href="theme/gx/css/geoext-all-debug.css" />
-        <link rel="stylesheet" type="text/css" href="theme/gx/css/gxtheme-gray.css" />
-        <script type="text/javascript" src="script/GeoExt.js"></script> 
-
-        <!-- GeoExplorer resources -->
-        <link rel="stylesheet" type="text/css" href="theme/app/geoexplorer.css" />
-        <!--[if IE]><link rel="stylesheet" type="text/css" href="theme/app/ie.css"/><![endif]-->
-        <script src="script/GeoExplorer.js"></script> 
-
-        <script>
-            Ext.BLANK_IMAGE_URL = "theme/app/img/blank.gif";
-            var app = new GeoExplorer({
-
-                /**
-                 * The application loads capabilities from a single WMS.  The
-                 * ows value below is an absolute URL for this WMS.  Because the
-                 * application loads capabilities from a different host than the
-                 * one that serves this application, you need to configure a
-                 * proxy to have the application work.
-                 *
-                 * If you have a WMS running on the same origin as this application
-                 * you can use a relative URL and remove the proxy property below.
-                 */
-                ows: "http://demo.opengeo.org/geoserver/wms",
-
-                /**
-                 * If you do not have a WMS running on the same host that serves
-                 * this application, you need to set up a proxy.  For a proxy
-                 * that works with mod_python, see the following:
-                 * http://svn.opengeo.org/util/proxy/proxy.py
-                 *
-                 * If you do have a WMS on the same origin as this application,
-                 * provide a relative URL for the WMS above and comment out this
-                 * proxy property below.
-                 */
-                proxy: "/proxy/?url=",
-
-                map: {
-                    layers: [{
-                        name: "topp:bluemarble",
-                        title: "Global Imagery"
-                    }],
-                    center: [-96.7, 37.6],
-                    zoom: 4
-                }
-            });
-        </script>
-
-    </head>
-    <body>
-    </body>
-</html>

Copied: apps/opengeo/geoexplorer/branches/0.1.x/build/jsbuild.cfg (from rev 1253, apps/opengeo/geoexplorer/branches/0.1.x/build/build.cfg)
===================================================================
--- apps/opengeo/geoexplorer/branches/0.1.x/build/jsbuild.cfg	                        (rev 0)
+++ apps/opengeo/geoexplorer/branches/0.1.x/build/jsbuild.cfg	2009-07-14 19:54:24 UTC (rev 1254)
@@ -0,0 +1,72 @@
+[GeoExt.js]
+root = ../externals/geoext/lib
+license = ../externals/geoext/build/geoext-license.js
+
+include =
+    GeoExt/data/WMSCapabilitiesStore.js
+    GeoExt/data/ScaleStore.js
+    GeoExt/widgets/Action.js
+    GeoExt/widgets/LegendPanel.js
+    GeoExt/widgets/LegendWMS.js
+    GeoExt/widgets/MapPanel.js
+    GeoExt/widgets/Popup.js
+    GeoExt/widgets/tree/LayerContainer.js
+    GeoExt/widgets/ZoomSlider.js
+
+exclude =
+    GeoExt.js
+    GeoExt/SingleFile.js
+
+
+[OpenLayers.js]
+root = ../externals/openlayers/lib
+license = ../externals/openlayers/build/license.txt
+
+first =
+    OpenLayers/SingleFile.js
+    OpenLayers.js
+    OpenLayers/BaseTypes.js
+    OpenLayers/BaseTypes/Class.js
+    OpenLayers/Util.js
+    OpenLayers/Popup.js
+
+include =
+    OpenLayers/Map.js
+    OpenLayers/Rule.js
+    OpenLayers/StyleMap.js
+    OpenLayers/Handler/Path.js
+    OpenLayers/Handler/Polygon.js
+    OpenLayers/Control/PanPanel.js
+    OpenLayers/Control/ZoomPanel.js
+    OpenLayers/Control/Navigation.js
+    OpenLayers/Control/NavigationHistory.js
+    OpenLayers/Control/Measure.js
+    OpenLayers/Control/ScaleLine.js
+    OpenLayers/Control/WMSGetFeatureInfo.js
+    OpenLayers/Format/GML.js
+    OpenLayers/Format/WMSCapabilities/v1_1_0.js
+    OpenLayers/Format/WMSCapabilities/v1_1_1.js
+    OpenLayers/Format/WMSGetFeatureInfo.js
+    OpenLayers/Layer/WMS.js
+    OpenLayers/Layer/Vector.js
+    OpenLayers/Renderer/SVG.js
+    OpenLayers/Renderer/VML.js
+    OpenLayers/Renderer/Canvas.js
+    OpenLayers/Request/XMLHttpRequest.js
+    
+exclude =
+    OpenLayers/Popup/AnchoredBubble.js
+
+[GeoExplorer.js]
+root = ../src/script/app
+license = license.js
+
+first =
+    GeoExplorer.js
+    
+exclude =
+    loader.js
+
+[ux.js]
+root = ../src/script/ux
+license = ext-license.js


Property changes on: apps/opengeo/geoexplorer/branches/0.1.x/build/jsbuild.cfg
___________________________________________________________________
Name: svn:mergeinfo
   + 

Modified: apps/opengeo/geoexplorer/branches/0.1.x/build/readme.txt
===================================================================
--- apps/opengeo/geoexplorer/branches/0.1.x/build/readme.txt	2009-07-14 17:43:57 UTC (rev 1253)
+++ apps/opengeo/geoexplorer/branches/0.1.x/build/readme.txt	2009-07-14 19:54:24 UTC (rev 1254)
@@ -41,7 +41,7 @@
 the code below (assuming you are running it with a local GeoServer)::
 
     var app = new GeoExplorer({
-        ows: "/geoserver/wms",
+        wms: "/geoserver/wms",
         map: {
             layers: [{
                 name: "topp:bluemarble",
@@ -56,7 +56,7 @@
 displayed, edit your application config to read something like the code below::
 
     var app = new GeoExplorer({
-        ows: "/geoserver/wms",
+        wms: "/geoserver/wms",
         map: {
             layers: [{
                 name: "topp:bluemarble",

Deleted: apps/opengeo/geoexplorer/branches/0.1.x/debug.html
===================================================================
--- apps/opengeo/geoexplorer/branches/0.1.x/debug.html	2009-07-14 17:43:57 UTC (rev 1253)
+++ apps/opengeo/geoexplorer/branches/0.1.x/debug.html	2009-07-14 19:54:24 UTC (rev 1254)
@@ -1,78 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
-    <head>
-        <title>GeoExplorer (debug)</title>
-        
-        <!-- IE 8 Compatibility -->
-        <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
-        
-        <link rel="shortcut icon" href="theme/app/img/favicon.ico"/>
-
-        <!-- Ext resources -->
-        <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.cachefly.net/ext-2.2.1/resources/css/xtheme-gray.css" />
-        <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-debug.js"></script>
-
-        <!-- OpenLayers resources -->
-        <link rel="stylesheet" type="text/css" href="externals/openlayers/theme/default/style.css" />
-        <script src="externals/openlayers/lib/OpenLayers.js"></script>
-
-        <!-- GeoExt resources -->
-        <link rel="stylesheet" type="text/css" href="externals/geoext/resources/css/geoext-all-debug.css" />
-        <link rel="stylesheet" type="text/css" href="externals/geoext/resources/css/gxtheme-gray.css" />
-        <script src="externals/geoext/lib/GeoExt.js"></script> 
-
-        <!-- GeoExplorer resources -->
-        <link rel="stylesheet" type="text/css" href="theme/app/geoexplorer.css" />
-        <!--[if IE]><link rel="stylesheet" type="text/css" href="theme/app/ie.css"/><![endif]-->
-        <script src="lib/GeoExplorer.js"></script> 
-        <script src="lib/GeoExplorer/util.js"></script> 
-        <script src="lib/Ext/grid/RowExpander.js"></script> 
-        <script src="lib/GeoExplorer/CapabilitiesGrid.js"></script> 
-
-        <script>
-            Ext.BLANK_IMAGE_URL = "theme/app/img/blank.gif";
-
-            var app = new GeoExplorer({
-
-                /**
-                 * The application loads capabilities from a single WMS.  The
-                 * ows value below is an absolute URL for this WMS.  Because the
-                 * application loads capabilities from a different host than the
-                 * one that serves this application, you need to configure a
-                 * proxy to have the application work.
-                 *
-                 * If you have a WMS running on the same origin as this application
-                 * you can use a relative URL and remove the proxy property below.
-                 */
-                ows: "http://demo.opengeo.org/geoserver/wms",
-
-                /**
-                 * If you do not have a WMS running on the same host that serves
-                 * this application, you need to set up a proxy.  For a proxy
-                 * that works with mod_python, see the following:
-                 * http://svn.opengeo.org/util/proxy/proxy.py
-                 *
-                 * If you do have a WMS on the same origin as this application,
-                 * provide a relative URL for the WMS above and comment out this
-                 * proxy property below.
-                 */
-                proxy: "/proxy/?url=",                
-
-                map: {
-                    layers: [{
-                        name: "topp:bluemarble",
-                        title: "Global Imagery"
-                    }],
-                    center: [-96.7, 37.6],
-                    zoom: 4
-                }
-
-            });
-        </script>
-
-    </head>
-    <body>
-    </body>
-</html>

Modified: apps/opengeo/geoexplorer/branches/0.1.x/readme-dev.txt
===================================================================
--- apps/opengeo/geoexplorer/branches/0.1.x/readme-dev.txt	2009-07-14 17:43:57 UTC (rev 1253)
+++ apps/opengeo/geoexplorer/branches/0.1.x/readme-dev.txt	2009-07-14 19:54:24 UTC (rev 1254)
@@ -10,37 +10,27 @@
 
 To get a copy of the application source code, use subversion::
 
-    you at prompt:~$ svn export http://svn.geoext.org/apps/opengeo/geoexplorer/branches/0.1.x/ geoexplorer
+    you at prompt:~$ svn checkout http://svn.geoext.org/apps/opengeo/geoexplorer/branches/0.1.x geoexplorer
 
 
 Running in development mode
 ---------------------------
 
-Your copy of the application contains a debug.html file that loads the
-application for debugging/development.  This file is not suitable for running
-the application in production.  To view the application, open the debug.html
-page in a browser (e.g. http://localhost/path/to/geoexplorer/debug.html).
+The application can be run in development or distribution mode.  In development
+mode, individual scripts are available to a debugger.  In distribution mode,
+scripts are concatenated and minified.
 
-Note that the inital configuration for the application works off of a remote
-WMS and requires that you have a proxy set up locally.  See the debug.html
-source for detail on configuration with a local WMS.
+To run the application in development mode, change into the build director and
+run ant::
 
+    you at prompt:~$ cd geoexplorer/build
+    you at prompt:~/geoexplorer/build$ ant dev
 
-Connecting GeoExplorer to a local GeoServer
--------------------------------------------
+If the build succeeds, everything you need to run the application will be in the
+new build/GeoExplorer directory.  Browse to this directory in your browser (e.g.
+http://localhost/~you/geoexplorer/build/GeoExplorer).
 
-The easiest way to run GeoExplorer is to place it in the www folder of a
-GeoServer data dir.
 
-1. Copy the geoexplorer root directory to $GEOSERVER_DATA_DIR/www/
-
-2. Modify the "ows" configuration value in geoexplorer/debug.html to reflect the
-path to your GeoServer WMS endpoint (usually "/geoserver/wms").
-
-3. Open the debug.html page in a browser (e.g.
-http://localhost:8080/geoserver/www/geoexplorer/debug.html)
-
-
 Preparing the application for deployment
 ----------------------------------------
 
@@ -48,21 +38,20 @@
 JavaScript files will be loaded dynamically.  Before moving your application
 to a production environment, follow the steps below.
 
-1. Copy any changes to the app configuration you made in debug.html into the
-geoexplorer/build/index.html file.  Just copy the changes to the JavaScript -
-do not copy the entire contents of debug.html to index.html.
+1. Copy any changes to the app configuration you made in GeoExplorer/index.html
+into the geoexplorer/src/html/index.html file.  Just copy the changes to the
+JavaScript - do not copy the entire contents of the file.
 
 2. If you have not already set up JSTools, do so following the instructions
 you find on the JSTools project page: http://pypi.python.org/pypi/JSTools
 
-3. Use the Makefile in the build directory to create a standalone copy of the
-application.
+3. Run ant to build the application for distribution.
 
 For example, to create a directory that can be moved to your production
 environment, do the following::
 
     you at prompt:~$ cd geoexplorer/build
-    you at prompt:~/geoexplorer/build$ make app
+    you at prompt:~/geoexplorer/build$ ant
 
 Move the GeoExplorer directory (from the build directory) to your production
 environment.
@@ -70,5 +59,21 @@
 If you want to create a zip archive of the application, instead run the
 following:::
 
-    you at prompt:~/geoexplorer/build$ make zip
+    you at prompt:~/geoexplorer/build$ ant zip
 
+
+Connecting GeoExplorer to a local GeoServer
+-------------------------------------------
+
+The easiest way to run GeoExplorer is to place it in the www folder of a
+GeoServer data dir. This requires the production build described above (built by
+running `ant`).
+
+1. Copy the build/GeoExplorer directory to $GEOSERVER_DATA_DIR/www/
+
+2. Modify the "wms" configuration value in GeoExplorer/index.html to reflect the
+path to your GeoServer WMS endpoint (usually "/geoserver/wms").
+
+3. Open the index.html page in a browser (e.g.
+http://localhost:8080/geoserver/www/GeoExplorer/index.html)
+

Copied: apps/opengeo/geoexplorer/branches/0.1.x/src/html/about.html (from rev 1253, apps/opengeo/geoexplorer/branches/0.1.x/about.html)
===================================================================
--- apps/opengeo/geoexplorer/branches/0.1.x/src/html/about.html	                        (rev 0)
+++ apps/opengeo/geoexplorer/branches/0.1.x/src/html/about.html	2009-07-14 19:54:24 UTC (rev 1254)
@@ -0,0 +1,36 @@
+<html>
+    <head>
+        <title>About GeoExplorer</title>
+        <link rel="stylesheet" type="text/css" href="@theme-dir@/about.css"/>
+    </head>
+    <body>
+    <div class="logo"></div>
+    <h2> GeoExplorer </h2>
+    <div class="versioninfo">Version 0.1</div>
+    <h3> Engineering & Design by OpenGeo </h3>
+    <a href="http://opengeo.org/">http://opengeo.org/</a>
+    &copy; 2009, OpenGeo under the BSD license.
+
+    <h3> GeoExt Framework </h3>
+    <a href="http://geoext.org/">http://geoext.org/</a>
+    &copy; 2009, OSGeo under the BSD license.
+
+    <h3> GeoSilk Icons </h3>
+    <a href="http://projects.opengeo.org/geosilk/">http://projects.opengeo.org/geosilk/</a>
+    &copy; 2009, OpenGeo under CC-BY 3.0.
+
+    <h3> Silk Icons </h3>
+    <a href="http://famfamfam.com/lab/icons/silk/">http://famfamfam.com/lab/icons/silk/</a>
+    &copy; Mark James under CC-BY 3.0.
+
+    <h3> Contributors </h3>
+    <ul>
+    <li>Tim Schaub</li>
+    <li>David Winslow</li>
+    <li>Sebastian Benthall</li>
+    <li>Andreas Hocevar</li>
+    <li>Tim Coulter</li>
+    <li>Rolando Pe&ntilde;ate</li>
+    </ul>
+    </body>
+</html>


Property changes on: apps/opengeo/geoexplorer/branches/0.1.x/src/html/about.html
___________________________________________________________________
Name: svn:mergeinfo
   + 

Copied: apps/opengeo/geoexplorer/branches/0.1.x/src/html/index.html (from rev 1253, apps/opengeo/geoexplorer/branches/0.1.x/build/index.html)
===================================================================
--- apps/opengeo/geoexplorer/branches/0.1.x/src/html/index.html	                        (rev 0)
+++ apps/opengeo/geoexplorer/branches/0.1.x/src/html/index.html	2009-07-14 19:54:24 UTC (rev 1254)
@@ -0,0 +1,73 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+    <head>
+        <title>@title@</title>
+        
+        <!-- IE 8 Compatibility -->
+        <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
+        
+        <!-- Ext resources -->
+        <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.cachefly.net/ext-2.2.1/resources/css/xtheme-gray.css" />
+        <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>
+
+        <!-- OpenLayers resources -->
+        <link rel="stylesheet" type="text/css" href="@ol-style.css@" />
+        <script type="text/javascript" src="@OpenLayers.js@"></script>
+
+        <!-- GeoExt resources -->
+        <link rel="stylesheet" type="text/css" href="@geoext-all.css@" />
+        <link rel="stylesheet" type="text/css" href="@gxtheme-gray.css@" />
+        <script type="text/javascript" src="@GeoExt.js@"></script> 
+
+        <!-- GeoExplorer resources -->
+        <link rel="shortcut icon" href="@theme-dir@/img/favicon.ico"/>
+        <link rel="stylesheet" type="text/css" href="@theme-dir@/geoexplorer.css" />
+        <!--[if IE]><link rel="stylesheet" type="text/css" href="@theme-dir@/ie.css"/><![endif]-->
+        <script type="text/javascript" src="@GeoExplorer.js@"></script>
+        <script type="text/javascript" src="@ux.js@"></script>
+
+        <script>
+            Ext.BLANK_IMAGE_URL = "@theme-dir@/img/blank.gif";
+            var app = new GeoExplorer({
+
+                /**
+                 * The application loads capabilities from a single WMS.  The
+                 * wms value below is an absolute URL for this WMS.  Because the
+                 * application loads capabilities from a different host than the
+                 * one that serves this application, you need to configure a
+                 * proxy to have the application work.
+                 *
+                 * If you have a WMS running on the same origin as this application
+                 * you can use a relative URL and remove the proxy property below.
+                 */
+                wms: "http://demo.opengeo.org/geoserver/wms",
+
+                /**
+                 * If you do not have a WMS running on the same host that serves
+                 * this application, you need to set up a proxy.  For a proxy
+                 * that works with mod_python, see the following:
+                 * http://svn.opengeo.org/util/proxy/proxy.py
+                 *
+                 * If you do have a WMS on the same origin as this application,
+                 * provide a relative URL for the WMS above and comment out this
+                 * proxy property below.
+                 */
+                proxy: "/proxy/?url=",
+
+                map: {
+                    layers: [{
+                        name: "topp:bluemarble",
+                        title: "Global Imagery"
+                    }],
+                    center: [-96.7, 37.6],
+                    zoom: 4
+                }
+            });
+        </script>
+
+    </head>
+    <body>
+    </body>
+</html>

Copied: apps/opengeo/geoexplorer/branches/0.1.x/src/script/app/GeoExplorer (from rev 1253, apps/opengeo/geoexplorer/branches/0.1.x/lib/GeoExplorer)


Property changes on: apps/opengeo/geoexplorer/branches/0.1.x/src/script/app/GeoExplorer
___________________________________________________________________
Name: svn:mergeinfo
   + 

Copied: apps/opengeo/geoexplorer/branches/0.1.x/src/script/app/GeoExplorer.js (from rev 1253, apps/opengeo/geoexplorer/branches/0.1.x/lib/GeoExplorer.js)
===================================================================
--- apps/opengeo/geoexplorer/branches/0.1.x/src/script/app/GeoExplorer.js	                        (rev 0)
+++ apps/opengeo/geoexplorer/branches/0.1.x/src/script/app/GeoExplorer.js	2009-07-14 19:54:24 UTC (rev 1254)
@@ -0,0 +1,1084 @@
+/**
+ * Copyright (c) 2009 The Open Planning Project
+ */
+
+/**
+ * Constructor: GeoExplorer
+ * Create a new GeoExplorer application.
+ *
+ * Parameters:
+ * config - {Object} Optional application configuration properties.
+ *
+ * Valid config properties:
+ * map - {Object} Map configuration object.
+ * wms - {String} WMS URL
+ * alignToGrid - {boolean} if true, align tile requests to the grid enforced by
+ *     tile caches such as GeoWebCache or Tilecache
+ *
+ * Valid map config properties:
+ * layers - {Array} A list of layer configuration objects.
+ * center - {Array} A two item array with center coordinates.
+ * zoom - {Number} An initial zoom level.
+ *
+ * Valid layer config properties:
+ * name - {String} Required WMS layer name.
+ * title - {String} Optional title to display for layer.
+ */
+var GeoExplorer = Ext.extend(Ext.util.Observable, {
+    
+    /**
+     * Property: map
+     * {OpenLayers.Map} The application's map.
+     */
+    map: null,
+    
+    /**
+     * Property: layers
+     * {GeoExt.data.LayerStore} A store containing a record for each layer
+     *     on the map.
+     */
+    layers: null,
+
+    /**
+     * Property: capabilities
+     * {GeoExt.data.WMSCapabilitiesStore} A store containing a record for each
+     *     layer on the server.
+     */
+    capabilities: null,
+
+    /**
+     * Property: mapPanel
+     * {GeoExt.MapPanel} the MapPanel instance for the main viewport
+     */
+    mapPanel: null,
+
+    /**
+     * Property: alignToGrid
+     * whether or not to restrict tile request to tiled mapping service recommendation
+     */
+    alignToGrid: false,
+
+    /**
+     * Property: capGrid
+     * {<Ext.Window>} A window which includes a CapabilitiesGrid panel.
+     */
+    capGrid: null,
+
+    /**
+     * Property: popupCache
+     * {Object} An object containing references to visible popups so that 
+     *     we can insert responses from multiple requests.
+     */
+    popupCache: null,
+
+    constructor: function(config) {
+
+        var query = Ext.urlDecode(document.location.search.substr(1));
+        var queryConfig = Ext.util.JSON.decode(query.q);
+        
+        this.initialConfig = Ext.apply({}, queryConfig, config);
+        Ext.apply(this, this.initialConfig);
+
+        // add any custom application events
+        this.addEvents(
+            /**
+             * Event: ready
+             * Fires when application is ready for user interaction.
+             */
+            "ready"
+        );
+        
+        // pass on any proxy config to OpenLayers
+        if(this.proxy) {
+            OpenLayers.ProxyHost = this.proxy;
+        }
+        
+        this.popupCache = {};
+        
+        this.load();
+        
+    },
+    
+
+    /**
+     * Method: load
+     * Called at the end of construction.  This initiates the sequence that
+     *     prepares the application for use.
+     */
+    load: function() {
+        GeoExplorer.util.dispatch(
+            [
+                // create layout as soon as Ext says ready
+                function(done) {
+                    Ext.onReady(function() {
+                        this.createLayout();
+                        done();
+                    }, this);
+                },
+                // load capabilities immediately
+                function(done) {
+                    this.initCapabilities();
+                    this.capabilities.load({
+                        callback: done
+                    });
+                }
+            ],
+            // activate app when the above are both done
+            this.activate, this
+        );
+    },
+    
+    /**
+     * Method: initCapabilities
+     */
+    initCapabilities: function() {        
+        var url;
+        var args = {
+            SERVICE: "WMS",
+            REQUEST: "GetCapabilities"
+        };
+        var argIndex = this.wms.indexOf("?");
+        if(argIndex > -1) {
+            var search = this.wms.substring(this.wms.indexOf("?")+1);
+            var url = this.wms.replace(search, Ext.urlEncode(Ext.apply(
+                Ext.urlDecode(search), args
+            )));
+        } else {
+            url = this.wms + "?" + Ext.urlEncode(args);
+        }
+        if(this.proxy) {
+            url = this.proxy + encodeURIComponent(url);
+        }
+        
+        this.capabilities = new GeoExt.data.WMSCapabilitiesStore({url: url});
+    },
+    
+    /**
+     * Method: createLayout
+     * Create the various parts that compose the layout.
+     */
+    createLayout: function() {
+        
+        // create the map
+        // TODO: check this.initialConfig.map for any map options
+        this.map = new OpenLayers.Map({
+            theme: null,
+            allOverlays: true,
+            controls: [new OpenLayers.Control.Navigation(),
+                       new OpenLayers.Control.PanPanel(),
+                       new OpenLayers.Control.ZoomPanel()]
+        });
+
+        //** Remove this code when OpenLayers #2069 is closed **
+        var onDoubleClick = function(ctrl, evt) { 
+ 	        OpenLayers.Event.stop(evt ? evt : window.event); 
+        };
+        var controls = this.map.controls[1].controls;
+        for(var i = 0; i < controls.length; i++){
+            OpenLayers.Event.observe(controls[i].panel_div, "dblclick",  
+ 	                             OpenLayers.Function.bind(onDoubleClick, this.map.controls[0], controls[i])); 
+        }        
+        //******************************************************
+
+        //TODO: make this more configurable
+        this.map.events.on({
+            "preaddlayer" : function(evt){
+                if(evt.layer.mergeNewParams){
+                    var maxExtent = evt.layer.maxExtent;
+                    evt.layer.mergeNewParams({
+                        transparent: true,
+                        format: "image/png",
+                        tiled: true,
+                        tilesorigin: [maxExtent.left, maxExtent.bottom]
+                    });
+                }
+            },
+            scope : this
+        });
+        
+
+        // place map in panel
+        var mapConfig = this.initialConfig.map || {};
+        this.mapPanel = new GeoExt.MapPanel({
+            layout: "anchor",
+            border: true,
+            region: "center",
+            map: this.map,
+            // TODO: update the OpenLayers.Map constructor to accept an initial center
+            center: mapConfig.center && new OpenLayers.LonLat(mapConfig.center[0], mapConfig.center[1]),
+            // TODO: update the OpenLayers.Map constructor to accept an initial zoom
+            zoom: mapConfig.zoom,
+            items: [
+                {
+                    xtype: "gx_zoomslider",
+                    vertical: true,
+                    height: 100,
+                    plugins: new GeoExt.ZoomSliderTip({
+                        template: "<div>Zoom Level: {zoom}</div>"
+                    })
+                },
+                this.createMapOverlay()
+            ]
+        });
+        
+        // create layer store
+        this.layers = this.mapPanel.layers;
+
+        var addLayerButton = new Ext.Button({
+            tooltip : "Add Layers",
+            disabled: true,
+            iconCls: "icon-addlayers",
+            handler : this.showCapabilitiesGrid,
+            scope: this
+        });
+        this.on("ready", function() {addLayerButton.enable();});
+
+        var removeLayerAction = new Ext.Action({
+            text: "Remove Layer",
+            iconCls: "icon-removelayers",
+            disabled: true,
+            tooltip: "Remove Layer",
+            handler: function() {
+                var node = layerTree.getSelectionModel().getSelectedNode();
+                if(node && node.layer) {
+                    var layer = node.layer;
+                    var store = node.layerStore;
+                    var record = store.getAt(store.findBy(function(record) {
+                        return record.get("layer") === layer;
+                    }));
+                    store.remove(record);
+                    removeLayerAction.disable();
+                }
+            }
+        });
+        
+        var layerTree = new Ext.tree.TreePanel({
+            border: false,
+            rootVisible: false,
+            root: new GeoExt.tree.LayerContainer({
+                text: 'Map Layers',
+                layerStore: this.layers
+            }),
+            enableDD: true,
+            selModel: new Ext.tree.DefaultSelectionModel({
+                listeners: {
+                    beforeselect: function() {
+                        // allow removal if more than one non-vector layer
+                        var count = this.mapPanel.layers.queryBy(function(r) {
+                            return !(r.get("layer") instanceof OpenLayers.Layer.Vector);
+                        }).getCount();
+                        if(count > 1) {
+                            removeLayerAction.enable();
+                        }
+                    },
+                    scope: this
+                }
+            }),
+            listeners: {
+                contextmenu: function(node, e) {
+                    node.select();
+                    var c = node.getOwnerTree().contextMenu;
+                    c.contextNode = node;
+                    c.showAt(e.getXY());
+                },
+                scope: this
+            },
+            contextMenu: new Ext.menu.Menu({
+                items: [
+                    {
+                        text: "Zoom to Layer Extent",
+                        iconCls: "icon-zoom-visible",
+                        handler: function() {
+                            var node = layerTree.getSelectionModel().getSelectedNode();
+                            if(node && node.layer) {
+                                this.map.zoomToExtent(node.layer.restrictedExtent);
+                            }
+                        },
+                        scope: this
+                    },
+                    removeLayerAction
+                ]
+            })
+        });
+
+        var layersContainer = new Ext.Panel({
+            autoScroll: true,
+            border: false,
+            region: 'center',
+            title: "Layers",
+            items: [layerTree],
+            tbar: [
+                addLayerButton,
+                Ext.apply(new Ext.Button(removeLayerAction), {text: ""})
+            ]
+        });
+
+        var legendContainer = new GeoExt.LegendPanel({
+            title: "Legend",
+            border: false,
+            region: 'south',
+            height: 200,
+            collapsible: true,
+            split: true,
+            autoScroll: true,
+            ascending: false,
+            map: this.map,
+            defaults: {cls: 'legend-item'}
+        });
+
+        var westPanel = new Ext.Panel({
+            border: true,
+            layout: "border",
+            region: "west",
+            width: 250,
+            split: true,
+            collapsible: true,
+            collapseMode: "mini",
+            items: [
+                layersContainer, legendContainer
+            ]
+        });
+        
+        var toolbar = new Ext.Toolbar({
+            xtype: "toolbar",
+            region: "north",
+            disabled: true,
+            items: this.createTools()
+        });
+        this.on("ready", function() {
+            // enable only those items that were not specifically disabled
+            var disabled = toolbar.items.filterBy(function(item) {
+                return item.initialConfig && item.initialConfig.disabled;
+            });
+            toolbar.enable();
+            disabled.each(function(item) {
+                item.disable();
+            });
+        });
+
+        var viewport = new Ext.Viewport({
+            layout: "fit",
+            hideBorders: true,
+            items: {
+                layout: "border",
+                deferredRender: false,
+                items: [
+                    toolbar,
+                    this.mapPanel,
+                    westPanel
+                ]
+            }
+        });    
+    },
+    
+    /**
+     * Method: activate
+     * Activate the application.  Call after application is configured.
+     */
+    activate: function() {
+        
+        // add any layers from config
+        this.addLayers();
+
+        // initialize tooltips
+        Ext.QuickTips.init();
+        
+        this.fireEvent("ready");
+
+    },
+    
+    /**
+     * Method: addLayers
+     * Construct the layer store to be used with the map (referenced as <layers>).
+     */
+    addLayers: function() {
+        var mapConfig = this.initialConfig.map;
+
+        if(mapConfig && mapConfig.layers) {
+            var conf, id, record, layer, records = [];
+            for(var i=0; i<mapConfig.layers.length; ++i) {
+                conf = mapConfig.layers[i];
+                id = this.capabilities.find("name", conf.name);
+                if(id >= 0) {
+                    /**
+                     * If the same layer is added twice, it will get replaced
+                     * unless we give each record a unique id.  In addition, we
+                     * need to clone the layer so that the map doesn't assume
+                     * the layer has already been added.  Finally, we can't
+                     * simply set the record layer to the cloned layer because
+                     * record.set compares String(value) to determine equality.
+                     * 
+                     * TODO: suggest record.clone
+                     */
+                    Ext.data.Record.AUTO_ID++;
+                    record = this.capabilities.getAt(id).copy(Ext.data.Record.AUTO_ID);
+                    layer = record.get("layer").clone();
+                    record.set("layer", null);
+                    record.set("layer", layer);
+
+                    // set layer max extent from capabilities
+                    // TODO: make this SRS independent
+                    layer.restrictedExtent = OpenLayers.Bounds.fromArray(record.get("llbbox"));
+
+                    if (this.alignToGrid) {
+                        layer.maxExtent = new OpenLayers.Bounds(-180, -90, 180, 90);
+                    } else {
+                        layer.maxExtent = layer.restrictedExtent;
+                    }
+
+                    // set layer visibility from config
+                    layer.visibility = ("visibility" in conf) ?
+                        conf.visibility : true;
+                    
+                    // set layer title from config
+                    if(conf.title) {
+                        /**
+                         * Because the layer title data is duplicated, we have
+                         * to set it in both places.  After records have been
+                         * added to the store, the store handles this
+                         * synchronization.
+                         */
+                        layer.setName(conf.title);
+                        record.set("title", conf.title);
+                    }
+
+                    // set any other layer configuration
+
+                    records.push(record);
+                }
+            }
+            this.layers.add(records);
+            
+            // set map center
+            if(this.mapPanel.center) {
+                // zoom does not have to be defined
+                this.map.setCenter(this.mapPanel.center, this.mapPanel.zoom);
+            } else if (this.mapPanel.extent) {
+                this.map.zoomToExtent(this.mapPanel.extent);
+            } else {
+                this.map.zoomToMaxExtent();
+            }
+            
+        }
+    },
+
+    /**
+     * Method: initCapGrid
+     * Constructs a window with a capabilities grid.
+     */
+    initCapGrid: function(){
+
+        var capGridPanel = new GeoExplorer.CapabilitiesGrid({
+            store: this.capabilities,
+            mapPanel : this.mapPanel,
+            layout: 'fit',
+            region: 'center',
+            autoScroll: true,
+            alignToGrid: this.alignToGrid,
+            listeners: {
+                rowdblclick: function(panel, index, evt) {
+                    panel.addLayers();
+                }
+            }
+        });
+
+        this.capGrid = new Ext.Window({
+            title: "Available Layers",
+            closeAction: 'hide',
+            layout: 'border',
+            height: 300,
+            width: 600,
+            items: [
+                capGridPanel
+            ],
+            bbar: [
+                "->",
+                new Ext.Button({
+                    text: "Add Layers",
+                    iconCls: "icon-addlayers",
+                    handler: function(){
+                        capGridPanel.addLayers();
+                    },
+                    scope : this
+                }),
+                new Ext.Button({
+                    text: "Done",
+                    handler: function() {
+                        this.capGrid.hide();
+                    },
+                    scope: this
+                })
+            ],
+            listeners: {
+                hide: function(win){
+                    capGridPanel.getSelectionModel().clearSelections();
+                }
+            }
+        });
+    },
+
+    /**
+     * Method: showCapabilitiesGrid
+     * Shows the window with a capabilities grid.
+     */
+    showCapabilitiesGrid: function() {
+        if(!this.capGrid) {
+            this.initCapGrid();
+        }
+        this.capGrid.show();
+    },
+
+    createMapOverlay: function() {
+        var scaleLinePanel = new Ext.Panel({
+            cls: 'olControlScaleLine overlay-element overlay-scaleline',
+            border: false
+        });
+
+        scaleLinePanel.on('render', function(){
+            var scaleLine = new OpenLayers.Control.ScaleLine({
+                div: scaleLinePanel.body.dom
+            });
+
+            this.map.addControl(scaleLine);
+            scaleLine.activate();
+        }, this);
+
+        var zoomStore = new GeoExt.data.ScaleStore({
+            map: this.map
+        });
+
+        var zoomSelector = new Ext.form.ComboBox({
+            emptyText: 'Zoom level',
+            tpl: '<tpl for="."><div class="x-combo-list-item">1 : {[parseInt(values.scale)]}</div></tpl>',
+            editable: false,
+            triggerAction: 'all',
+            mode: 'local',
+            store: zoomStore,
+            width: 110
+        });
+
+        zoomSelector.on('click', function(evt){evt.stopEvent();});
+        zoomSelector.on('mousedown', function(evt){evt.stopEvent();});
+
+        zoomSelector.on('select', function(combo, record, index) {
+                this.map.zoomTo(record.data.level);
+            },
+            this
+        );
+
+        var zoomSelectorWrapper = new Ext.Panel({
+            items: [zoomSelector],
+            cls: 'overlay-element overlay-scalechooser',
+            border: false });
+
+        this.map.events.register('zoomend', this, function() {
+            var scale = zoomStore.queryBy(function(record){
+                return this.map.getZoom() == record.data.level;
+            });
+
+            if (scale.length > 0) {
+                scale = scale.items[0];
+                zoomSelector.setValue("1 : " + parseInt(scale.data.scale, 10));
+            } else {
+                if (!zoomSelector.rendered) {
+                    return;
+                }
+                zoomSelector.clearValue();
+            }
+        });
+
+        var mapOverlay = new Ext.Panel({
+            // title: "Overlay",
+            cls: 'map-overlay',
+            items: [
+                scaleLinePanel,
+                zoomSelectorWrapper
+            ]
+        });
+
+
+        mapOverlay.on("afterlayout", function(){
+            scaleLinePanel.body.dom.style.position = 'relative';
+            scaleLinePanel.body.dom.style.display = 'inline';
+
+            mapOverlay.getEl().on("click", function(x){x.stopEvent();});
+            mapOverlay.getEl().on("mousedown", function(x){x.stopEvent();});
+        }, this);
+
+        return mapOverlay;
+    },
+
+    createTools: function() {
+
+        var toolGroup = "toolGroup";
+
+        // create a navigation control
+        var navAction = new GeoExt.Action({
+            tooltip: "Pan Map",
+            iconCls: "icon-pan",
+            enableToggle: true,
+            pressed: true,
+            allowDepress: false,
+            control: new OpenLayers.Control.Navigation(),
+            map: this.map,
+            toggleGroup: toolGroup
+        });
+        
+        // create a navigation history control
+        var historyControl = new OpenLayers.Control.NavigationHistory();
+        this.map.addControl(historyControl);
+
+        // create actions for previous and next
+        var navPreviousAction = new GeoExt.Action({
+            tooltip: "Zoom to Previous Extent",
+            iconCls: "icon-zoom-previous",
+            disabled: true,
+            control: historyControl.previous
+        });
+        
+        var navNextAction = new GeoExt.Action({
+            tooltip: "Zoom to Next Extent",
+            iconCls: "icon-zoom-next",
+            disabled: true,
+            control: historyControl.next
+        });
+        
+        
+        // create a get feature info control
+        var info = {controls: []};
+        var infoButton = new Ext.Button({
+            tooltip: "Get Feature Info",
+            iconCls: "icon-getfeatureinfo",
+            toggleGroup: toolGroup,
+            enableToggle: true,
+            allowDepress: false,
+            toggleHandler: function(button, pressed) {
+                for (var i = 0, len = info.controls.length; i < len; i++){
+                    if(pressed) {
+                        info.controls[i].activate();
+                    } else {
+                        info.controls[i].deactivate();
+                    }
+                }
+            }
+        });
+
+        var updateInfo = function() {
+            var queryableLayers = this.mapPanel.layers.queryBy(function(x){
+                return x.get("queryable");
+            });
+
+            var map = this.mapPanel.map;
+            var control;
+            for (var i = 0, len = info.controls.length; i < len; i++){
+                control = info.controls[i];
+                control.deactivate();  // TODO: remove when http://trac.openlayers.org/ticket/2130 is closed
+                control.destroy();
+            }
+
+            info.controls = [];
+            queryableLayers.each(function(x){
+                var control = new OpenLayers.Control.WMSGetFeatureInfo({
+                    url: x.get("layer").url,
+                    queryVisible: true,
+                    layers: [x.get("layer")],
+                    eventListeners: {
+                        getfeatureinfo: function(evt) {
+                            this.displayPopup(evt, x.get("title") || x.get("name"));
+                        },
+                        scope: this
+                    }
+                });
+                map.addControl(control);
+                info.controls.push(control);
+                if(infoButton.pressed) {
+                    control.activate();
+                }
+            }, this);
+        };
+
+        this.mapPanel.layers.on("update", updateInfo, this);
+        this.mapPanel.layers.on("add", updateInfo, this);
+        this.mapPanel.layers.on("remove", updateInfo, this);
+
+        // create split button for measure controls
+        var activeIndex = 0;
+        var measureSplit = new Ext.SplitButton({
+            iconCls: "icon-measure-length",
+            tooltip: "Measure",
+            enableToggle: true,
+            toggleGroup: toolGroup, // Ext doesn't respect this, registered with ButtonToggleMgr below
+            allowDepress: false, // Ext doesn't respect this, handler deals with it
+            handler: function(button, event) {
+                // allowDepress should deal with this first condition
+                if(!button.pressed) {
+                    button.toggle();
+                } else {
+                    button.menu.items.itemAt(activeIndex).setChecked(true);
+                }
+            },
+            listeners: {
+                toggle: function(button, pressed) {
+                    // toggleGroup should handle this
+                    if(!pressed) {
+                        button.menu.items.each(function(i) {
+                            i.setChecked(false);
+                        });
+                    }
+                },
+                render: function(button) {
+                    // toggleGroup should handle this
+                    Ext.ButtonToggleMgr.register(button);
+                }
+            },
+            menu: new Ext.menu.Menu({
+                items: [
+                    new Ext.menu.CheckItem(
+                        new GeoExt.Action({
+                            text: "Length",
+                            iconCls: "icon-measure-length",
+                            toggleGroup: toolGroup,
+                            group: toolGroup,
+                            allowDepress: false,
+                            map: this.map,
+                            control: this.createMeasureControl(
+                                OpenLayers.Handler.Path, "Length"
+                            )
+                        })
+                    ),
+                    new Ext.menu.CheckItem(
+                        new GeoExt.Action({
+                            text: "Area",
+                            iconCls: "icon-measure-area",
+                            toggleGroup: toolGroup,
+                            group: toolGroup,
+                            allowDepress: false,
+                            map: this.map,
+                            control: this.createMeasureControl(
+                                OpenLayers.Handler.Polygon, "Area"
+                            )
+                        })
+                    )
+                ]
+            })
+        });
+        measureSplit.menu.items.each(function(item, index) {
+            item.on({checkchange: function(item, checked) {
+                measureSplit.toggle(checked);
+                if(checked) {
+                    activeIndex = index;
+                    measureSplit.setIconClass(item.iconCls);
+                }
+            }});
+        });
+        
+        var tools = [
+            new Ext.Button({
+                text: "GeoExplorer",
+                iconCls: "icon-geoexplorer",
+                handler: this.displayAppInfo
+            }),
+            "-",
+            new Ext.Button({
+                tooltip: "Bookmark",
+                handler: this.bookmark,
+                scope: this,
+                iconCls: "icon-save"
+            }),
+            "-",
+            navAction,
+            infoButton,
+            measureSplit,
+            "-",
+            new Ext.Button({
+                handler: function(){
+                    this.map.zoomIn();
+                },
+                tooltip: "Zoom In",
+                iconCls: "icon-zoom-in",
+                scope: this
+            }),
+            new Ext.Button({
+                tooltip: "Zoom Out",
+                handler: function(){
+                    this.map.zoomOut();
+                },
+                iconCls: "icon-zoom-out",
+                scope: this
+            }),
+            navPreviousAction,
+            navNextAction,
+            new Ext.Button({
+                tooltip: "Zoom to Visible Extent",
+                iconCls: "icon-zoom-visible",
+                handler: function() {
+                    var extent, layer;
+                    for(var i=0, len=this.map.layers.length; i<len; ++i) {
+                        layer = this.map.layers[i];
+                        if(layer.getVisibility()) {
+                            if(extent) {
+                                extent.extend(layer.maxExtent);
+                            } else {
+                                extent = layer.maxExtent.clone();
+                            }
+                        }
+                    }
+                    if(extent) {
+                        this.map.zoomToExtent(extent);
+                    }
+                },
+                scope: this
+            })
+        ];
+
+        return tools;
+    },
+
+    createMeasureControl: function(handlerType, title) {
+        
+        var styleMap = new OpenLayers.StyleMap({
+            "default": new OpenLayers.Style(null, {
+                rules: [new OpenLayers.Rule({
+                    symbolizer: {
+                        "Point": {
+                            pointRadius: 4,
+                            graphicName: "square",
+                            fillColor: "white",
+                            fillOpacity: 1,
+                            strokeWidth: 1,
+                            strokeOpacity: 1,
+                            strokeColor: "#333333"
+                        },
+                        "Line": {
+                            strokeWidth: 3,
+                            strokeOpacity: 1,
+                            strokeColor: "#666666",
+                            strokeDashstyle: "dash"
+                        },
+                        "Polygon": {
+                            strokeWidth: 2,
+                            strokeOpacity: 1,
+                            strokeColor: "#666666",
+                            fillColor: "white",
+                            fillOpacity: 0.3
+                        }
+                    }
+                })]
+            })
+        });
+
+        var cleanup = function() {
+            if (measureToolTip) {
+                measureToolTip.destroy();
+            }   
+        };
+
+        var makeString = function(metricData) {
+            var metric = metricData.measure;
+            var metricUnit = metricData.units;
+            
+            measureControl.displaySystem = "english";
+            
+            var englishData = metricData.geometry.CLASS_NAME.indexOf("LineString") > -1 ?
+            measureControl.getBestLength(metricData.geometry) :
+            measureControl.getBestArea(metricData.geometry);
+
+            var english = englishData[0];
+            var englishUnit = englishData[1];
+            
+            measureControl.displaySystem = "metric";
+            var dim = metricData.order == 2 ? 
+            '<sup>2</sup>' :
+            '';
+            
+            return metric.toFixed(2) + " " + metricUnit + dim + "<br>" + 
+                english.toFixed(2) + " " + englishUnit + dim;
+        };
+        
+        var measureToolTip; 
+        var measureControl = new OpenLayers.Control.Measure(handlerType, {
+            persist: true,
+            handlerOptions: {layerOptions: {styleMap: styleMap}},
+            eventListeners: {
+                measurepartial: function(event) {
+                    cleanup();
+                    measureToolTip = new Ext.ToolTip({
+                        html: makeString(event),
+                        title: title,
+                        autoHide: false,
+                        closable: true,
+                        draggable: false,
+                        mouseOffset: [0, 0],
+                        showDelay: 1,
+                        listeners: {hide: cleanup}
+                    });
+                    if(event.measure > 0) {
+                        var px = measureControl.handler.lastUp;
+                        var p0 = this.mapPanel.getPosition();
+                        measureToolTip.targetXY = [p0[0] + px.x, p0[1] + px.y];
+                        measureToolTip.show();
+                    }
+                },
+                measure: function(event) {
+                    cleanup();                    
+                    measureToolTip = new Ext.ToolTip({
+                        target: Ext.getBody(),
+                        html: makeString(event),
+                        title: title,
+                        autoHide: false,
+                        closable: true,
+                        draggable: false,
+                        mouseOffset: [0, 0],
+                        showDelay: 1,
+                        listeners: {
+                            hide: function() {
+                                measureControl.cancel();
+                                cleanup();
+                            }
+                        }
+                    });
+                },
+                deactivate: cleanup,
+                scope: this
+            }
+        });
+
+        return measureControl;
+    },
+
+    displayPopup: function(evt, title){
+        var popup;
+        var popupKey = evt.xy.x + "." + evt.xy.y;
+
+        if (!(popupKey in this.popupCache)) {
+            var lonlat = this.map.getLonLatFromPixel(evt.xy);
+            popup = new GeoExt.Popup({
+                title: "Feature Info",
+                layout: "accordion",
+                map: this.map,
+                lonlat: lonlat,
+                width: 250,
+                height: 300,
+                listeners: {
+                    close: function(panel) {
+                        delete this.popupCache[popupKey];
+                    },
+                    scope: this
+                }
+            });
+            popup.show();
+            this.popupCache[popupKey] = popup;
+        } else {
+            popup = this.popupCache[popupKey];
+        }
+
+        var html = evt.text;
+        if (!(html == '' || html.match(/<body>\s*<\/body>/))) {
+            popup.add({
+                title: title,
+                layout: "fit",
+                html: html,
+                autoScroll: true,
+                autoWidth: true,
+                collapsible: true
+            });
+        }
+
+        popup.doLayout();
+    },
+
+
+    /**
+     * Method: bookmark
+     * Creates a window that shows the user a URL that can be used to
+     * reload the map in its current configuration.
+     *
+     * Returns:
+     *{String} The URL displayed to the user.
+     */ 
+    bookmark: function(){
+
+        var params = Ext.apply(
+            OpenLayers.Util.getParameters(),
+            {q: Ext.util.JSON.encode(this.extractConfiguration())}
+        );
+        
+        // disregard any hash in the url, but maintain all other components
+        var url =
+            document.location.href.split("?").shift() +
+            "?" + Ext.urlEncode(params);
+
+        var win = new Ext.Window({
+            title: "Bookmark URL",
+            layout: 'form',
+            labelAlign: 'top',
+            modal: true,
+            bodyStyle: "padding: 5px",
+            width: 300,
+            items: [{
+                xtype: 'textfield',
+                fieldLabel: 'Permalink',
+                readOnly: true,
+                anchor: "100%",
+                selectOnFocus: true,
+                value: url
+            }]
+        });
+
+        win.show();
+        win.items.first().selectText();
+
+        return url;
+    },
+    
+    /**
+     * Method: extractConfiguration
+     * Returns an object that represents the app's current configuration.
+     *
+     * Returns:
+     *{Object} An object that represents the app's current configuration.
+     */ 
+    extractConfiguration: function(){
+        var config = {};
+
+        // Map configuration
+
+        var center = this.map.getCenter();
+        
+        config.map = {
+            center: [center.lon, center.lat],
+            zoom: this.map.zoom
+        };
+
+        //Layers configuration
+        config.map.layers = [];
+
+        this.layers.each(function(layerRecord){
+            
+            if(layerRecord.get("layer").displayInLayerSwitcher) {    
+                var c = {
+                    title: layerRecord.get("title"),
+                    name: (layerRecord.get("layer").params && 
+                        layerRecord.get("layer").params.LAYERS) || 
+                        layerRecord.get("name"),
+                    visibility: layerRecord.get("layer").getVisibility()
+                };
+    
+                config.map.layers.push(c);
+            }
+        });
+
+        return config;
+    },
+
+    displayAppInfo: function() {
+        var win = new Ext.Window({
+            title: "About GeoExplorer",
+            html: "<iframe style=\"border: none; height: 100%; width: 100%\" src=\"about.html\"><a target=\"_blank\" href=\"about.html\">About GeoExplorer</a> </iframe>",
+            modal: true,
+            width: 300,
+            height: 350
+        });
+        win.show();
+    }
+});


Property changes on: apps/opengeo/geoexplorer/branches/0.1.x/src/script/app/GeoExplorer.js
___________________________________________________________________
Name: svn:mergeinfo
   + 

Added: apps/opengeo/geoexplorer/branches/0.1.x/src/script/app/loader.js
===================================================================
--- apps/opengeo/geoexplorer/branches/0.1.x/src/script/app/loader.js	                        (rev 0)
+++ apps/opengeo/geoexplorer/branches/0.1.x/src/script/app/loader.js	2009-07-14 19:54:24 UTC (rev 1254)
@@ -0,0 +1,30 @@
+(function() {
+
+    var jsfiles = new Array(
+        "../../src/script/app/GeoExplorer.js",
+        "../../src/script/app/GeoExplorer/util.js",
+        "../../src/script/app/GeoExplorer/CapabilitiesGrid.js"
+    );
+
+    var appendable = !(/MSIE/.test(navigator.userAgent) ||
+                       /Safari/.test(navigator.userAgent));
+    var pieces = new Array(jsfiles.length);
+
+    var element = document.getElementsByTagName("head").length ?
+                    document.getElementsByTagName("head")[0] :
+                    document.body;
+    var script;
+
+    for(var i=0; i<jsfiles.length; i++) {
+        if(!appendable) {
+            pieces[i] = "<script src='" + jsfiles[i] + "'></script>"; 
+        } else {
+            script = document.createElement("script");
+            script.src = jsfiles[i];
+            element.appendChild(script);
+        }
+    }
+    if(!appendable) {
+        document.write(pieces.join(""));
+    }
+})();

Copied: apps/opengeo/geoexplorer/branches/0.1.x/src/script/ux/RowExpander.js (from rev 1253, apps/opengeo/geoexplorer/branches/0.1.x/lib/Ext/grid/RowExpander.js)
===================================================================
--- apps/opengeo/geoexplorer/branches/0.1.x/src/script/ux/RowExpander.js	                        (rev 0)
+++ apps/opengeo/geoexplorer/branches/0.1.x/src/script/ux/RowExpander.js	2009-07-14 19:54:24 UTC (rev 1254)
@@ -0,0 +1,136 @@
+/*
+ * Ext JS Library 2.2.1
+ * Copyright(c) 2006-2009, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://extjs.com/license
+ */
+
+Ext.grid.RowExpander = function(config){
+    Ext.apply(this, config);
+
+    this.addEvents({
+        beforeexpand : true,
+        expand: true,
+        beforecollapse: true,
+        collapse: true
+    });
+
+    Ext.grid.RowExpander.superclass.constructor.call(this);
+
+    if(this.tpl){
+        if(typeof this.tpl == 'string'){
+            this.tpl = new Ext.Template(this.tpl);
+        }
+        this.tpl.compile();
+    }
+
+    this.state = {};
+    this.bodyContent = {};
+};
+
+Ext.extend(Ext.grid.RowExpander, Ext.util.Observable, {
+    header: "",
+    width: 20,
+    sortable: false,
+    fixed:true,
+    menuDisabled:true,
+    dataIndex: '',
+    id: 'expander',
+    lazyRender : true,
+    enableCaching: true,
+
+    getRowClass : function(record, rowIndex, p, ds){
+        p.cols = p.cols-1;
+        var content = this.bodyContent[record.id];
+        if(!content && !this.lazyRender){
+            content = this.getBodyContent(record, rowIndex);
+        }
+        if(content){
+            p.body = content;
+        }
+        return this.state[record.id] ? 'x-grid3-row-expanded' : 'x-grid3-row-collapsed';
+    },
+
+    init : function(grid){
+        this.grid = grid;
+
+        var view = grid.getView();
+        view.getRowClass = this.getRowClass.createDelegate(this);
+
+        view.enableRowBody = true;
+
+        grid.on('render', function(){
+            view.mainBody.on('mousedown', this.onMouseDown, this);
+        }, this);
+    },
+
+    getBodyContent : function(record, index){
+        if(!this.enableCaching){
+            return this.tpl.apply(record.data);
+        }
+        var content = this.bodyContent[record.id];
+        if(!content){
+            content = this.tpl.apply(record.data);
+            this.bodyContent[record.id] = content;
+        }
+        return content;
+    },
+
+    onMouseDown : function(e, t){
+        if(t.className == 'x-grid3-row-expander'){
+            e.stopEvent();
+            var row = e.getTarget('.x-grid3-row');
+            this.toggleRow(row);
+        }
+    },
+
+    renderer : function(v, p, record){
+        p.cellAttr = 'rowspan="2"';
+        return '<div class="x-grid3-row-expander">&#160;</div>';
+    },
+
+    beforeExpand : function(record, body, rowIndex){
+        if(this.fireEvent('beforeexpand', this, record, body, rowIndex) !== false){
+            if(this.tpl && this.lazyRender){
+                body.innerHTML = this.getBodyContent(record, rowIndex);
+            }
+            return true;
+        }else{
+            return false;
+        }
+    },
+
+    toggleRow : function(row){
+        if(typeof row == 'number'){
+            row = this.grid.view.getRow(row);
+        }
+        this[Ext.fly(row).hasClass('x-grid3-row-collapsed') ? 'expandRow' : 'collapseRow'](row);
+    },
+
+    expandRow : function(row){
+        if(typeof row == 'number'){
+            row = this.grid.view.getRow(row);
+        }
+        var record = this.grid.store.getAt(row.rowIndex);
+        var body = Ext.DomQuery.selectNode('tr:nth(2) div.x-grid3-row-body', row);
+        if(this.beforeExpand(record, body, row.rowIndex)){
+            this.state[record.id] = true;
+            Ext.fly(row).replaceClass('x-grid3-row-collapsed', 'x-grid3-row-expanded');
+            this.fireEvent('expand', this, record, body, row.rowIndex);
+        }
+    },
+
+    collapseRow : function(row){
+        if(typeof row == 'number'){
+            row = this.grid.view.getRow(row);
+        }
+        var record = this.grid.store.getAt(row.rowIndex);
+        var body = Ext.fly(row).child('tr:nth(1) div.x-grid3-row-body', true);
+        if(this.fireEvent('beforecollapse', this, record, body, row.rowIndex) !== false){
+            this.state[record.id] = false;
+            Ext.fly(row).replaceClass('x-grid3-row-expanded', 'x-grid3-row-collapsed');
+            this.fireEvent('collapse', this, record, body, row.rowIndex);
+        }
+    }
+});

Copied: apps/opengeo/geoexplorer/branches/0.1.x/src/theme/app/about.css (from rev 1253, apps/opengeo/geoexplorer/branches/0.1.x/theme/app/about.css)
===================================================================
--- apps/opengeo/geoexplorer/branches/0.1.x/src/theme/app/about.css	                        (rev 0)
+++ apps/opengeo/geoexplorer/branches/0.1.x/src/theme/app/about.css	2009-07-14 19:54:24 UTC (rev 1254)
@@ -0,0 +1,35 @@
+body {
+    font-family: tahoma,arial,helvetica,sans-serif;
+    font-size: 10px;
+    background-color: white;
+}
+
+h2 {
+    text-align: center;
+    font-weight: bold;
+    font-size: 12px;
+}
+
+div.versioninfo {
+    text-align: center;
+}
+
+div.logo {
+    margin-left: auto;
+    margin-right: auto;
+    width: 100%;
+    text-align: center;
+    height: 70px;
+    background: url('img/GeoExt_Logo.png') center no-repeat;
+}
+
+h3 {
+    font-weight: bold;
+    margin-bottom: 0em;
+    font-size: 12px;
+}
+
+a {
+    display: block;
+}
+


Property changes on: apps/opengeo/geoexplorer/branches/0.1.x/src/theme/app/about.css
___________________________________________________________________
Name: svn:mergeinfo
   + 

Copied: apps/opengeo/geoexplorer/branches/0.1.x/src/theme/app/geoexplorer.css (from rev 1253, apps/opengeo/geoexplorer/branches/0.1.x/theme/app/geoexplorer.css)
===================================================================
--- apps/opengeo/geoexplorer/branches/0.1.x/src/theme/app/geoexplorer.css	                        (rev 0)
+++ apps/opengeo/geoexplorer/branches/0.1.x/src/theme/app/geoexplorer.css	2009-07-14 19:54:24 UTC (rev 1254)
@@ -0,0 +1,166 @@
+/* don't wrap lines on any tooltips */
+.x-tip {
+    white-space: nowrap;
+}
+
+/* get images on buttons with text to line up with those with no text */
+.x-btn-text-icon .x-btn-center .x-btn-text {
+    background-position: 0 3px;
+}
+
+/* apply some margin when using the row expander */
+.x-grid3-row-body p {
+    margin: 5px !important;
+}
+
+/* workaround for semi-alpha pixels in IE7: background needs to be the same
+ * as the toolbar's background color */
+.ext-ie .x-item-disabled .x-btn-text {
+    background-color: #EAEAEA;
+}
+
+.x-btn .icon-geoexplorer {
+    background-image: url(img/geoexplorer.png);
+}
+
+.x-btn .icon-addlayers {
+    background-image: url(img/silk/add.png);
+}
+
+.x-btn .icon-removelayers {
+    background-image: url(img/silk/delete.png);
+}
+
+.x-btn .icon-getfeatureinfo {
+    background-image: url(img/silk/information.png);
+}
+
+.x-btn .icon-save {
+    background-image: url(img/geosilk/map_save.png);
+}
+
+.x-btn .icon-measure {
+    background-image: url(img/geosilk/measure.png);
+}
+
+.icon-measure-length {
+    background-image: url(img/geosilk/ruler.png) !important;
+}
+
+.icon-measure-area {
+   background-image: url(img/geosilk/ruler_square.png) !important;
+}
+
+.x-btn .icon-zoom-in { 
+    background-image: url(img/silk/magnifier_zoom_in.png);
+}
+
+.x-btn .icon-zoom-out { 
+    background-image: url(img/silk/magnifier_zoom_out.png);
+}
+
+.x-btn .icon-zoom-previous { 
+    background-image: url(img/silk/arrow_left.png);
+}
+
+.x-btn .icon-zoom-next { 
+    background-image: url(img/silk/arrow_right.png);
+}
+
+.x-btn .icon-zoom-visible { 
+    background-image: url(img/silk/arrow_out.png);
+}
+
+.x-btn .icon-pan { 
+    background-image: url(img/geosilk/pan.png);
+}
+
+.legend-item {
+    margin: 0.5em 10px;
+}
+
+div.map-overlay {
+    z-index: 1000; 
+    position: absolute; 
+    right: 10px; 
+    bottom: 10px;
+}
+
+div.map-overlay div.overlay-element {
+    display:inline;
+    float: left;
+    margin: 5px;
+}
+
+.overlay-scaleline {
+    bottom: 0px;
+    left: 0px;
+    margin-top: 0px;
+}
+
+/* Pan- and Zoom- Panel Styles*/
+
+.olControlPanPanel div {
+    background-image:url(http://extjs.cachefly.net/ext-2.2.1/resources/images/gray/panel/tool-sprites.gif);
+    height:15px;
+    width:15px;
+    /* workaround for button height in IE */
+    font-size:0px;
+}
+
+.olControlPanPanel .olControlPanNorthItemInactive {
+    background-position:15px -60px;
+    left:16px
+}
+.olControlPanPanel .olControlPanEastItemInactive {
+    background-position:15px -120px;
+    left: 30px;
+    top: 16px;
+}
+.olControlPanPanel .olControlPanSouthItemInactive {
+    background-position:15px -75px;
+    left: 16px;
+    top: 32px;
+}
+.olControlPanPanel .olControlPanWestItemInactive {
+    background-position:15px -105px;
+    left: 2px;
+    top: 16px;
+}
+
+.olControlZoomPanel { 
+    left:21px;
+}
+
+.olControlZoomPanel div {
+    background-image:url(http://extjs.cachefly.net/ext-2.2.1/resources/images/gray/panel/tool-sprites.gif);
+    height:15px;
+    width:15px;
+    /* workaround for button height in IE */
+    font-size:0px;
+}
+
+.olControlZoomPanel .olControlZoomInItemInactive {
+    background-position:15px -240px;
+}
+
+.olControlZoomPanel .olControlZoomToMaxExtentItemInactive {
+    display: none;
+}
+
+.olControlZoomPanel .olControlZoomOutItemInactive {
+    background-position:15px -255px;
+    top: 123px;
+}
+
+.olControlScaleLine {
+    font-family: tahoma,arial,helvetica,sans-serif;
+}
+
+/* position the zoom slider within map panel */
+.gx-zoomslider {
+    top: 90px;
+    left: 17px
+}
+
+


Property changes on: apps/opengeo/geoexplorer/branches/0.1.x/src/theme/app/geoexplorer.css
___________________________________________________________________
Name: svn:mergeinfo
   + 

Copied: apps/opengeo/geoexplorer/branches/0.1.x/src/theme/app/ie.css (from rev 1253, apps/opengeo/geoexplorer/branches/0.1.x/theme/app/ie.css)
===================================================================
--- apps/opengeo/geoexplorer/branches/0.1.x/src/theme/app/ie.css	                        (rev 0)
+++ apps/opengeo/geoexplorer/branches/0.1.x/src/theme/app/ie.css	2009-07-14 19:54:24 UTC (rev 1254)
@@ -0,0 +1,12 @@
+div.map-overlay {
+    width: 240px;
+}
+
+.overlay-scalechooser {
+    width: 110px;
+}
+
+.overlay-scaleline {
+    width: 100px;
+    padding-bottom: 5px;
+}


Property changes on: apps/opengeo/geoexplorer/branches/0.1.x/src/theme/app/ie.css
___________________________________________________________________
Name: svn:mergeinfo
   + 

Copied: apps/opengeo/geoexplorer/branches/0.1.x/src/theme/app/img (from rev 1253, apps/opengeo/geoexplorer/branches/0.1.x/theme/app/img)


Property changes on: apps/opengeo/geoexplorer/branches/0.1.x/src/theme/app/img
___________________________________________________________________
Name: svn:mergeinfo
   + 



More information about the Commits mailing list