[Commits] r215 - in sandbox/opengeo/drake/trunk/apps: . geoexplorer

commits at geoext.org commits at geoext.org
Tue Mar 10 14:29:03 CET 2009


Author: dwins
Date: 2009-03-10 14:29:03 +0100 (Tue, 10 Mar 2009)
New Revision: 215

Added:
   sandbox/opengeo/drake/trunk/apps/geoexplorer/
Removed:
   sandbox/opengeo/drake/trunk/apps/geoexplorer/AddLayerWindow.js
   sandbox/opengeo/drake/trunk/apps/geoexplorer/CustomFilterBuilder.js
   sandbox/opengeo/drake/trunk/apps/geoexplorer/LayerNodeUI.js
   sandbox/opengeo/drake/trunk/apps/geoexplorer/LayerTree.js
   sandbox/opengeo/drake/trunk/apps/geoexplorer/MaxFeaturesWarning.js
   sandbox/opengeo/drake/trunk/apps/geoexplorer/built.html
   sandbox/opengeo/drake/trunk/apps/geoexplorer/filterstore.html
   sandbox/opengeo/drake/trunk/apps/geoexplorer/filterstorewithmap.html
Modified:
   sandbox/opengeo/drake/trunk/apps/geoexplorer/build.cfg
   sandbox/opengeo/drake/trunk/apps/geoexplorer/index.html
Log:
Skeletal application for GeoExplorer project

Copied: sandbox/opengeo/drake/trunk/apps/geoexplorer (from rev 214, sandbox/opengeo/drake/trunk/apps/drake)

Deleted: sandbox/opengeo/drake/trunk/apps/geoexplorer/AddLayerWindow.js
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/AddLayerWindow.js	2009-03-01 02:00:57 UTC (rev 214)
+++ sandbox/opengeo/drake/trunk/apps/geoexplorer/AddLayerWindow.js	2009-03-10 13:29:03 UTC (rev 215)
@@ -1,69 +0,0 @@
-/**
- * Copyright (c) 2008 The Open Planning Project
- */
-Ext.namespace("GeoExt.drake");
-
-GeoExt.drake.AddLayerWindow = Ext.extend(Ext.Window, {
-
-    catalogGrid: null,
-    wmsUrl: null,
-    width: 550,
-    height: 500,
-    modal: true,
-    layout: "border",
-    title: "Available Layers",
-    
-    initComponent: function(){
-        this.catalogGrid = new Ext.grid.GridPanel({
-            store: this.capsStore,
-            columns: [
-                {header: 'Name', dataIndex: 'name', sortable: true, width: 100},
-                {header: 'Title', dataIndex: 'title', sortable: true, width: 150},
-                {id: 'abstract', header: 'Abstract', dataIndex: 'abstract', sortable: true},
-                {header: 'Namespace', dataIndex: 'prefix', sortable: true, hidden: true, 
-                     renderer: function(x){return x ? x : "(None)"; }}
-            ],
-            loadMask: {msg: 'Loading catalog information...'},
-            region: "center",
-            view: new Ext.grid.GroupingView(),
-            autoExpandColumn: 'abstract'
-        });
-        
-        this.catalogGrid.store.load();
-        
-        this.items = this.catalogGrid;
-        
-        this.buttons = [
-            new Ext.Button({
-                text: "Add",
-                handler: function(){
-                    var selections = this.catalogGrid.getSelectionModel().getSelections();
-                    
-                    var layers = [];
-                    
-                    for (var index = 0; index < selections.length; index++) {
-                        layers.push(selections[index]);    
-                    }
-                    
-                    if (layers.length > 0) {
-                        this.fireEvent("layerschosen", layers);
-                    }
-                    this.close();
-                },
-                scope: this
-            }), 
-            new Ext.Button({
-                text: "Cancel",
-                handler: function(){
-                    this.close();
-                },
-                scope: this
-            })
-        ];
-        
-        this.addEvents("layerschosen");
-        
-        GeoExt.drake.AddLayerWindow.superclass.initComponent.call(this);
-    }
-    
-});

Deleted: sandbox/opengeo/drake/trunk/apps/geoexplorer/CustomFilterBuilder.js
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/CustomFilterBuilder.js	2009-03-01 02:00:57 UTC (rev 214)
+++ sandbox/opengeo/drake/trunk/apps/geoexplorer/CustomFilterBuilder.js	2009-03-10 13:29:03 UTC (rev 215)
@@ -1,17 +0,0 @@
-Ext.namespace("GeoExt.drake");
-
-// Quick hack to get a filter builder that looks better.
-GeoExt.drake.CustomFilterBuilder = Ext.extend(GeoExt.FilterBuilder, {
-    
-    addToToolbar: null,
-    
-    createToolBar: function() {
-        var bar = GeoExt.drake.CustomFilterBuilder.superclass.createToolBar.call(this);
-        
-        for (var index = 0; index < this.addToToolbar.length; index++) {
-            bar.push(this.addToToolbar[index]);
-        }
-        
-        return bar;
-    }
-});

Deleted: sandbox/opengeo/drake/trunk/apps/geoexplorer/LayerNodeUI.js
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/LayerNodeUI.js	2009-03-01 02:00:57 UTC (rev 214)
+++ sandbox/opengeo/drake/trunk/apps/geoexplorer/LayerNodeUI.js	2009-03-10 13:29:03 UTC (rev 215)
@@ -1,65 +0,0 @@
-
-Ext.namespace("GeoExt.drake");
-
-GeoExt.drake.LayerNodeUI = Ext.extend(Ext.tree.TreeNodeUI, {
-
-    render: function(bulkRender){
-        var rendered = this.rendered;
-
-        GeoExt.drake.LayerNodeUI.superclass.render.call(this, bulkRender);
-
-        if(!rendered){
-            this.nameCol = Ext.get(this.elNode).insertHtml("beforeEnd", "<div></div>", true);
-
-            Ext.get(this.indentNode).appendTo(this.nameCol);
-            Ext.get(this.ecNode).appendTo(this.nameCol);            
-            Ext.get(this.iconNode).appendTo(this.nameCol);
-            Ext.get(this.checkbox).appendTo(this.nameCol);            
-            Ext.get(this.anchor).appendTo(this.nameCol);
-
-            this.nameCol.addClass("gx-tree-col");
-            this.nameCol.setWidth(250);
-
-            var queryHtml = "<div>";
-            
-            if (this.node.attributes.queryable == true) {
-                queryHtml += "<input type='radio' name='" + this.node.ownerTree.id + "-query-radio" + "' value='" + this.node.id + "'></input>";
-            } else {
-                queryHtml += "n/a"
-            }
-            
-            queryHtml += "</div>";
-            
-
-            this.queryCol = Ext.get(this.elNode).insertHtml('beforeEnd', queryHtml, true);
-            
-            // If there's no first item... because of the functionality above, this is 
-            // equivalent to saying if (this.note.attributes.queryable == true) {...}.
-            var div = this.queryCol.first();
-            if (div) {
-                div.on("click", function(evt, target, parameters){
-                    
-                    // Note: target.click() below somehow causes the div's click event
-                    // to be fired again. In total, then, the user clicking on the radio
-                    // button would cause the layeractivated event to be fired twice -- we
-                    // don't want that. To distinguish between the user-generated click and
-                    // the artificially generated click (i.e., target.click()), we check
-                    // the browserEvent's "isTrusted" parameter to see which click we're
-                    // responding to. If "isTrusted" is true, then this event is the original
-                    // event fired by the browser, and not the one fired by target.click().
-                    if (evt.browserEvent.isTrusted == true) {
-                        this.node.ownerTree.fireEvent("layeractivated", this.node.layer);
-                        target.click();
-                    }
-                    
-                    return true;
-                }, this);
-            }
-            
-            this.queryCol.addClass("gx-tree-query-col");
-
-            this.clearEl = Ext.get(this.elNode).insertHtml("beforeEnd", "<div class='x-clear'></div>", true);
-        }
-    }
-
-});
\ No newline at end of file

Deleted: sandbox/opengeo/drake/trunk/apps/geoexplorer/LayerTree.js
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/LayerTree.js	2009-03-01 02:00:57 UTC (rev 214)
+++ sandbox/opengeo/drake/trunk/apps/geoexplorer/LayerTree.js	2009-03-10 13:29:03 UTC (rev 215)
@@ -1,46 +0,0 @@
-
-// TODO: We should probably change this name. This tree is Drake specific.
-GeoExt.tree.LayerTree = Ext.extend(Ext.tree.TreePanel, {
-    lines:false,
-    borderWidth: Ext.isBorderBox ? 0 : 2, // the combined left/right border for each cell
-    cls:'gx-column-tree',
-
-    initComponent: function() {
-        this.addEvents("layeractivated");
-        GeoExt.tree.LayerTree.superclass.initComponent.call(this);
-    },
-    
-    onRender : function(){
-        GeoExt.tree.LayerTree.superclass.onRender.apply(this, arguments);
-        this.headers = this.body.createChild(
-            {cls:'gx-tree-headers'},this.innerCt.dom);
-
-        var cols = [{
-            header: 'Layer',
-            width: 250
-        },{
-            header: 'Query',
-            width: 60
-        }];
-
-        var c;
-        var totalWidth = 0;
-
-        for(var i = 0, len = cols.length; i < len; i++){
-             c = cols[i];
-             totalWidth += c.width;
-             this.headers.createChild({
-                 cls:'gx-tree-hd ' + (c.cls?c.cls+'-hd':''),
-                 cn: {
-                     cls:'gx-tree-hd-text',
-                     html: c.header
-                 },
-                 style:'width:'+(c.width-this.borderWidth)+'px;'
-             });
-        }
-        this.headers.createChild({cls:'x-clear'});
-        // prevent floats from wrapping when clipped
-        this.headers.setWidth(totalWidth);
-        this.innerCt.setWidth(totalWidth);
-    }
-});

Deleted: sandbox/opengeo/drake/trunk/apps/geoexplorer/MaxFeaturesWarning.js
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/MaxFeaturesWarning.js	2009-03-01 02:00:57 UTC (rev 214)
+++ sandbox/opengeo/drake/trunk/apps/geoexplorer/MaxFeaturesWarning.js	2009-03-10 13:29:03 UTC (rev 215)
@@ -1,47 +0,0 @@
-Ext.namespace("GeoExt.drake");
-
-GeoExt.drake.MaxFeaturesWarning = Ext.extend(Ext.Window, {
-
-    // Must be set on initialization.
-    maxFeatures: null,
-    
-    autoHeight: true,
-    width: 350,
-    
-    bodyStyle: "padding: 5px; background-color: #FFFFFF;",
-    
-    title: "Warning: Maximum Features Encountered",
-
-    initComponent: function() {
-        
-        this.addEvents("donotshowchange");
-        
-        var checkbox = new Ext.form.Checkbox({
-            boxLabel: "Do not show this warning again."
-        });
-        
-        checkbox.on("check", function(cb, newValue, oldValue) {
-            this.fireEvent("donotshowchange", newValue);
-        }, this);
-        
-        this.items = [
-            new Ext.Panel({
-                html: "You have encountered the maximum allowed features for the active layer (" + this.maxFeatures + " allowed). If I was a nicer application, I'd tell you something fluffier and more caring, about how you need to refine your search to overcome some technical nonsense. But I'm not. So deal with it.",
-                border: false
-            }),
-            checkbox
-        ];
-        
-        this.buttons = [
-            new Ext.Button({
-                text: "I'll deal.",
-                handler: function() {
-                    this.close();
-                },
-                scope: this
-            })
-        ];
-        
-        GeoExt.drake.MaxFeaturesWarning.superclass.initComponent.call(this);
-    }
-});
\ No newline at end of file

Modified: sandbox/opengeo/drake/trunk/apps/geoexplorer/build.cfg
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/build.cfg	2009-03-01 02:00:57 UTC (rev 214)
+++ sandbox/opengeo/drake/trunk/apps/geoexplorer/build.cfg	2009-03-10 13:29:03 UTC (rev 215)
@@ -26,12 +26,12 @@
         OpenLayers/Lang/zh-CN.js
 
 
-[Drake.js]
+[GeoExplorer.js]
 root=.
 exclude=
         script/OpenLayers.js
         script/GeoExt.js
-        script/Drake.js
+        script/GeoExplorer.js
 
 [GeoExt.js]
 root=../../core/lib
@@ -63,4 +63,4 @@
         GeoExt/widgets/popup/Popup.js
         GeoExt/layer/Vector.js
         GeoExt/data/FeatureStore.js
-        
\ No newline at end of file
+        

Deleted: sandbox/opengeo/drake/trunk/apps/geoexplorer/built.html
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/built.html	2009-03-01 02:00:57 UTC (rev 214)
+++ sandbox/opengeo/drake/trunk/apps/geoexplorer/built.html	2009-03-10 13:29:03 UTC (rev 215)
@@ -1,622 +0,0 @@
-<html>
-<head>
-    <title>Drake (alpha) - A GeoExplorer</title>
-    <link rel="stylesheet" type="text/css" href="../../externals/ext/resources/css/ext-all.css" />
-    <link rel="stylesheet" type="text/css" href="../../externals/ext/resources/css/xtheme-gray.css" />
-    <link rel="stylesheet" type="text/css" href="../../theme/style.css" />
-    <link rel="stylesheet" type="text/css" href="../../core/theme/css/styler.css" />
-    <link rel="stylesheet" type="text/css" href="../../core/theme/css/popup-gray.css" />
-    <link rel="stylesheet" type="text/css" href="./theme/column-tree.css" />
-        
-    <script type="text/javascript" src="../../externals/ext/adapter/ext/ext-base.js"></script>
-    <script type="text/javascript" src="../../externals/ext/ext-all-debug.js"></script>
-    <script type="text/javascript" src="script/OpenLayers.js"></script>
-    <script type="text/javascript" src="../../core/lib/GeoExt.js"></script> 
-    <script type="text/javascript" src="script/Drake.js"></script> 
-
-    <script>
-
-    Ext.BLANK_IMAGE_URL = "../../externals/ext/resources/images/default/s.gif";
-    OpenLayers.ImgPath = "theme/img/";
-
-    // These should go in a better spot.
-    function recordize(attrs){
-        var records = new Array();
-            var mapping = {
-            "double": "float",
-            "string": "string",
-            "long" :  "int",
-            "MultiSurfacePropertyType": "auto"
-        }
-    
-        for (var i = 0; i < attrs.length; i++){
-            var a = attrs[i];
-            var k = a.type.replace(/.*:/, '');
-
-            if (mapping[k]){
-                records.push({
-                     name: a.name,  
-                     mapping: a.name,
-                     type: mapping[k]
-                });
-            } 
-        }
-
-        return Ext.data.Record.create(records);
-    }
-
-    function columnize(attrs){
-        var cols = new Array();
-        for (var i = 0; i < attrs.length; i++){
-            var a = attrs[i];
-            if (a.type){
-            cols.push({
-                id: a.name,
-                header: a.name, 
-                dataIndex: a.name, 
-                hidden: (i>11 | a.type.startsWith('gml:')),
-                sortable: true
-            });
-            } else {
-                console.log(a.name + " has no type");
-            }
-        }
-
-        return cols;
-    }
-
-    GeoExt.Drake = {
-        filterBuilder: null,
-        grid: null,
-        
-        filter: null,
-        store: null,
-        fields: null,
-        
-        map: null,
-        wfsStoreLayer: null,
-        
-        load: function(config) {
-            OpenLayers.Util.extend(this, config);
-            
-            // Show the error window on network failures.
-            GeoExt.RequestMgr.on("requestexception", function(request, url) {
-                var errorWindow = new GeoExt.ErrorWindow({
-                    request: request,
-                    url: url,
-                    modal: true
-                });
-                
-                errorWindow.show();
-            }, this);
-            
-            var attributeStore = new GeoExt.data.AttributesStore({
-                url: this.wfsUrl + "?typename=" + this.getFullType() + "&request=describefeaturetype"
-            });
-    
-            attributeStore.load({
-                // TODO: Rename x to something meaningful.
-                callback: function(x){
-                    this.fields = [];
-    
-                    for (var i = 0; i < x.length; i++){
-                        this.fields.push(x[i].data);
-                    }
-    
-                    this.initFilter();
-                    this.initFeatureStore();
-                    this.initWMSStore();
-                    this.initMap();
-                    
-                    this.initFilterBuilder();
-                    this.initPagingBar();
-                    this.initFeatureGrid();
-                    this.initLayerTree();
-                    this.initLegendPanel();
-                    
-                    new Ext.Viewport({
-                        layout: 'border',
-                        items: [
-                            new Ext.Panel({
-                                region: "west",
-                                layout: "border",
-                                items: [
-                                    this.filterBuilder,
-                                    this.layerTree
-                                ],
-                                width: 370,
-                                collapsible: true,
-                                collapseMode: "mini",
-                                split: true
-                            }),
-                            this.mapPanel,
-                            this.grid,
-                            this.legendPanel
-                        ]
-                    });
-                }, 
-                scope: this
-            });
-        },
-        
-        initFilter: function() {
-            this.filter = new OpenLayers.Filter.Logical({
-                type: OpenLayers.Filter.Logical.OR,
-                filters: []
-            });
-        },
-        
-        createProxy: function(params) {
-            params = params || {};
-            var type = params.type || this.featureType;
-            var ns = params.namespace || 'http://www.openplans.org/topp';
-            var prefix = params.prefix || this.featurePrefix;
-
-            var proto = new OpenLayers.Protocol.WFS({
-                url: this.wfsUrl,
-                featureType: type,
-                featureNS: ns,
-                featurePrefix: prefix,
-                srsName: "EPSG:4326",
-                version: "1.1.0",
-                maxFeatures: this.maxFeatures
-            });
-        
-            return new GeoExt.data.ProtocolProxy({protocol: proto});
-        },
-        
-        initFeatureStore: function() {
-            // create the data store
-            this.featureStore = new Ext.data.Store({
-                proxy: this.createProxy(),
-                remoteSort: true,
-                reader: new Ext.data.JsonReader({}, [])
-            });
-            
-            var showMaxFeaturesWarning = true;
-            
-            this.featureStore.on("load", function() {
-                if (showMaxFeaturesWarning && this.featureStore.getTotalCount() >= this.maxFeatures) {
-                    var maxFeaturesWarning = new GeoExt.drake.MaxFeaturesWarning({
-                        maxFeatures: this.maxFeatures
-                    });
-                    
-                    maxFeaturesWarning.on("donotshowchange", function(newValue) {
-                        showMaxFeaturesWarning = !newValue;
-                    }, this);
-                    
-                    maxFeaturesWarning.show();
-                }
-            }, this);
-        },
-        
-        initWMSStore: function() {
-            this.wmsStore = new Ext.data.GroupingStore({
-                url: this.wmsUrl + "?request=getcapabilities",
-                reader: new GeoExt.data.WMSCapabilitiesReader(),
-                sortInfo: {field: 'prefix'},
-                groupField: 'prefix'
-            });
-        },
-        
-        initFilterBuilder: function() {
-            this.filterBuilder = new GeoExt.drake.CustomFilterBuilder({
-                title: "Filter Builder",
-                region: "south",
-                height: 175,
-                autoScroll: true,
-                filter: this.filter.clone(),
-                attributes: new GeoExt.data.AttributesStore({
-                    url: this.getWFSLayerURL(this.getFullType()), 
-                    ignore: {name: "the_geom"}
-                }),
-                addToToolbar: ["->", new Ext.form.Checkbox({
-                    boxLabel: "Use Filter",
-                    enableToggle: true, 
-                    handler: function(checkbox, checked) {
-                        if (checked){
-                            this.featureStore.proxy.setOGCFilter(this.filterBuilder.getFilter());
-                            this.filterBuilder.on("change", this.updateQueryFilter, this);
-                        } else {
-                            this.featureStore.proxy.setOGCFilter(null);
-                            this.filterBuilder.un("change", this.updateQueryFilter, this);
-                        }
-                        this.reloadFeatureStore();
-                    },
-                    scope: this
-                })] 
-            });
-        },
-        
-        initPagingBar: function() {
-            this.pagingBar = new Ext.PagingToolbar({
-                pageSize: 7, 
-                store: this.featureStore,
-                displayInfo: true,
-                displayMsg: 'Displaying features {0} - {1} of {2}',
-                emptyMsg: 'No features to display'
-            });
-        },
-        
-        initMap: function() {
-            this.map = new OpenLayers.Map({
-                theme: null,
-                controls: [],
-                units: "m",
-                projection: new OpenLayers.Projection("EPSG:4326"),
-                // maxExtent: new OpenLayers.Bounds(-139.53227612499998,20.816194750000008,-59.55180737499998,55.44510100000001) 
-                maxExtent: new OpenLayers.Bounds(-180,-90,180,90) 
-            });
-                  
-            this.wfsStoreLayer = new GeoExt.layer.Vector("Vector Layer", {
-                    store: this.featureStore,
-                    displayInLayerSwitcher: false
-                }
-            );
-            
-            var baseLayer = new OpenLayers.Layer.WMS(
-                "OpenStreetMap",
-                "http://demo.opengeo.org/geoserver_openstreetmap/gwc/service/wms",
-                {layers: 'openstreetmap', format:'image/png'}, {isBaseLayer: true}
-            );
-    
-            var vmap0 = new OpenLayers.Layer.WMS(
-                "Metacarta Vmap0",
-                "http://labs.metacarta.com/wms/vmap0",
-                {layers: 'basic'}, {isBaseLayer: true}
-            );
-    
-    
-            var countries = new OpenLayers.Layer.WMS(
-                "Political Boundaries",
-                this.wmsUrl,
-                {layers: 'topp:countries'}, {isBaseLayer: true}
-            );
-         
-            // Add some layers with a dummy base layer.
-            this.map.addLayers([
-                baseLayer,
-                vmap0,
-                countries,
-                this.wfsStoreLayer
-            ]);
-            
-            this.map.addControl(new OpenLayers.Control.Navigation());
-            this.map.addControl(new OpenLayers.Control.PanZoomBar());
-            
-            this.mapPanel = new GeoExt.MapPanel({
-                region: "center",
-                map: this.map,
-                zoom: 4,
-                center: new OpenLayers.LonLat(-99.54204174999998,38.13064787500001)
-            });
-        },
-        
-        initFeatureGrid: function() {
-
-            this.grid = new Ext.grid.GridPanel({
-                title: "Feature Query Results",
-                stripeRows: true,
-                height:230,
-                region: "south",
-                collapsible: true,
-                collapseMode: "mini",
-                loadMask: {
-                    msg: "Loading features...",
-                    store: this.featureStore
-                },
-                columns: [],
-                store: this.featureStore,
-                selModel: new GeoExt.grid.FeatureSelectionModel({
-                        layer: this.wfsStoreLayer
-                }),
-                bbar: this.pagingBar
-            });
-            
-            this.grid.on("rowdblclick", function(grid, index, evt) {
-                var record = grid.getSelectionModel().getSelected();
-                
-                if (record) {
-                    var bounds = record.data.feature.geometry.getBounds();
-                    this.map.zoomToExtent(bounds);
-                }
-            }, this);
-            
-    
-            ///////////// POPUP STUFF
-             
-            this.grid.getSelectionModel().on("rowselect", function (model, row, record){
-                var feature = record.data.feature;
-    
-                var content = "<p> You selected " + feature.fid + "! I am truly impressed! </p>";    
-
-                feature.popup = new GeoExt.popup.Popup({
-                    title: feature.fid,
-                    feature: feature,
-                    width: 235,
-                    height: 70,
-                    html: content,
-                    collapsible: true,
-                    collapsed: true,
-                    expandOnShow: false
-                });
-
-                var popup = feature.popup;
-                this.grid.store.on("load", function(store, records, options){
-                    var record;
-                    for(var i = 0; i < records.length; i++){
-                        if(records[i].data.feature == feature){
-                            return;
-                        }
-                    }
-                    if(popup.anc){
-                        popup.close();
-                    }
-                });
-    
-                feature.popup.addToMapPanel(this.mapPanel);
-            }, this);
-    
-            this.grid.getSelectionModel().on("rowdeselect", function(model, row, record){
-                var feature = record.data.feature;
-                if(feature.popup.anc){
-                    feature.popup.close();
-                }
-            });
-
-        },
-        
-        initLayerTree: function() {
-            var addLayerButton = new Ext.Button({
-                text: "Add Layer...",
-                disabled: true,
-                handler: function() {
-                    var win = new GeoExt.drake.AddLayerWindow({
-                        capsStore: this.wmsStore
-                    });
-                    
-                    win.on("layerschosen", function(layers) {
-                        
-                        var layer;
-                        for (var index = 0; index < layers.length; index++) {
-                            var layerRecord = layers[index];
-                            var name = layerRecord.data.name;
-                            var tilesOrigin = layerRecord.data.llbbox[0] + "," + layerRecord.data.llbbox[1];
-                            
-                            layer = new OpenLayers.Layer.WMS(name, this.wmsUrl, {
-                                layers: name,
-                                format: "image/png",
-                                transparent: "true",
-                                tiled: true,
-                                tilesOrigin: tilesOrigin
-                            }, {
-                                isBaselayer: false,
-                                maxExtent: OpenLayers.Bounds.fromArray(layerRecord.data.llbbox)
-                            });
-
-                            layer.drakestyles = layerRecord.data.styles; 
-                            
-                            var found = false;
-                            for (var layersIndex = 0; layersIndex < this.map.layers.length; layersIndex++) {
-                                if (this.map.layers[layersIndex] instanceof OpenLayers.Layer.WMS) {
-                                    if (layer.params.LAYERS == this.map.layers[layersIndex].params.LAYERS) {
-                                        found = true;
-                                        break;
-                                    }
-                                }
-                            }
-                            
-                            if (!found) {
-                                this.map.addLayer(layer);
-                            }
-                        } 
-                    }, this);
-                    
-                    win.show();
-                },
-                scope: this
-            });
-            
-            
-            var root = new Ext.tree.TreeNode({});
-            
-            var baseLayerContainer = new GeoExt.tree.BaseLayerContainer({
-                map: this.map
-            });
-            
-            var wfsStore = new Ext.data.Store({
-                reader: new GeoExt.data.WFSCapabilitiesReader(),
-                url: this.wfsUrl + "?request=GetCapabilities" 
-            });
-            
-            // TODO: We should probably have some UI that shows the layer tree is loading,
-            // as the overlayContainer will not be added to the layerTree until the 
-            // wfsStore's request returns. This is not Hugely Important Right Now, but 
-            // experience tells me that for some user, at some point, this request
-            // is gonna hang.
-            wfsStore.load({
-                callback: function(response) {
-                    var overlayContainer = new GeoExt.tree.OverlayLayerContainer({
-                        map: this.map
-                    });
-                    
-                    overlayContainer.on("customizeconfig", function(config, layer) {
-                        config.uiProvider = GeoExt.drake.LayerNodeUI;
-                        config.queryable = wfsStore.find("name", layer.params.LAYERS) >= 0;
-                    });
-                    
-                    root.appendChild(overlayContainer);
-                    
-                    // Don't allow them to click the Add Layer button until we
-                    // have all the data we need. (i.e., we have it all now,
-                    // so enable the button).
-                    addLayerButton.setDisabled(false);
-                }
-            })
-            
-            root.appendChild(baseLayerContainer);
-            
-            this.layerTree = new GeoExt.tree.LayerTree({
-                border: false,
-                split: true,
-                rootVisible: false,
-                title: "Layers",
-                region: "center",
-                autoScroll: true,
-                root: root,
-                bbar: [
-                    addLayerButton,
-                    new Ext.Button({
-                        text: "Remove selected",
-                        handler: function() {
-                            var nodes = layerTree.getSelectionModel().getSelectedNodes();
-                            for (var i = 0; i < nodes.length; i++){
-                                var layerName = nodes[i].text;
-                                for (var j = 0; j < map.layers.length; j++) {
-                                    if (map.layers[j] instanceof OpenLayers.Layer.WMS) {
-                                        if (layerName == map.layers[j].params.LAYERS) {
-                                            map.layers[j].destroy();
-                                            break;
-                                        }                                 }
-                                    }
-                                }
-                            }
-                        })
-                ]
-            });
-    
-            this.layerTree.on("contextmenu", function(node, e){
-                if (node.layer){
-                    var menuConfig = [{
-                        id: "zoomtobounds",
-                        text: "Zoom to layer bounds",
-                        handler: function(evt){
-                                this.map.zoomToExtent(node.layer.maxExtent);
-                        },
-                        scope: this
-                    }];
-
-                    if (node.layer.drakestyles && node.layer.drakestyles.length > 1){
-                        for (var i = 0; i < node.layer.drakestyles.length; i++){
-                            var style = node.layer.drakestyles[i];
-                            menuConfig.push({id: style.name,
-                                text: "Render by \"" + style.title + '"',
-                                handler: function(style){
-                                    return function(evt){
-                                        node.layer.params.STYLES = style.name;
-                                        node.layer.redraw();
-                                    };
-                                }(style),
-                                scope: this
-                            });
-                        }
-                    }
-
-                    var menu = new Ext.menu.Menu(menuConfig);
-                    menu.showAt(e.getPoint());
-                }
-            }, this);  
-
-            this.layerTree.on("layeractivated", this.activateLayer, this);
-        },
-        
-        addLayerHandler: function() {
-            
-        },
-        
-        initLegendPanel: function() {
-            this.legendPanel = new GeoExt.LegendPanel({
-                map: this.map,
-                region: "east",
-                title: "Legend",
-                width: 200,
-                bodyStyle: "padding: 5px",
-                collapsible: true,
-                autoScroll: true
-            });
-        },
-        
-        getFullType: function() {
-            return this.featurePrefix + ":" + this.featureType;
-        },
-
-        getWFSLayerURL: function(type) { 
-            return this.wfsUrl + "?request=DescribeFeatureType&typename=" + type;
-        }, 
-
-        activateLayer: function(layer) {
-            this.filterBuilder.attributes = new GeoExt.data.AttributesStore({
-                url: this.getWFSLayerURL(layer.name),
-                ignore: {name: "the_geom"}
-            });
-            this.filterBuilder.setFilter(null);
-
-            var typename = layer.params.LAYERS;
-                        // update fields
-            var attributeStore = new GeoExt.data.AttributesStore({
-                url: this.wfsUrl + "?typename=" + typename + "&request=describefeaturetype"
-            });
-    
-            attributeStore.load({
-                // TODO: Rename x to something meaningful.
-                callback: function(x){
-                    this.fields = [];
-    
-                    for (var i = 0; i < x.length; i++){
-                        this.fields.push(x[i].data);
-                    }
-
-                    this.finishActivating(attributeStore.reader.namespace, typename);
-                },
-                scope: this
-            });
-        },
-
-        finishActivating: function(namespace, typename) {
-            var parts = typename.split(':');
-            this.featurePrefix = parts[0];
-            this.featureType   = parts[1];
-
-            this.featureStore.proxy = this.createProxy({prefix: parts[0], type: parts[1], namespace: namespace});
-            this.featureStore.reader = new GeoExt.data.FeatureReader({}, recordize(this.fields));
- 
-            this.grid.setTitle(typename + " - " + namespace);
-            this.grid.colModel.setConfig(columnize(this.fields));
-
-            this.reloadFeatureStore();
-        },
-
-        updateQueryFilter: function(builder){
-            this.featureStore.proxy.setOGCFilter(builder.getFilter());
-            this.reloadFeatureStore();
-        },
-        
-        reloadFeatureStore: function() {
-            this.featureStore.load({
-                params: {
-                    start: 0, 
-                    limit: this.featuresPerPage
-                }
-            });
-        }
-    };
-
-    Ext.onReady(function() {
-        GeoExt.Drake.load({
-            featurePrefix: "topp",
-            featureType: "states",
-            
-            geoserverUrl: "/geoserver",
-            wmsUrl: "/geoserver/wms",
-            wfsUrl: "/geoserver/wfs",
-            
-            maxFeatures: 300,
-            featuresPerPage: 7
-        });
-    });
-
-    </script>
-</head>
-<body>
-</body>
-</html>

Deleted: sandbox/opengeo/drake/trunk/apps/geoexplorer/filterstore.html
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/filterstore.html	2009-03-01 02:00:57 UTC (rev 214)
+++ sandbox/opengeo/drake/trunk/apps/geoexplorer/filterstore.html	2009-03-10 13:29:03 UTC (rev 215)
@@ -1,225 +0,0 @@
-<html>
-<head>
-    <title>Filter and WFS Store</title>
-    <link rel="stylesheet" type="text/css" href="../../externals/ext/resources/css/ext-all.css" />
-    <link rel="stylesheet" type="text/css" href="../../externals/ext/resources/css/xtheme-gray.css" />
-    <link rel="stylesheet" type="text/css" href="../../externals/openlayers/theme/default/style.css" />
-    <link rel="stylesheet" type="text/css" href="../../core/theme/css/styler.css" />
-    <style type="text/css">
-        #panel {
-            width: 380px;
-            margin: 1em 3em;
-        }
-    </style>
-    
-    <script type="text/javascript" src="../../externals/ext/adapter/ext/ext-base.js"></script>
-    <script type="text/javascript" src="../../externals/ext/ext-all.js"></script>
-    <!-- <script type="text/javascript" src="../externals/openlayers/OpenLayers.js"></script> -->
-    <script type="text/javascript" src="../../externals/openlayers/lib/OpenLayers.js"></script>
-    <script>
-    window.scriptLocation = "../../core/";
-    </script>
-    <script type="text/javascript" src="../../core/lib/GeoExt.js"></script> 
-
-
-
-    <script>
-    
-    // CODE FOR FILTERBUILDER //
-
-    Ext.BLANK_IMAGE_URL = "../../externals/ext/resources/images/default/s.gif";
-
-    var filter = new OpenLayers.Filter.Logical({
-        type: OpenLayers.Filter.Logical.OR,
-        filters: [
-            new OpenLayers.Filter.Comparison({
-                type: OpenLayers.Filter.Comparison.LESS_THAN,
-                property: "PERSONS",
-                value: 1000000
-            })
-        ]
-    });
-    
-    var feWin = null;
-    var format = new OpenLayers.Format.Filter();
-    function showFE(panel) {
-        var filter = panel.getComponent(0).getFilter();
-        var node = format.write(filter);
-        var text = OpenLayers.Format.XML.prototype.write.apply(format, [node]);
-        if(!feWin) {
-            feWin = new Ext.Window({
-                title: "Filter Encoding",
-                layout: "fit",
-                closeAction: "hide",
-                height: 300,
-                width: 450,
-                plain: true,
-                modal: true,
-                items: [{
-                    xtype: "textarea",
-                    value: text
-                }]
-            });
-        } else {
-            feWin.items.items[0].setValue(text);
-        }
-        feWin.show();
-    }
-
-    var fb;
-
-    //Initialize Filter Builder
-    Ext.onReady(function() {
-
-        fb = new Ext.Panel({
-            title: "Filter Builder",
-            region: "west",
-            width: 370,
-            items: [{
-                xtype: "gx_filterbuilder",
-                filter: filter.clone(),
-                attributes: new GeoExt.data.AttributesStore({
-                    url: "/geoserver/wfs?request=DescribeFeatureType&typename=topp:states",
-                    ignore: {name: "the_geom"}
-                })
-            }],
-            bbar: ["->", {
-                text: "Set Filter",
-                handler: function() {
-                    proxy.setOGCFilter(fb.getComponent(0).getFilter());
-                    grid.store.load({params: {start: 0, limit: 25}});                    
-                }
-            }]
-        });
-
-    })
-
-
-    // CODE FOR WFS FEATURE STORE //
-
-    var grid;
-
-    function recordize(attrs){
-        var records = new Array();
-            var mapping = {
-            "double": "float",
-            "string": "string",
-            "MultiSurfacePropertyType": "auto"
-        }
-    
-        for (var i = 0; i < attrs.length; i++){
-            var a = attrs[i];
-            var k = a.type.replace(/.*:/, '');
-
-            if (mapping[k]){
-                records.push({
-                     name: a.name,  
-                     mapping: a.name,
-                     type: mapping[k]
-                });
-            } 
-        }
-
-        return Ext.data.Record.create(records);
-    }
-
-    function columnize(attrs){
-        var cols = new Array();
-        for (var i = 0; i < attrs.length; i++){
-            var a = attrs[i];
-            if (a.type){
-            cols.push({
-                id: a.name,
-                header: a.name, 
-                dataIndex: a.name, 
-                hidden: (i>11 | a.type.startsWith('gml:')),
-                sortable: true
-            });
-            } else {
-                console.log(a.name + " has no type");
-            }
-        }
-
-        return cols;
-    }
-
-
-
-
-    Ext.onReady(function(){
-        var proto = new OpenLayers.Protocol.WFS({
-            url: '/geoserver/wfs',
-            featureType: 'states',
-            featureNS: 'http://www.openplans.org/topp',
-            featurePrefix: 'topp'
-        });
-    
-        proxy = new GeoExt.data.ProtocolProxy({protocol: proto});
-
-        var as = new GeoExt.data.AttributesStore({
-            url: '/geoserver/wfs?typename=topp:states&request=describefeaturetype'
-        });
-
-        as.load({
-            callback: function(x){
-                fields = [];
-
-                for (var i = 0; i < x.length; i++){
-                    fields.push(x[i].data);
-                }
-
-                setupGrid();
-            }
-        });
-    });
-
-
-
-    function setupGrid(){
-        var type = 'topp:states';
-        // create the data store
-        var store = new Ext.data.Store({
-            proxy: proxy, 
-            reader: new GeoExt.data.FeatureReader({}, recordize(fields))
-        });
-
-        proxy.ogcFilter = filter;
-
-        store.load();
-
-        var pagingBar = new Ext.PagingToolbar({
-            pageSize: 25, 
-            store: store,
-            displayInfo: true,
-            displayMsg: 'Displaying features {0} - {1} of {2}',
-            emptyMsg: 'No features to display',
-        });
-
-        // create the Grid
-
-        grid = new Ext.grid.GridPanel({
-            store: store,
-            columns:  columnize(fields),
-            stripeRows: true,
-            autoExpandColumn: fields[0].name,
-            height:350,
-            width:600,
-            title: type,
-            bbar: pagingBar,
-            region: "center"
-        });
-
-        new Ext.Viewport({
-            layout: 'border',
-            items: grid,
-            items: [fb,
-                    grid]
-        });
-    }
-
-
-    </script>
-</head>
-<body>
-</body>
-</html>

Deleted: sandbox/opengeo/drake/trunk/apps/geoexplorer/filterstorewithmap.html
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/filterstorewithmap.html	2009-03-01 02:00:57 UTC (rev 214)
+++ sandbox/opengeo/drake/trunk/apps/geoexplorer/filterstorewithmap.html	2009-03-10 13:29:03 UTC (rev 215)
@@ -1,313 +0,0 @@
-<html>
-<head>
-    <title>Filter and WFS Store</title>
-    <link rel="stylesheet" type="text/css" href="../../externals/ext/resources/css/ext-all.css" />
-    <link rel="stylesheet" type="text/css" href="../../externals/ext/resources/css/xtheme-gray.css" />
-    <link rel="stylesheet" type="text/css" href="../../externals/openlayers/theme/default/style.css" />
-    <link rel="stylesheet" type="text/css" href="../../core/theme/css/styler.css" />
-    <style type="text/css">
-        #panel {
-            width: 380px;
-            margin: 1em 3em;
-        }
-    </style>
-    
-    <script type="text/javascript" src="../../externals/ext/adapter/ext/ext-base.js"></script>
-    <script type="text/javascript" src="../../externals/ext/ext-all.js"></script>
-    <!-- <script type="text/javascript" src="../externals/openlayers/OpenLayers.js"></script> -->
-    <script type="text/javascript" src="../../externals/openlayers/lib/OpenLayers.js"></script>
-    <script>
-    window.scriptLocation = "../../core/";
-    </script>
-    <script type="text/javascript" src="../../core/lib/GeoExt.js"></script> 
-
-
-
-    <script>
-    
-    // CODE FOR FILTERBUILDER //
-
-    Ext.BLANK_IMAGE_URL = "../../externals/ext/resources/images/default/s.gif";
-
-    var filter = new OpenLayers.Filter.Logical({
-        type: OpenLayers.Filter.Logical.OR,
-        filters: [
-            new OpenLayers.Filter.Comparison({
-                type: OpenLayers.Filter.Comparison.LESS_THAN,
-                property: "PERSONS",
-                value: 1000000
-            })
-        ]
-    });
-    
-    var feWin = null;
-    var format = new OpenLayers.Format.Filter();
-    function showFE(panel) {
-        var filter = panel.getComponent(0).getFilter();
-        var node = format.write(filter);
-        var text = OpenLayers.Format.XML.prototype.write.apply(format, [node]);
-        if(!feWin) {
-            feWin = new Ext.Window({
-                title: "Filter Encoding",
-                layout: "fit",
-                closeAction: "hide",
-                height: 300,
-                width: 450,
-                plain: true,
-                modal: true,
-                items: [{
-                    xtype: "textarea",
-                    value: text
-                }]
-            });
-        } else {
-            feWin.items.items[0].setValue(text);
-        }
-        feWin.show();
-    }
-
-    var fb;
-
-    //Initialize Filter Builder
-    Ext.onReady(function() {
-
-        fb = new Ext.Panel({
-            title: "Filter Builder",
-            items: [{
-                xtype: "gx_filterbuilder",
-                filter: filter.clone(),
-                attributes: new GeoExt.data.AttributesStore({
-                    url: "/geoserver/wfs?request=DescribeFeatureType&typename=topp:states",
-                    ignore: {name: "the_geom"}
-                })
-            }],
-            bbar: ["->", {
-                text: "Set Filter",
-                handler: function() {
-                    proxy.setOGCFilter(fb.getComponent(0).getFilter());
-                    grid.store.load({
-                        params: {
-                            start: 0,
-                            limit: 7
-                        }
-                    });                    
-                }
-            }]
-        });
-
-    })
-
-
-    // CODE FOR WFS FEATURE STORE //
-
-    var grid, map;
-
-    function recordize(attrs){
-        var records = new Array();
-            var mapping = {
-            "double": "float",
-            "string": "string",
-            "MultiSurfacePropertyType": "auto"
-        }
-    
-        for (var i = 0; i < attrs.length; i++){
-            var a = attrs[i];
-            var k = a.type.replace(/.*:/, '');
-
-            if (mapping[k]){
-                records.push({
-                     name: a.name,  
-                     mapping: a.name,
-                     type: mapping[k]
-                });
-            } 
-        }
-
-        return Ext.data.Record.create(records);
-    }
-
-    function columnize(attrs){
-        var cols = new Array();
-        for (var i = 0; i < attrs.length; i++){
-            var a = attrs[i];
-            if (a.type){
-            cols.push({
-                id: a.name,
-                header: a.name, 
-                dataIndex: a.name, 
-                hidden: (i>11 | a.type.startsWith('gml:')),
-                sortable: true
-            });
-            } else {
-                console.log(a.name + " has no type");
-            }
-        }
-
-        return cols;
-    }
-
-
-
-
-    Ext.onReady(function(){
-        var proto = new OpenLayers.Protocol.WFS({
-            url: '/geoserver/wfs',
-            featureType: 'states',
-            featureNS: 'http://www.openplans.org/topp',
-            featurePrefix: 'topp'
-        });
-    
-        proxy = new GeoExt.data.ProtocolProxy({protocol: proto});
-
-        var as = new GeoExt.data.AttributesStore({
-            url: '/geoserver/wfs?typename=topp:states&request=describefeaturetype'
-        });
-
-        as.load({
-            callback: function(x){
-                fields = [];
-
-                for (var i = 0; i < x.length; i++){
-                    fields.push(x[i].data);
-                }
-
-                setupGrid();
-            }
-        });
-    });
-
-
-    var store;
-    function setupGrid(){
-        var type = 'topp:states';
-        // create the data store
-        store = new Ext.data.Store({
-            proxy: proxy, 
-            remoteSort: true,
-            reader: new GeoExt.data.FeatureReader({}, recordize(fields))
-        });
-
-        proxy.ogcFilter = filter;
-
-        store.load();
-
-        var pagingBar = new Ext.PagingToolbar({
-            pageSize: 7, 
-            store: store,
-            displayInfo: true,
-            displayMsg: 'Displaying features {0} - {1} of {2}',
-            emptyMsg: 'No features to display',
-        });
-
-        ///////////// Grid Stuff
-        
-        grid = new Ext.grid.GridPanel({
-            store: store,
-            columns:  columnize(fields),
-            stripeRows: true,
-            autoExpandColumn: fields[0].name,
-            height:230,
-            //width:600,
-            title: type,
-            bbar: pagingBar,
-            region: "south",
-            collapsible: true,
-            collapseMode: "mini"
-        });
-        
-        grid.on("rowdblclick", function(grid, index, evt) {
-            var record = grid.getSelectionModel().getSelected();
-            
-            if (record) {
-                var bounds = record.data.feature.geometry.getBounds();
-                map.zoomToExtent(bounds);
-            }
-        }, this);
-        
-        ///////////// Map Stuff
-        
-        map = new OpenLayers.Map({
-            theme: null,
-            controls: [],
-            units: "m",
-            projection: new OpenLayers.Projection("EPSG:4326"),
-            restrictedExtent: new OpenLayers.Bounds(-139.53227612499998,20.816194750000008,-59.55180737499998,55.44510100000001), //new OpenLayers.Bounds(-180,-90,180,90), 
-        });
-                   
-        // Add some layers with a dummy base layer.
-        map.addLayers([
-            new OpenLayers.Layer.WMS(
-                "OpenLayers WMS",
-                "http://labs.metacarta.com/wms/vmap0",
-                {layers: 'basic'}, {isBaseLayer: true}
-            ),
-            /*new OpenLayers.Layer.WMS("The United States (WMS, 1 layer)", "/geoserver/wms", 
-                {
-                    layers: "topp:states",
-                    format: "image/png",
-                    transparent: "true"
-                }, {
-                    isBaseLayer: false
-                }
-            )*/
-            new GeoExt.layer.Vector("WFS Store, yo!", 
-                {
-                    store: store
-                }
-            )
-        ]);
-        
-        map.addControl(new OpenLayers.Control.Navigation());
-        map.addControl(new OpenLayers.Control.PanZoomBar());
-        
-        mapPanel = new GeoExt.MapPanel({
-            region: "center",
-            map: map
-        })
-        
-        ///////////////// Layer Tree
-        
-        var root = new Ext.tree.TreeNode({});
-        root.appendChild(new GeoExt.tree.BaseLayerContainer({
-            map: map
-        }));
-        root.appendChild(new GeoExt.tree.OverlayLayerContainer({
-            map: map
-        }));
-        
-        var layerTree = new Ext.tree.TreePanel({
-            border: false,
-            split: true,
-            rootVisible: false,
-            title: "Layers",
-            region: "center",
-            autoScroll: true,
-            root: root
-        });
-
-        new Ext.Viewport({
-            layout: 'border',
-            items: [
-                new Ext.Panel({
-                    region: "west",
-                    items: [
-                        fb,
-                        layerTree
-                    ],
-                    width: 370,
-                    collapsible: true,
-                    collapseMode: "mini",
-                    split: true
-                }),
-                mapPanel,
-                grid
-            ]
-        });
-    }
-
-
-    </script>
-</head>
-<body>
-</body>
-</html>

Modified: sandbox/opengeo/drake/trunk/apps/geoexplorer/index.html
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/index.html	2009-03-01 02:00:57 UTC (rev 214)
+++ sandbox/opengeo/drake/trunk/apps/geoexplorer/index.html	2009-03-10 13:29:03 UTC (rev 215)
@@ -1,629 +1,62 @@
 <html>
-<head>
-    <title>Drake (alpha) - A GeoExplorer</title>
-    <link rel="stylesheet" type="text/css" href="../../externals/ext/resources/css/ext-all.css" />
-    <link rel="stylesheet" type="text/css" href="../../externals/ext/resources/css/xtheme-gray.css" />
-    <link rel="stylesheet" type="text/css" href="../../externals/openlayers/theme/default/style.css" />
-    <link rel="stylesheet" type="text/css" href="../../core/theme/css/styler.css" />
-    <link rel="stylesheet" type="text/css" href="../../core/theme/css/popup-gray.css" />
-    <link rel="stylesheet" type="text/css" href="./theme/column-tree.css" />
-        
-    <script type="text/javascript" src="../../externals/ext/adapter/ext/ext-base.js"></script>
-    <script type="text/javascript" src="../../externals/ext/ext-all-debug.js"></script>
-    <!-- <script type="text/javascript" src="../../externals/openlayers/OpenLayers.js"></script> -->
-    <script type="text/javascript" src="../../externals/openlayers/lib/OpenLayers.js"></script>
-    <script>
-    window.scriptLocation = "../../core/";
-    </script>
-    <script type="text/javascript" src="../../core/lib/GeoExt.js"></script> 
-    <script type="text/javascript" src="./AddLayerWindow.js"></script> 
-    <script type="text/javascript" src="./CustomFilterBuilder.js"></script>
-    <script type="text/javascript" src="./LayerTree.js"></script>
-    <script type="text/javascript" src="./LayerNodeUI.js"></script>
-    <script type="text/javascript" src="./MaxFeaturesWarning.js"></script>
+    <head>
+        <title>GeoExplorer 0.1-pre</title>
+        <link rel="stylesheet" type="text/css" href="../../externals/ext/resources/css/ext-all.css" />
+        <link rel="stylesheet" type="text/css" href="../../externals/ext/resources/css/xtheme-gray.css" />
+        <link rel="stylesheet" type="text/css" href="../../externals/openlayers/theme/default/style.css" />
+        <link rel="stylesheet" type="text/css" href="../../core/theme/css/styler.css" />
+        <link rel="stylesheet" type="text/css" href="../../core/theme/css/popup-gray.css" />
+        <link rel="stylesheet" type="text/css" href="./theme/column-tree.css" />
 
-    <script>
+        <script type="text/javascript" src="../../externals/ext/adapter/ext/ext-base.js"></script>
+        <script type="text/javascript" src="../../externals/ext/ext-all-debug.js"></script>
+        <script type="text/javascript" src="../../externals/openlayers/lib/OpenLayers.js"></script>
+        <script>
+            window.scriptLocation = "../../core/";
+        </script>
+        <script type="text/javascript" src="../../core/lib/GeoExt.js"></script> 
+        <script>
 
-    Ext.BLANK_IMAGE_URL = "../../externals/ext/resources/images/default/s.gif";
+            Ext.BLANK_IMAGE_URL = "../../externals/ext/resources/images/default/s.gif";
 
-    // These should go in a better spot.
-    function recordize(attrs){
-        var records = new Array();
-            var mapping = {
-            "double": "float",
-            "string": "string",
-            "long" :  "int",
-            "MultiSurfacePropertyType": "auto"
-        }
-    
-        for (var i = 0; i < attrs.length; i++){
-            var a = attrs[i];
-            var k = a.type.replace(/.*:/, '');
+            GeoExplorer = {
+                load: function() {
+                    this.map = new OpenLayers.Map();
+                    this.map.addLayers([
+                    new OpenLayers.Layer.WMS("TOPP States", 
+                    '/geoserver/wms' ,{
+                        layers: 'topp:states'
+                        }, {
+                        isBaseLayer: true
+                    })
+                    ]);
 
-            if (mapping[k]){
-                records.push({
-                     name: a.name,  
-                     mapping: a.name,
-                     type: mapping[k]
-                });
-            } 
-        }
+                    this.mapPanel = new GeoExt.MapPanel({
+                        map: this.map,
+                        region: 'center'
+                    });
 
-        return Ext.data.Record.create(records);
-    }
+                    this.layerTree = new Ext.tree.TreePanel({
+                        region: 'west',
+                        root: new GeoExt.tree.LayerContainer({
+                            text: 'Map Layers',
+                            map: this.map
+                        })
+                    });
 
-    function columnize(attrs){
-        var cols = new Array();
-        for (var i = 0; i < attrs.length; i++){
-            var a = attrs[i];
-            if (a.type){
-            cols.push({
-                id: a.name,
-                header: a.name, 
-                dataIndex: a.name, 
-                hidden: (i>11 | a.type.startsWith('gml:')),
-                sortable: true
-            });
-            } else {
-                console.log(a.name + " has no type");
-            }
-        }
-
-        return cols;
-    }
-
-    GeoExt.Drake = {
-        filterBuilder: null,
-        grid: null,
-        
-        filter: null,
-        store: null,
-        fields: null,
-        
-        map: null,
-        wfsStoreLayer: null,
-        
-        load: function(config) {
-            OpenLayers.Util.extend(this, config);
-            
-            // Show the error window on network failures.
-            GeoExt.RequestMgr.on("requestexception", function(request, url) {
-                var errorWindow = new GeoExt.ErrorWindow({
-                    request: request,
-                    url: url,
-                    modal: true
-                });
-                
-                errorWindow.show();
-            }, this);
-            
-            var attributeStore = new GeoExt.data.AttributesStore({
-                url: this.wfsUrl + "?typename=" + this.getFullType() + "&request=describefeaturetype"
-            });
-    
-            attributeStore.load({
-                // TODO: Rename x to something meaningful.
-                callback: function(x){
-                    this.fields = [];
-    
-                    for (var i = 0; i < x.length; i++){
-                        this.fields.push(x[i].data);
-                    }
-    
-                    this.initFilter();
-                    this.initFeatureStore();
-                    this.initWMSStore();
-                    this.initMap();
-                    
-                    this.initFilterBuilder();
-                    this.initPagingBar();
-                    this.initFeatureGrid();
-                    this.initLayerTree();
-                    this.initLegendPanel();
-                    
                     new Ext.Viewport({
                         layout: 'border',
-                        items: [
-                            new Ext.Panel({
-                                region: "west",
-                                layout: "border",
-                                items: [
-                                    this.filterBuilder,
-                                    this.layerTree
-                                ],
-                                width: 370,
-                                collapsible: true,
-                                collapseMode: "mini",
-                                split: true
-                            }),
-                            this.mapPanel,
-                            this.grid,
-                            this.legendPanel
-                        ]
+                        items: [this.mapPanel, this.layerTree]
                     });
-                }, 
-                scope: this
-            });
-        },
-        
-        initFilter: function() {
-            this.filter = new OpenLayers.Filter.Logical({
-                type: OpenLayers.Filter.Logical.OR,
-                filters: []
-            });
-        },
-        
-        createProxy: function(params) {
-            params = params || {};
-            var type = params.type || this.featureType;
-            var ns = params.namespace || 'http://www.openplans.org/topp';
-            var prefix = params.prefix || this.featurePrefix;
-
-            var proto = new OpenLayers.Protocol.WFS({
-                url: this.wfsUrl,
-                featureType: type,
-                featureNS: ns,
-                featurePrefix: prefix,
-                srsName: "EPSG:4326",
-                version: "1.1.0",
-                maxFeatures: this.maxFeatures
-            });
-        
-            return new GeoExt.data.ProtocolProxy({protocol: proto});
-        },
-        
-        initFeatureStore: function() {
-            // create the data store
-            this.featureStore = new Ext.data.Store({
-                proxy: this.createProxy(),
-                remoteSort: true,
-                reader: new Ext.data.JsonReader({}, [])
-            });
-            
-            var showMaxFeaturesWarning = true;
-            
-            this.featureStore.on("load", function() {
-                if (showMaxFeaturesWarning && this.featureStore.getTotalCount() >= this.maxFeatures) {
-                    var maxFeaturesWarning = new GeoExt.drake.MaxFeaturesWarning({
-                        maxFeatures: this.maxFeatures
-                    });
-                    
-                    maxFeaturesWarning.on("donotshowchange", function(newValue) {
-                        showMaxFeaturesWarning = !newValue;
-                    }, this);
-                    
-                    maxFeaturesWarning.show();
-                }
-            }, this);
-        },
-        
-        initWMSStore: function() {
-            this.wmsStore = new Ext.data.GroupingStore({
-                url: this.wmsUrl + "?request=getcapabilities",
-                reader: new GeoExt.data.WMSCapabilitiesReader(),
-                sortInfo: {field: 'prefix'},
-                groupField: 'prefix'
-            });
-        },
-        
-        initFilterBuilder: function() {
-            this.filterBuilder = new GeoExt.drake.CustomFilterBuilder({
-                title: "Filter Builder",
-                region: "south",
-                height: 175,
-                autoScroll: true,
-                filter: this.filter.clone(),
-                attributes: new GeoExt.data.AttributesStore({
-                    url: this.getWFSLayerURL(this.getFullType()), 
-                    ignore: {name: "the_geom"}
-                }),
-                addToToolbar: ["->", new Ext.form.Checkbox({
-                    boxLabel: "Use Filter",
-                    enableToggle: true, 
-                    handler: function(checkbox, checked) {
-                        if (checked){
-                            this.featureStore.proxy.setOGCFilter(this.filterBuilder.getFilter());
-                            this.filterBuilder.on("change", this.updateQueryFilter, this);
-                        } else {
-                            this.featureStore.proxy.setOGCFilter(null);
-                            this.filterBuilder.un("change", this.updateQueryFilter, this);
-                        }
-                        this.reloadFeatureStore();
-                    },
-                    scope: this
-                })] 
-            });
-        },
-        
-        initPagingBar: function() {
-            this.pagingBar = new Ext.PagingToolbar({
-                pageSize: 7, 
-                store: this.featureStore,
-                displayInfo: true,
-                displayMsg: 'Displaying features {0} - {1} of {2}',
-                emptyMsg: 'No features to display'
-            });
-        },
-        
-        initMap: function() {
-            this.map = new OpenLayers.Map({
-                theme: null,
-                controls: [],
-                units: "m",
-                projection: new OpenLayers.Projection("EPSG:4326"),
-                // maxExtent: new OpenLayers.Bounds(-139.53227612499998,20.816194750000008,-59.55180737499998,55.44510100000001) 
-                maxExtent: new OpenLayers.Bounds(-180,-90,180,90) 
-            });
-                  
-            this.wfsStoreLayer = new GeoExt.layer.Vector("Vector Layer", {
-                    store: this.featureStore,
-                    displayInLayerSwitcher: false
-                }
-            );
-            
-            var baseLayer = new OpenLayers.Layer.WMS(
-                "OpenStreetMap",
-                "http://demo.opengeo.org/geoserver_openstreetmap/gwc/service/wms",
-                {layers: 'openstreetmap', format:'image/png'}, {isBaseLayer: true}
-            );
-    
-            var vmap0 = new OpenLayers.Layer.WMS(
-                "Metacarta Vmap0",
-                "http://labs.metacarta.com/wms/vmap0",
-                {layers: 'basic'}, {isBaseLayer: true}
-            );
-    
-    
-            var countries = new OpenLayers.Layer.WMS(
-                "Political Boundaries",
-                this.wmsUrl,
-                {layers: 'topp:countries'}, {isBaseLayer: true}
-            );
-         
-            // Add some layers with a dummy base layer.
-            this.map.addLayers([
-                baseLayer,
-                vmap0,
-                countries,
-                this.wfsStoreLayer
-            ]);
-            
-            this.map.addControl(new OpenLayers.Control.Navigation());
-            this.map.addControl(new OpenLayers.Control.PanZoomBar());
-            
-            this.mapPanel = new GeoExt.MapPanel({
-                region: "center",
-                map: this.map,
-                zoom: 4,
-                center: new OpenLayers.LonLat(-99.54204174999998,38.13064787500001)
-            });
-        },
-        
-        initFeatureGrid: function() {
-
-            this.grid = new Ext.grid.GridPanel({
-                title: "Feature Query Results",
-                stripeRows: true,
-                height:230,
-                region: "south",
-                collapsible: true,
-                collapseMode: "mini",
-                loadMask: {
-                    msg: "Loading features...",
-                    store: this.featureStore
                 },
-                columns: [],
-                store: this.featureStore,
-                selModel: new GeoExt.grid.FeatureSelectionModel({
-                        layer: this.wfsStoreLayer
-                }),
-                bbar: this.pagingBar
-            });
-            
-            this.grid.on("rowdblclick", function(grid, index, evt) {
-                var record = grid.getSelectionModel().getSelected();
-                
-                if (record) {
-                    var bounds = record.data.feature.geometry.getBounds();
-                    this.map.zoomToExtent(bounds);
-                }
-            }, this);
-            
-    
-            ///////////// POPUP STUFF
-             
-            this.grid.getSelectionModel().on("rowselect", function (model, row, record){
-                var feature = record.data.feature;
-    
-                var content = "<p> You selected " + feature.fid + "! I am truly impressed! </p>";    
+            };
 
-                feature.popup = new GeoExt.popup.Popup({
-                    title: feature.fid,
-                    feature: feature,
-                    width: 235,
-                    height: 70,
-                    html: content,
-                    collapsible: true,
-                    collapsed: true,
-                    expandOnShow: false
-                });
-
-                var popup = feature.popup;
-                this.grid.store.on("load", function(store, records, options){
-                    var record;
-                    for(var i = 0; i < records.length; i++){
-                        if(records[i].data.feature == feature){
-                            return;
-                        }
-                    }
-                    if(popup.anc){
-                        popup.close();
-                    }
-                });
-    
-                feature.popup.addToMapPanel(this.mapPanel);
-            }, this);
-    
-            this.grid.getSelectionModel().on("rowdeselect", function(model, row, record){
-                var feature = record.data.feature;
-                if(feature.popup.anc){
-                    feature.popup.close();
-                }
+            Ext.onReady(function() {
+                GeoExplorer.load();
             });
 
-        },
-        
-        initLayerTree: function() {
-            var addLayerButton = new Ext.Button({
-                text: "Add Layer...",
-                disabled: true,
-                handler: function() {
-                    var win = new GeoExt.drake.AddLayerWindow({
-                        capsStore: this.wmsStore
-                    });
-                    
-                    win.on("layerschosen", function(layers) {
-                        
-                        var layer;
-                        for (var index = 0; index < layers.length; index++) {
-                            var layerRecord = layers[index];
-                            var name = layerRecord.data.name;
-                            var tilesOrigin = layerRecord.data.llbbox[0] + "," + layerRecord.data.llbbox[1];
-                            
-                            layer = new OpenLayers.Layer.WMS(name, this.wmsUrl, {
-                                layers: name,
-                                format: "image/png",
-                                transparent: "true",
-                                tiled: true,
-                                tilesOrigin: tilesOrigin
-                            }, {
-                                isBaselayer: false,
-                                maxExtent: OpenLayers.Bounds.fromArray(layerRecord.data.llbbox)
-                            });
-
-                            layer.drakestyles = layerRecord.data.styles; 
-                            
-                            var found = false;
-                            for (var layersIndex = 0; layersIndex < this.map.layers.length; layersIndex++) {
-                                if (this.map.layers[layersIndex] instanceof OpenLayers.Layer.WMS) {
-                                    if (layer.params.LAYERS == this.map.layers[layersIndex].params.LAYERS) {
-                                        found = true;
-                                        break;
-                                    }
-                                }
-                            }
-                            
-                            if (!found) {
-                                this.map.addLayer(layer);
-                            }
-                        } 
-                    }, this);
-                    
-                    win.show();
-                },
-                scope: this
-            });
-            
-            
-            var root = new Ext.tree.TreeNode({});
-            
-            var baseLayerContainer = new GeoExt.tree.BaseLayerContainer({
-                map: this.map
-            });
-            
-            var wfsStore = new Ext.data.Store({
-                reader: new GeoExt.data.WFSCapabilitiesReader(),
-                url: this.wfsUrl + "?request=GetCapabilities" 
-            });
-            
-            // TODO: We should probably have some UI that shows the layer tree is loading,
-            // as the overlayContainer will not be added to the layerTree until the 
-            // wfsStore's request returns. This is not Hugely Important Right Now, but 
-            // experience tells me that for some user, at some point, this request
-            // is gonna hang.
-            wfsStore.load({
-                callback: function(response) {
-                    var overlayContainer = new GeoExt.tree.OverlayLayerContainer({
-                        map: this.map
-                    });
-                    
-                    overlayContainer.on("customizeconfig", function(config, layer) {
-                        config.uiProvider = GeoExt.drake.LayerNodeUI;
-                        config.queryable = wfsStore.find("name", layer.params.LAYERS) >= 0;
-                    });
-                    
-                    root.appendChild(overlayContainer);
-                    
-                    // Don't allow them to click the Add Layer button until we
-                    // have all the data we need. (i.e., we have it all now,
-                    // so enable the button).
-                    addLayerButton.setDisabled(false);
-                }
-            })
-            
-            root.appendChild(baseLayerContainer);
-            
-            this.layerTree = new GeoExt.tree.LayerTree({
-                border: false,
-                split: true,
-                rootVisible: false,
-                title: "Layers",
-                region: "center",
-                autoScroll: true,
-                root: root,
-                bbar: [
-                    addLayerButton,
-                    new Ext.Button({
-                        text: "Remove selected",
-                        handler: function() {
-                            var nodes = layerTree.getSelectionModel().getSelectedNodes();
-                            for (var i = 0; i < nodes.length; i++){
-                                var layerName = nodes[i].text;
-                                for (var j = 0; j < map.layers.length; j++) {
-                                    if (map.layers[j] instanceof OpenLayers.Layer.WMS) {
-                                        if (layerName == map.layers[j].params.LAYERS) {
-                                            map.layers[j].destroy();
-                                            break;
-                                        }                                 }
-                                    }
-                                }
-                            }
-                        })
-                ]
-            });
-    
-            this.layerTree.on("contextmenu", function(node, e){
-                if (node.layer){
-                    var menuConfig = [{
-                        id: "zoomtobounds",
-                        text: "Zoom to layer bounds",
-                        handler: function(evt){
-                                this.map.zoomToExtent(node.layer.maxExtent);
-                        },
-                        scope: this
-                    }];
-
-                    if (node.layer.drakestyles && node.layer.drakestyles.length > 1){
-                        for (var i = 0; i < node.layer.drakestyles.length; i++){
-                            var style = node.layer.drakestyles[i];
-                            menuConfig.push({id: style.name,
-                                text: "Render by \"" + style.title + '"',
-                                handler: function(style){
-                                    return function(evt){
-                                        node.layer.params.STYLES = style.name;
-                                        node.layer.redraw();
-                                    };
-                                }(style),
-                                scope: this
-                            });
-                        }
-                    }
-
-                    var menu = new Ext.menu.Menu(menuConfig);
-                    menu.showAt(e.getPoint());
-                }
-            }, this);  
-
-            this.layerTree.on("layeractivated", this.activateLayer, this);
-        },
-        
-        addLayerHandler: function() {
-            
-        },
-        
-        initLegendPanel: function() {
-            this.legendPanel = new GeoExt.LegendPanel({
-                map: this.map,
-                region: "east",
-                title: "Legend",
-                width: 200,
-                bodyStyle: "padding: 5px",
-                collapsible: true,
-                autoScroll: true
-            });
-        },
-        
-        getFullType: function() {
-            return this.featurePrefix + ":" + this.featureType;
-        },
-
-        getWFSLayerURL: function(type) { 
-            return this.wfsUrl + "?request=DescribeFeatureType&typename=" + type;
-        }, 
-
-        activateLayer: function(layer) {
-            this.filterBuilder.attributes = new GeoExt.data.AttributesStore({
-                url: this.getWFSLayerURL(layer.name),
-                ignore: {name: "the_geom"}
-            });
-            this.filterBuilder.setFilter(null);
-
-            var typename = layer.params.LAYERS;
-                        // update fields
-            var attributeStore = new GeoExt.data.AttributesStore({
-                url: this.wfsUrl + "?typename=" + typename + "&request=describefeaturetype"
-            });
-    
-            attributeStore.load({
-                // TODO: Rename x to something meaningful.
-                callback: function(x){
-                    this.fields = [];
-    
-                    for (var i = 0; i < x.length; i++){
-                        this.fields.push(x[i].data);
-                    }
-
-                    this.finishActivating(attributeStore.reader.namespace, typename);
-                },
-                scope: this
-            });
-        },
-
-        finishActivating: function(namespace, typename) {
-            var parts = typename.split(':');
-            this.featurePrefix = parts[0];
-            this.featureType   = parts[1];
-
-            this.featureStore.proxy = this.createProxy({prefix: parts[0], type: parts[1], namespace: namespace});
-            this.featureStore.reader = new GeoExt.data.FeatureReader({}, recordize(this.fields));
- 
-            this.grid.setTitle(typename + " - " + namespace);
-            this.grid.colModel.setConfig(columnize(this.fields));
-
-            this.reloadFeatureStore();
-        },
-
-        updateQueryFilter: function(builder){
-            this.featureStore.proxy.setOGCFilter(builder.getFilter());
-            this.reloadFeatureStore();
-        },
-        
-        reloadFeatureStore: function() {
-            this.featureStore.load({
-                params: {
-                    start: 0, 
-                    limit: this.featuresPerPage
-                }
-            });
-        }
-    };
-
-    Ext.onReady(function() {
-        GeoExt.Drake.load({
-            featurePrefix: "topp",
-            featureType: "states",
-            
-            geoserverUrl: "/geoserver",
-            wmsUrl: "/geoserver/wms",
-            wfsUrl: "/geoserver/wfs",
-            
-            maxFeatures: 300,
-            featuresPerPage: 7
-        });
-    });
-
-    </script>
-</head>
-<body>
-</body>
+        </script>
+    </head>
+    <body>
+    </body>
 </html>



More information about the Commits mailing list