[Commits] r167 - in sandbox/opengeo/drake/trunk: apps/drake apps/drake/theme core/lib core/lib/GeoExt/data core/lib/GeoExt/widgets/tree
commits at geoext.org
commits at geoext.org
Fri Feb 13 22:55:16 CET 2009
Author: tcoulter
Date: 2009-02-13 22:55:16 +0100 (Fri, 13 Feb 2009)
New Revision: 167
Added:
sandbox/opengeo/drake/trunk/core/lib/GeoExt/data/WFSCapabilitiesReader.js
Modified:
sandbox/opengeo/drake/trunk/apps/drake/AddLayerWindow.js
sandbox/opengeo/drake/trunk/apps/drake/LayerNodeUI.js
sandbox/opengeo/drake/trunk/apps/drake/index.html
sandbox/opengeo/drake/trunk/apps/drake/theme/column-tree.css
sandbox/opengeo/drake/trunk/core/lib/GeoExt.js
sandbox/opengeo/drake/trunk/core/lib/GeoExt/widgets/tree/LayerContainer.js
Log:
1) Added a WFSCapabilitiesReader,
2) Change the LayerContainer class so listeners can change the config sent to the LayerNode based on the "customizeconfig" event,
3) Changed the LayerNodeUI class to react to the "queryable" parameter of a LayerNode,
4) Hooked up Drake with a WFS caps. store so it could discern which layers are queryable.
5) Tangential edit: Cleaned up AddLayerWindow's url params/set easier expectations.
Modified: sandbox/opengeo/drake/trunk/apps/drake/AddLayerWindow.js
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/AddLayerWindow.js 2009-02-13 19:50:12 UTC (rev 166)
+++ sandbox/opengeo/drake/trunk/apps/drake/AddLayerWindow.js 2009-02-13 21:55:16 UTC (rev 167)
@@ -6,7 +6,7 @@
GeoExt.drake.AddLayerWindow = Ext.extend(Ext.Window, {
catalogGrid: null,
- url: null,
+ wmsUrl: null,
width: 550,
height: 500,
modal: true,
@@ -16,7 +16,7 @@
initComponent: function(){
this.catalogGrid = new Ext.grid.GridPanel({
store: new Ext.data.GroupingStore({
- url: this.url,
+ url: this.wmsUrl + "?request=GetCapabilities",
reader: new GeoExt.data.WMSCapabilitiesReader(),
sortInfo: {field: 'prefix'},
groupField: 'prefix'
Modified: sandbox/opengeo/drake/trunk/apps/drake/LayerNodeUI.js
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/LayerNodeUI.js 2009-02-13 19:50:12 UTC (rev 166)
+++ sandbox/opengeo/drake/trunk/apps/drake/LayerNodeUI.js 2009-02-13 21:55:16 UTC (rev 167)
@@ -20,18 +20,30 @@
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>";
+
- var queryHtml ="<div><input type='radio' name='"+ this.node.ownerTree.id + "-query-radio" +"' value='"+this.node.id+"'></input></div>";
-
this.queryCol = Ext.get(this.elNode).insertHtml('beforeEnd', queryHtml, true);
- this.queryCol.first().on("click", function(evt, target, parameters){
- var node = GeoExt.Drake.layerTree.getNodeById(target.value);
- node.ownerTree.fireEvent("layeractivated", node.layer);
- target.click();
- return true;
- });
- this.queryCol.addClass("gx-tree-col");
- this.queryCol.setWidth(60);
+
+ // If there's no first item... because of the functionality above, this is
+ // equivalent to saying if (this.note.attributes.queryable == true) {...}.
+ if (this.queryCol.first()) {
+ this.queryCol.first().on("click", function(evt, target, parameters){
+ var node = GeoExt.Drake.layerTree.getNodeById(target.value);
+ node.ownerTree.fireEvent("layeractivated", node.layer);
+ target.click();
+ return true;
+ });
+ }
+ this.queryCol.addClass("gx-tree-query-col");
this.clearEl = Ext.get(this.elNode).insertHtml("beforeEnd", "<div class='x-clear'></div>", true);
}
Modified: sandbox/opengeo/drake/trunk/apps/drake/index.html
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/index.html 2009-02-13 19:50:12 UTC (rev 166)
+++ sandbox/opengeo/drake/trunk/apps/drake/index.html 2009-02-13 21:55:16 UTC (rev 167)
@@ -367,16 +367,90 @@
},
initLayerTree: function() {
+ var addLayerButton = new Ext.Button({
+ text: "Add Layer...",
+ disabled: true,
+ handler: function() {
+ var win = new GeoExt.drake.AddLayerWindow({
+ wmsUrl: this.wmsUrl
+ });
+
+ win.on("layerschosen", function(layers) {
+
+ var layer;
+ for (var index = 0; index < layers.length; index++) {
+ var layerRecord = layers[index];
+ var name = layerRecord.data.name;
+
+ layer = new OpenLayers.Layer.WMS(name, this.wmsUrl, {
+ layers: name,
+ format: "image/png",
+ transparent: "true"
+ }, {
+ isBaselayer: false,
+ maxExtent: OpenLayers.Bounds.fromArray(layerRecord.data.llbbox)
+ });
+
+ 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({});
- root.appendChild(new GeoExt.tree.BaseLayerContainer({
+
+ var baseLayerContainer = new GeoExt.tree.BaseLayerContainer({
map: this.map
- }));
+ });
- root.appendChild(new GeoExt.tree.OverlayLayerContainer({
- map: this.map,
- layerUI: GeoExt.drake.LayerNodeUI
- }));
+ 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,
@@ -386,50 +460,8 @@
autoScroll: true,
root: root,
bbar: [
+ addLayerButton,
new Ext.Button({
- text: "Add Layer...",
- handler: function() {
- var win = new GeoExt.drake.AddLayerWindow({
- url: this.wmsUrl + "?request=GetCapabilities"
- });
-
- win.on("layerschosen", function(layers) {
-
- var layer;
- for (var index = 0; index < layers.length; index++) {
- var layerRecord = layers[index];
- var name = layerRecord.data.name;
-
- layer = new OpenLayers.Layer.WMS(name, this.wmsUrl, {
- layers: name,
- format: "image/png",
- transparent: "true"
- }, {
- isBaselayer: false,
- maxExtent: OpenLayers.Bounds.fromArray(layerRecord.data.llbbox)
- });
-
- 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
- }),
- new Ext.Button({
text: "Remove selected",
handler: function() {
var nodes = layerTree.getSelectionModel().getSelectedNodes();
@@ -466,6 +498,10 @@
this.layerTree.on("layeractivated", this.activateLayer, this);
},
+ addLayerHandler: function() {
+
+ },
+
initLegendPanel: function() {
this.legendPanel = new GeoExt.LegendPanel({
map: this.map,
Modified: sandbox/opengeo/drake/trunk/apps/drake/theme/column-tree.css
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/theme/column-tree.css 2009-02-13 19:50:12 UTC (rev 166)
+++ sandbox/opengeo/drake/trunk/apps/drake/theme/column-tree.css 2009-02-13 21:55:16 UTC (rev 167)
@@ -34,6 +34,10 @@
zoom:1;
}
+.gx-tree-query-col {
+ text-align: center;
+}
+
.gx-tree-col-text, .gx-tree-hd-text {
overflow:hidden;
-o-text-overflow: ellipsis;
Added: sandbox/opengeo/drake/trunk/core/lib/GeoExt/data/WFSCapabilitiesReader.js
===================================================================
--- sandbox/opengeo/drake/trunk/core/lib/GeoExt/data/WFSCapabilitiesReader.js (rev 0)
+++ sandbox/opengeo/drake/trunk/core/lib/GeoExt/data/WFSCapabilitiesReader.js 2009-02-13 21:55:16 UTC (rev 167)
@@ -0,0 +1,32 @@
+Ext.namespace("GeoExt.data");
+
+GeoExt.data.WFSCapabilitiesReader = function(opts){
+ GeoExt.data.WFSCapabilitiesReader.superclass.constructor.apply(this, arguments);
+ this.recordType = this.recordType || Ext.data.Record.create([
+ {name: 'name', type: 'string'},
+ {name: 'title', type: 'string'},
+ {name: 'abstract', type: 'string'}
+ ]);
+};
+
+Ext.extend(GeoExt.data.WFSCapabilitiesReader, Ext.data.DataReader, {
+ read: function (response) {
+
+ var fmt = new OpenLayers.Format.WFSCapabilities();
+ var caps = fmt.read(response.responseXML);
+ var featureTypes = caps.featureTypeList.featureTypes;
+ console.log(featureTypes);
+
+ var records = [];
+
+ for (var index = 0; index < featureTypes.length; index++){
+ records.push(new this.recordType(featureTypes[index]));
+ }
+
+ return {
+ totalRecords: records.length,
+ success: true,
+ records: records
+ };
+ }
+});
Modified: sandbox/opengeo/drake/trunk/core/lib/GeoExt/widgets/tree/LayerContainer.js
===================================================================
--- sandbox/opengeo/drake/trunk/core/lib/GeoExt/widgets/tree/LayerContainer.js 2009-02-13 19:50:12 UTC (rev 166)
+++ sandbox/opengeo/drake/trunk/core/lib/GeoExt/widgets/tree/LayerContainer.js 2009-02-13 21:55:16 UTC (rev 167)
@@ -28,8 +28,6 @@
*/
map: null,
- layerUI: null,
-
/**
* Constructor: GeoExt.tree.LayerContainer
*
@@ -39,8 +37,8 @@
constructor: function(config) {
this.map = config.map;
- this.layerUI = config.layerUI;
-
+ this.addEvents("customizeconfig");
+
GeoExt.tree.LayerContainer.superclass.constructor.apply(this, arguments);
},
@@ -89,9 +87,7 @@
layer: layer
}
- if(this.layerUI){
- config.uiProvider = this.layerUI;
- }
+ this.fireEvent("customizeconfig", config, layer);
node = new GeoExt.tree.LayerNode(config);
Modified: sandbox/opengeo/drake/trunk/core/lib/GeoExt.js
===================================================================
--- sandbox/opengeo/drake/trunk/core/lib/GeoExt.js 2009-02-13 19:50:12 UTC (rev 166)
+++ sandbox/opengeo/drake/trunk/core/lib/GeoExt.js 2009-02-13 21:55:16 UTC (rev 167)
@@ -81,6 +81,7 @@
"GeoExt/request/ErrorWindow.js",
"GeoExt/request/RequestManager.js",
"GeoExt/data/WMSCapabilitiesReader.js",
+ "GeoExt/data/WFSCapabilitiesReader.js",
"GeoExt/data/FeatureReader.js",
"GeoExt/data/FeatureStoreMediator.js",
"GeoExt/data/LayerStoreMediator.js",
More information about the Commits
mailing list