[Commits] r1619 - in sandbox/ahocevar/playground/ux/Printing: examples ux/data ux/plugins ux/widgets
commits at geoext.org
commits at geoext.org
Sun Dec 27 11:29:30 CET 2009
Author: ahocevar
Date: 2009-12-27 11:29:30 +0100 (Sun, 27 Dec 2009)
New Revision: 1619
Modified:
sandbox/ahocevar/playground/ux/Printing/examples/PrintMapPanel.html
sandbox/ahocevar/playground/ux/Printing/examples/PrintMapPanel.js
sandbox/ahocevar/playground/ux/Printing/ux/data/PrintPage.js
sandbox/ahocevar/playground/ux/Printing/ux/plugins/PrintPageField.js
sandbox/ahocevar/playground/ux/Printing/ux/plugins/PrintProviderField.js
sandbox/ahocevar/playground/ux/Printing/ux/widgets/PrintMapPanel.js
Log:
working version of PrintMapPanel with example.
Modified: sandbox/ahocevar/playground/ux/Printing/examples/PrintMapPanel.html
===================================================================
--- sandbox/ahocevar/playground/ux/Printing/examples/PrintMapPanel.html 2009-12-27 07:13:21 UTC (rev 1618)
+++ sandbox/ahocevar/playground/ux/Printing/examples/PrintMapPanel.html 2009-12-27 10:29:30 UTC (rev 1619)
@@ -2,12 +2,35 @@
<head>
<title>Printing ux Example</title>
- <script type="text/javascript" src="http://extjs.cachefly.net/ext-2.2.1/adapter/ext/ext-base.js"></script>
- <script type="text/javascript" src="http://extjs.cachefly.net/ext-2.2.1/ext-all-debug.js"></script>
- <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/resources/css/ext-all.css" />
- <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/examples/shared/examples.css" />
+ <script type="text/javascript" src="http://extjs.cachefly.net/ext-3.0.0/adapter/ext/ext-base.js"></script>
+ <script type="text/javascript" src="http://extjs.cachefly.net/ext-3.0.0/ext-all-debug.js"></script>
+ <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-3.0.0/resources/css/ext-all.css" />
+ <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-3.0.0/examples/shared/examples.css" />
<script src="http://openlayers.org/api/2.8/OpenLayers.js"></script>
- <script type="text/javascript" src="/geoext/geoext/lib/GeoExt.js"></script>
+ <script type="text/javascript">
+ // remove this script tag when http://trac.openlayers.org/ticket/2391 is fixed
+ OpenLayers.Layer.Vector.prototype.clone = function (obj) {
+
+ if (obj == null) {
+ obj = new OpenLayers.Layer.Vector(this.name, this.options);
+ }
+
+ //get all additions from superclasses
+ obj = OpenLayers.Layer.prototype.clone.apply(this, [obj]);
+
+ // copy/set any non-init, non-simple values here
+ var features = this.features;
+ var len = features.length;
+ var clonedFeatures = new Array(len);
+ for(var i=0; i<len; ++i) {
+ clonedFeatures[i] = features[i].clone();
+ }
+ obj.features = clonedFeatures;
+
+ return obj;
+ };
+ </script>
+ <script type="text/javascript" src="../../../trunk/geoext/lib/GeoExt.js"></script>
<script type="text/javascript" src="../ux/Printing.js"></script>
Modified: sandbox/ahocevar/playground/ux/Printing/examples/PrintMapPanel.js
===================================================================
--- sandbox/ahocevar/playground/ux/Printing/examples/PrintMapPanel.js 2009-12-27 07:13:21 UTC (rev 1618)
+++ sandbox/ahocevar/playground/ux/Printing/examples/PrintMapPanel.js 2009-12-27 10:29:30 UTC (rev 1619)
@@ -1,4 +1,4 @@
-var printProvider, map;
+var printProvider, map, printMapPanel;
Ext.onReady(function() {
@@ -52,14 +52,74 @@
});
function showPrintWindow() {
+ printMapPanel = new GeoExt.ux.PrintMapPanel({
+ sourceMap: map,
+ printProvider: printProvider
+ });
+
new Ext.Window({
title: "Print",
- layout: "fit",
- autoWidth: true,
- autoHeight: true,
- items: new GeoExt.PrintMapPanel({
- sourceMap: map,
- printProvider: printProvider
- })
+ modal: true,
+ items: [{
+ xtype: "form",
+ border: false,
+ forceLayout: true,
+ hideLabels: true,
+ bodyStyle: "padding: 5px 30px 5px 30px",
+ defaults: {
+ anchor: "100%"
+ },
+ items: [{
+ xtype: "textfield",
+ name: "mapTitle",
+ emptyText: "Enter map title here.",
+ plugins: new GeoExt.ux.plugins.PrintProviderField({
+ printProvider: printProvider
+ })
+ }, {
+ xtype: "textarea",
+ name: "comment",
+ emptyText: "Enter comments here.",
+ plugins: new GeoExt.ux.plugins.PrintProviderField({
+ printProvider: printProvider
+ })
+ }, printMapPanel]
+ }],
+ tbar: ["Paper Size:", {
+ xtype: "combo",
+ width: 98,
+ plugins: new GeoExt.ux.plugins.PrintProviderField({
+ printProvider: printProvider
+ }),
+ store: printProvider.layouts,
+ displayField: "name",
+ typeAhead: true,
+ mode: "local",
+ forceSelection: true,
+ triggerAction: "all",
+ selectOnFocus: true
+ }, " Resolution:", {
+ xtype: "combo",
+ width: 62,
+ plugins: new GeoExt.ux.plugins.PrintProviderField({
+ printProvider: printProvider
+ }),
+ store: printProvider.dpis,
+ displayField: "name",
+ tpl: '<tpl for="."><div class="x-combo-list-item">{name} dpi</div></tpl>',
+ typeAhead: true,
+ mode: "local",
+ forceSelection: true,
+ triggerAction: "all",
+ selectOnFocus: true,
+ setValue: function(v) {
+ v = parseInt(v) + " dpi";
+ Ext.form.ComboBox.prototype.setValue.apply(this, arguments);
+ }
+ }, "->", {
+ text: "Print",
+ handler: printMapPanel.print,
+ scope: printMapPanel
+ }]
}).show();
}
Modified: sandbox/ahocevar/playground/ux/Printing/ux/data/PrintPage.js
===================================================================
--- sandbox/ahocevar/playground/ux/Printing/ux/data/PrintPage.js 2009-12-27 07:13:21 UTC (rev 1618)
+++ sandbox/ahocevar/playground/ux/Printing/ux/data/PrintPage.js 2009-12-27 10:29:30 UTC (rev 1619)
@@ -170,23 +170,26 @@
/** api: method[fitPage]
* :param map: ``OpenLayers.Map`` The map to fit the page to.
+ * :param loose: ``Boolean`` If set to true, the print extent will
+ * be at least as large as the visible map extent. Default is false.
*
* Fits the page layout to the current map extent, using the smallest
* scale that entirely fits the extent.
*/
- fitPage: function(map) {
+ fitPage: function(map, loose) {
this.suspendEvents();
this.setCenter(map.getCenter());
+ this.resumeEvents();
var extent = map.getExtent();
var units = map.baseLayer.units;
- var scale;
+ var scale, looseScale;
this.printProvider.scales.each(function(rec) {
+ looseScale = scale || rec;
scale = rec;
return !extent.containsBounds(
this.calculatePageBounds(scale, units));
}, this);
- this.resumeEvents();
- this.setScale(scale, units);
+ this.setScale(loose === true ? looseScale : scale, units);
},
/** api: method[updateByHandle]
@@ -291,11 +294,14 @@
*/
calculatePageBounds: function(scale, units) {
var s = scale.get("value");
+ var f = this.feature;
var geom = this.feature.geometry;
var center = geom.getBounds().getCenterLonLat();
var size = this.printProvider.layout.get("size");
- var units = units || this.feature.layer.map.baseLayer.units || "dd";
+ var units = units ||
+ (f.layer && f.layer.map && f.layer.map.baseLayer.units) ||
+ "dd";
var unitsRatio = OpenLayers.INCHES_PER_UNIT[units];
var w = size.width / 72 / unitsRatio * s / 2;
var h = size.height / 72 / unitsRatio * s / 2;
Modified: sandbox/ahocevar/playground/ux/Printing/ux/plugins/PrintPageField.js
===================================================================
--- sandbox/ahocevar/playground/ux/Printing/ux/plugins/PrintPageField.js 2009-12-27 07:13:21 UTC (rev 1618)
+++ sandbox/ahocevar/playground/ux/Printing/ux/plugins/PrintPageField.js 2009-12-27 10:29:30 UTC (rev 1619)
@@ -70,6 +70,7 @@
onFieldChange: function(field, record) {
var printProvider = this.page.printProvider;
var value = field.getValue();
+ this._updating = true;
if(field.store === printProvider.scales) {
this.page.setScale(record);
} else if(field.name == "rotation") {
@@ -77,6 +78,7 @@
} else {
this.page.customParams[field.name] = value;
}
+ delete this._updating;
},
/** private: method[onPageChange]
@@ -86,15 +88,17 @@
* with.
*/
onPageChange: function(page) {
- var t = this.target;
- t.suspendEvents();
- if(t.store === page.printProvider.scales) {
- t.setValue(page.scale.get(t.displayField));
- } else if(t.name == "rotation") {
- t.setValue(page.rotation);
- t.setDisabled(!page.printProvider.layout.get("rotation"));
+ if(!this._updating) {
+ var t = this.target;
+ t.suspendEvents();
+ if(t.store === page.printProvider.scales) {
+ t.setValue(page.scale.get(t.displayField));
+ } else if(t.name == "rotation") {
+ t.setValue(page.rotation);
+ t.setDisabled(!page.printProvider.layout.get("rotation"));
+ }
+ t.resumeEvents();
}
- t.resumeEvents();
},
/** private: method[destroy]
Modified: sandbox/ahocevar/playground/ux/Printing/ux/plugins/PrintProviderField.js
===================================================================
--- sandbox/ahocevar/playground/ux/Printing/ux/plugins/PrintProviderField.js 2009-12-27 07:13:21 UTC (rev 1618)
+++ sandbox/ahocevar/playground/ux/Printing/ux/plugins/PrintProviderField.js 2009-12-27 10:29:30 UTC (rev 1619)
@@ -21,6 +21,12 @@
*/
GeoExt.ux.plugins.PrintProviderField = Ext.extend(Ext.util.Observable, {
+ /** api: config[printProvider]
+ * ``GeoExt.ux.data.PrintProvider`` The print provider to use with this
+ * plugin's field. Not required if set on the owner container of the
+ * field.
+ */
+
/** private: property[target]
* ``Ext.form.Field`` This plugin's target field.
*/
@@ -56,17 +62,17 @@
* Handler for the target field's "render" event.
*/
onRender: function(field) {
- var printProvider = field.ownerCt.printProvider;
+ var printProvider = this.printProvider || field.ownerCt.printProvider;
if(field.store === printProvider.layouts) {
field.setValue(printProvider.layout.get(field.displayField));
printProvider.on({
- "layoutchange": this.onLayoutChange,
+ "layoutchange": this.onProviderChange,
scope: this
});
} else if(field.store === printProvider.dpis) {
field.setValue(printProvider.dpi.get(field.displayField));
printProvider.on({
- "dpichange": this.onDpiChange,
+ "dpichange": this.onProviderChange,
scope: this
});
} else {
@@ -81,8 +87,9 @@
* Handler for the target field's "valid" or "select" event.
*/
onFieldChange: function(field, record) {
- var printProvider = field.ownerCt.printProvider;
+ var printProvider = this.printProvider || field.ownerCt.printProvider;
var value = field.getValue();
+ this._updating = true;
if(record) {
switch(field.store) {
case printProvider.layouts:
@@ -94,40 +101,21 @@
} else {
printProvider.customParams[field.name] = value;
}
+ delete this._updating;
},
- /** private: method[onLayoutChange]
+ /** private: method[onProviderChange]
* :param printProvider: :class:`GeoExt.ux.data.PrintProvider`
- * :param layout: ``Ext.data.Record``
+ * :param rec: ``Ext.data.Record``
*
- * Handler function for the printProvider's layoutchange event
+ * Handler for the printProvider's dpichange and layoutchange event
*/
- onLayoutChange: function(printProvider, layout) {
- this.target.setValue(layout.get(this.target.displayField));
- },
-
- /** private: method[onDpiChange]
- * :param printProvider: :class:`GeoExt.ux.data.PrintProvider`
- * :param layout: ``Ext.data.Record``
- *
- * Handler function for the printProvider's dpichange event
- */
- onDpiChange: function(printProvider, dpi) {
- this.target.setValue(dpi.get(this.target.displayField));
- },
-
- /** private: method[destroy]
- */
- destroy: function() {
- var printProvider = this.target.ownerCt.printProvider;
- printProvider.un("layoutchange", this.onLayoutChange, this);
- printProvider.un("dpichange", this.onDpiChange, this);
- this.target.un("select", this.onFieldChange, this);
- this.target.un("valid", this.onFieldChange, this);
- this.target.un("render", this.onRender, this);
- GeoExt.ux.plugins.PrintProviderField.superclass.destroy.apply(this, arguments);
+ onProviderChange: function(printProvider, rec) {
+ if(!this._updating) {
+ this.target.setValue(rec.get(this.target.displayField));
+ }
}
-
+
});
/** api: ptype = gx_printproviderfield */
Modified: sandbox/ahocevar/playground/ux/Printing/ux/widgets/PrintMapPanel.js
===================================================================
--- sandbox/ahocevar/playground/ux/Printing/ux/widgets/PrintMapPanel.js 2009-12-27 07:13:21 UTC (rev 1618)
+++ sandbox/ahocevar/playground/ux/Printing/ux/widgets/PrintMapPanel.js 2009-12-27 10:29:30 UTC (rev 1619)
@@ -1,6 +1,6 @@
-Ext.namespace("GeoExt");
+Ext.namespace("GeoExt.ux");
-GeoExt.PrintMapPanel = Ext.extend(GeoExt.MapPanel, {
+GeoExt.ux.PrintMapPanel = Ext.extend(GeoExt.MapPanel, {
sourceMap: null,
@@ -9,20 +9,56 @@
printPage: null,
initComponent: function() {
- this.layers = this.sourceMap.layers;
- this.extent = this.sourceMap.getExtent();
+ var resolutions = [];
+ printProvider.scales.each(function(s){
+ var res = OpenLayers.Util.getResolutionFromScale(s.get("value"));
+ var zoom = this.sourceMap.getZoomForResolution(res)
+ resolutions.push(this.sourceMap.baseLayer.resolutions[zoom]);
+ }, this)
- GeoExt.PrintMapPanel.superclass.initComponent.call(this);
-
+ this.zoom = resolutions.indexOf(this.sourceMap.getResolution());
+ this.center = this.sourceMap.getCenter();
+
+ this.layers = [];
+ var layer;
+ Ext.each(this.sourceMap.layers, function(layer){
+ var clone = layer.clone();
+ layer.getVisibility() === true && this.layers.push(clone);
+ }, this);
+
+ this.map = {
+ resolutions: resolutions,
+ numZoomLevels: resolutions.length
+ };
+
this.printPage = new GeoExt.ux.data.PrintPage({
printProvider: this.printProvider
});
+
+ GeoExt.ux.PrintMapPanel.superclass.initComponent.call(this);
+
+ this.fitMap();
+ this.printProvider.on("layoutchange", this.fitMap, this);
+ },
+
+ fitMap: function() {
this.printPage.fitPage(this.sourceMap);
var extent = this.printPage.feature.geometry.getBounds();
- var resolution = this.map.getResolution();
+ var zoom = this.sourceMap.getZoomForExtent(extent);
+ var resolution = this.sourceMap.getResolutionForZoom(zoom);
this.setSize(
extent.getWidth() / resolution,
extent.getHeight() / resolution
);
+ },
+
+ print: function() {
+ this.printPage.fitPage(this.map, true);
+ this.printProvider.print(this.map, [this.printPage]);
+ },
+
+ beforeDestroy: function() {
+ this.printProvider.un("layoutchange", this.fitMap, this);
+ GeoExt.ux.PrintMapPanel.superclass.beforeDestroy.apply(this, arguments);
}
});
More information about the Commits
mailing list