[Commits] r1585 - in sandbox/ahocevar/playground/ux/Printing/ux: data widgets/form
commits at geoext.org
commits at geoext.org
Tue Dec 15 01:09:31 CET 2009
Author: ahocevar
Date: 2009-12-15 01:09:31 +0100 (Tue, 15 Dec 2009)
New Revision: 1585
Modified:
sandbox/ahocevar/playground/ux/Printing/ux/data/PrintProvider.js
sandbox/ahocevar/playground/ux/Printing/ux/widgets/form/SimplePrint.js
Log:
added legend support (works with attachment:geoext-153.patch), added printOptions to print command and SimplePrint form
Modified: sandbox/ahocevar/playground/ux/Printing/ux/data/PrintProvider.js
===================================================================
--- sandbox/ahocevar/playground/ux/Printing/ux/data/PrintProvider.js 2009-12-14 09:10:08 UTC (rev 1584)
+++ sandbox/ahocevar/playground/ux/Printing/ux/data/PrintProvider.js 2009-12-15 00:09:31 UTC (rev 1585)
@@ -259,11 +259,15 @@
* :param map: ``GeoExt.MapPanel``|``OpenLayers.Map`` The map to print.
* :param pages: ``Array`` of :class:`GeoExt.ux.data.PrintPage`` pages to
* print.
+ * :param options: ``Object`` of additional options:
+ * * ``legend``: :class:`GeoExt.LegendPanel` If provided, the legend
+ * will be added to the print document.
*
* Sends the print command to the print service and opens a new window
* with the resulting PDF.
*/
- print: function(map, pages) {
+ print: function(map, pages, options) {
+ options = options || {};
if(map instanceof GeoExt.MapPanel) {
map = map.map;
}
@@ -285,7 +289,7 @@
scale: page.scale,
rotation: page.rotation
}, page.customParams));
- }, this)
+ }, this);
var payload = Ext.apply({
pages: encodedPages,
@@ -296,6 +300,15 @@
layout: this.layout
}, this.customParams);
+ if(options.legend) {
+ var legends = [];
+ options.legend.items.each(function(cmp) {
+ var encFn = GeoExt.ux.data.PrintProvider.encode.legend[cmp.getXType()];
+ legends = legends.concat(encFn(cmp));
+ }, this);
+ payload.legends = legends;
+ }
+
if(this.method === "GET") {
window.open(this.capabilities.printURL + "?spec=" +
escape(Ext.encode(payload)));
@@ -345,9 +358,9 @@
*/
encodeLayer: function(layer) {
var encLayer;
- for(var c in GeoExt.ux.data.PrintProvider.encode) {
+ for(var c in GeoExt.ux.data.PrintProvider.encode.layer) {
if(layer instanceof OpenLayers.Layer[c]) {
- encLayer = GeoExt.ux.data.PrintProvider.encode[c](layer);
+ encLayer = GeoExt.ux.data.PrintProvider.encode.layer[c](layer);
break;
}
}
@@ -360,115 +373,151 @@
* An object providing encoding functions for different layer types.
*/
GeoExt.ux.data.PrintProvider.encode = {
- "WMS": function(layer){
- var enc = Ext.apply(GeoExt.ux.data.PrintProvider.encode["HTTPRequest"](layer), {
- type: 'WMS',
- layers: [layer.params.LAYERS].join(",").split(","),
- format: layer.params.FORMAT,
- styles: [layer.params.STYLES].join(",").split(","),
- customParams: {}
- });
- var param;
- for (var p in layer.params) {
- param = p.toLowerCase();
- if (!layer.DEFAULT_PARAMS[param] &&
- "layers,styles,width,height,srs".indexOf(param) == -1) {
- enc.customParams[p] = layer.params[p];
+ layer: {
+ "WMS": function(layer){
+ var enc = Ext.apply(GeoExt.ux.data.PrintProvider.encode.layer["HTTPRequest"](layer), {
+ type: 'WMS',
+ layers: [layer.params.LAYERS].join(",").split(","),
+ format: layer.params.FORMAT,
+ styles: [layer.params.STYLES].join(",").split(","),
+ customParams: {}
+ });
+ var param;
+ for (var p in layer.params) {
+ param = p.toLowerCase();
+ if (!layer.DEFAULT_PARAMS[param] &&
+ "layers,styles,width,height,srs".indexOf(param) == -1) {
+ enc.customParams[p] = layer.params[p];
+ }
}
- }
- return enc;
- },
- "OSM": function(layer) {
- return Ext.apply(GeoExt.ux.data.PrintProvider.encode["TileCache"](layer), {
- type: 'Osm',
- baseURL: enc.baseURL.substr(0, enc.baseURL.indexOf("$")),
- extension: "png"
- });
- },
- "TileCache": function(layer) {
- return Ext.apply(GeoExt.ux.data.PrintProvider.encode["HTTPRequest"](layer), {
- type: 'TileCache',
- layer: layer.layername,
- maxExtent: layer.maxExtent.toArray(),
- tileSize: [layer.tileSize.w, layer.tileSize.h],
- extension: layer.extension,
- resolutions: layer.serverResolutions || layer.resolutions
- });
- },
- "HTTPRequest": function(layer) {
- var url = layer.url instanceof Array ? layer.url[0] : layer.url;
- return {
- baseURL: Ext.DomHelper.overwrite(document.createElement("a"),
- {tag: "a", href: url}).href,
- opacity: (layer.opacity != null) ? layer.opacity : 1.0,
- singleTile: layer.singleTile
- };
- },
- "Image": function(layer) {
- return {
- type: 'Image',
- baseURL: Ext.DomHelper.overwrite(document.createElement("a"),
- {tag: "a", href: layer.getURL(layer.extent)}).href,
- opacity: (layer.opacity != null) ? layer.opacity : 1.0,
- extent: layer.extent.toArray(),
- pixelSize: [layer.size.w, layer.size.h],
- name: layer.name
- };
- },
- "Vector": function(layer) {
- if(layer.features.length) {
- var encFeatures = [];
- var encStyles = {};
- var features = layer.features;
- var featureFormat = new OpenLayers.Format.GeoJSON();
- var styleFormat = new OpenLayers.Format.JSON();
- var nextId = 1;
- var styleDict = {};
- var feature, style, dictKey, dictItem;
- for(var i=0, len=features.length; i<len; ++i) {
- feature = features[i];
- style = feature.style || layer.style ||
- layer.styleMap.createSymbolizer(feature, feature.renderIntent);
- dictKey = styleFormat.write(style);
- dictItem = styleDict[dictKey];
- if (dictItem) {
- //this style is already known
- styleName = dictItem;
- } else {
- //new style
- styleDict[dictKey] = styleName = nextId++;
- if (style.externalGraphic) {
- encStyles[styleName] = Ext.applyIf({
- externalGraphic: Ext.DomHelper.overwrite(
- document.createElement("a"),
- {tag: "a", href: style.externalGraphic}).href
- }, style);
- } else {
- encStyles[styleName] = style;
+ return enc;
+ },
+ "OSM": function(layer){
+ return Ext.apply(GeoExt.ux.data.PrintProvider.encode.layer["TileCache"](layer), {
+ type: 'Osm',
+ baseURL: enc.baseURL.substr(0, enc.baseURL.indexOf("$")),
+ extension: "png"
+ });
+ },
+ "TileCache": function(layer){
+ return Ext.apply(GeoExt.ux.data.PrintProvider.encode.layer["HTTPRequest"](layer), {
+ type: 'TileCache',
+ layer: layer.layername,
+ maxExtent: layer.maxExtent.toArray(),
+ tileSize: [layer.tileSize.w, layer.tileSize.h],
+ extension: layer.extension,
+ resolutions: layer.serverResolutions || layer.resolutions
+ });
+ },
+ "HTTPRequest": function(layer){
+ var url = layer.url instanceof Array ? layer.url[0] : layer.url;
+ return {
+ baseURL: Ext.DomHelper.overwrite(document.createElement("a"), {
+ tag: "a",
+ href: url
+ }).href,
+ opacity: (layer.opacity != null) ? layer.opacity : 1.0,
+ singleTile: layer.singleTile
+ };
+ },
+ "Image": function(layer){
+ return {
+ type: 'Image',
+ baseURL: Ext.DomHelper.overwrite(document.createElement("a"), {
+ tag: "a",
+ href: layer.getURL(layer.extent)
+ }).href,
+ opacity: (layer.opacity != null) ? layer.opacity : 1.0,
+ extent: layer.extent.toArray(),
+ pixelSize: [layer.size.w, layer.size.h],
+ name: layer.name
+ };
+ },
+ "Vector": function(layer){
+ if (layer.features.length) {
+ var encFeatures = [];
+ var encStyles = {};
+ var features = layer.features;
+ var featureFormat = new OpenLayers.Format.GeoJSON();
+ var styleFormat = new OpenLayers.Format.JSON();
+ var nextId = 1;
+ var styleDict = {};
+ var feature, style, dictKey, dictItem;
+ for (var i = 0, len = features.length; i < len; ++i) {
+ feature = features[i];
+ style = feature.style || layer.style ||
+ layer.styleMap.createSymbolizer(feature,
+ feature.renderIntent);
+ dictKey = styleFormat.write(style);
+ dictItem = styleDict[dictKey];
+ if (dictItem) {
+ //this style is already known
+ styleName = dictItem;
}
+ else {
+ //new style
+ styleDict[dictKey] = styleName = nextId++;
+ if (style.externalGraphic) {
+ encStyles[styleName] = Ext.applyIf({
+ externalGraphic: Ext.DomHelper.overwrite(
+ document.createElement("a"), {
+ tag: "a",
+ href: style.externalGraphic
+ }).href
+ }, style);
+ }
+ else {
+ encStyles[styleName] = style;
+ }
+ }
+ var featureGeoJson = featureFormat.extract.feature.call(
+ featureFormat, feature);
+
+ featureGeoJson.properties = OpenLayers.Util.extend({
+ _gx_style: styleName
+ }, featureGeoJson.properties);
+
+ encFeatures.push(featureGeoJson);
}
- var featureGeoJson = featureFormat.extract.feature.call(
- featureFormat, feature);
-
- featureGeoJson.properties = OpenLayers.Util.extend({
- _gx_style: styleName
- }, featureGeoJson.properties);
-
- encFeatures.push(featureGeoJson);
+
+ return {
+ type: 'Vector',
+ styles: encStyles,
+ styleProperty: '_gx_style',
+ geoJson: {
+ type: "FeatureCollection",
+ features: encFeatures
+ },
+ name: layer.name,
+ opacity: (layer.opacity != null) ? layer.opacity : 1.0
+ };
}
-
- return {
- type: 'Vector',
- styles: encStyles,
- styleProperty: '_gx_style',
- geoJson: {
- type: "FeatureCollection",
- features: encFeatures
- },
- name: layer.name,
- opacity: (layer.opacity != null) ? layer.opacity : 1.0
- };
}
+ },
+ legend: {
+ "gx_legendwms": function(legend) {
+ return GeoExt.ux.data.PrintProvider.encode.legend.base(legend);
+ },
+ "gx_legendurl": function(legend) {
+ return GeoExt.ux.data.PrintProvider.encode.legend.base(legend);
+ },
+ "base": function(legend) {
+ var enc = [];
+ legend.items.each(function(cmp) {
+ if(cmp instanceof Ext.form.Label) {
+ enc.push({name: cmp.text, classes: []});
+ } else if(cmp instanceof GeoExt.LegendImage) {
+ enc.push({
+ name: "",
+ icon: Ext.DomHelper.overwrite(
+ document.createElement("a"), {
+ tag: "a",
+ href: cmp.url
+ }).href,
+ classes: []});
+ }
+ }, this);
+ return enc;
+ }
}
-
};
\ No newline at end of file
Modified: sandbox/ahocevar/playground/ux/Printing/ux/widgets/form/SimplePrint.js
===================================================================
--- sandbox/ahocevar/playground/ux/Printing/ux/widgets/form/SimplePrint.js 2009-12-14 09:10:08 UTC (rev 1584)
+++ sandbox/ahocevar/playground/ux/Printing/ux/widgets/form/SimplePrint.js 2009-12-15 00:09:31 UTC (rev 1585)
@@ -37,7 +37,12 @@
rotationText: "Rotation",
printText: "Print",
/* end i18n */
-
+
+ /** api: property[printOptions]
+ * ``Object`` Optional options for the printProvider's print command.
+ */
+ printOptions: null,
+
/** private: method[initComponent]
*/
initComponent: function() {
@@ -109,7 +114,8 @@
this.addButton({
text: this.printText,
handler: function() {
- this.printProvider.print(this.map, this.pages);
+ this.printProvider.print(this.map, this.pages,
+ this.printOptions);
},
scope: this
});
More information about the Commits
mailing list