/*---------------- FILE HEADER --------------------------------------- This file is part of Geoide. Copyright (C) 2005-2006 by: IDgis B.V. http://www.idgis.nl This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Contact: Herman Assink IDgis bv P.O. Box 15 7450 AA Holten The Netherlands E-Mail: herman.assink@idgis.nl * @version 1.4.0 * @author IDgis team * ------------------------------------------------------------------------*/ import nl.idgis.giclient.gui.ContainerContent; import nl.idgis.giclient.gis.Map; import nl.idgis.giclient.framework.IDComboBox; import mx.utils.Delegate; import nl.idgis.giclient.gis.PrintTemplate; import nl.idgis.giclient.print.PrintRequest; import nl.idgis.giclient.print.PrintRequestListener; import mx.controls.TextInput; import mx.controls.DataGrid; import nl.idgis.giclient.framework.ModalFrameFactory; import mx.controls.RadioButton; import nl.idgis.giclient.gis.Layer; import nl.idgis.giclient.gis.ZoomListener; import mx.controls.RadioButtonGroup; import nl.idgis.giclient.util.Strings; /** * @author velsll */ class nl.idgis.giclient.print.PrintRequestViewer extends ContainerContent implements PrintRequestListener, ZoomListener { var printRequest:PrintRequest = null; private var map:Map; private var textFormat:TextFormat; private var templatePicker:IDComboBox; private var selectedTemplate:PrintTemplate = null; private var scaleLabel:TextField; private var scaleField:TextInput = null; private var titleField:TextInput = null; private var noteField:TextInput = null; private var mailField:TextInput = null; private var layerGrid:DataGrid = null; private var zoomVisibleLayers:Array; private var bboxOrScale:RadioButtonGroup = null; private var useExtentBtn:RadioButton = null; private var useScale:RadioButton = null; private var rbListener:Object = new Object(); function onLoad() { contentWidth = 470; contentHeight = 390; frame.setSize(contentWidth,contentHeight); map = ruler.getGIS().getActiveMap(); printRequest = new PrintRequest(ruler, map.getWebMapPrintServiceEmail()); printRequest.addListener(this); ruler.getGIS().gisEventDispatcher.addZoomListener(this); zoomVisibleLayers = new Array(); var layers:Array = ruler.getGIS().getZoomVisibleLayers(); for (var i:Number = 0; i < layers.length; i++) { var name:String = layers[i].getTitle(); zoomVisibleLayers.push([{label:name,data:layers[i]},true]); } textFormat = new TextFormat(); textFormat.font = "_sans"; paint(); } function getSelectedTemplate():PrintTemplate{ return selectedTemplate; } private function paint() : Void { contentWidth = frame.width; contentHeight = frame.height; createTextField("templateLabel", 1, 0, 0, 100, 20, {enabled:false}); this["templateLabel"].setNewTextFormat(textFormat); this["templateLabel"].text = // "Template:"; (Strings.getFile("Print").getString("Template")); templatePicker = IDComboBox(attachMovie("IDComboBox", "TemplatePicker", 2, {_x: 100, _y: 0, _width:350})); templatePicker.textField.setNewTextFormat(textFormat); templatePicker.addEventListener("select", Delegate.create(this, onSelectTemplate)); var templateProvider:Array = new Array(); templateProvider.push({label:"-- Selecteer een template --",value:null}); var templates:Array = map.getPrintTemplates(); for (var i:Number = 0; i < templates.length; i++) { templateProvider.push({label:templates[i].getName(),value:templates[i]}); } templatePicker.dataProvider = templateProvider; templatePicker.resize(); if(templatePicker.getWidth() > width){ frame.setSize(templatePicker.getWidth(), contentHeight); } createTextField("mapExtentLabel", 3, 0, 30, 100, 20); this["mapExtentLabel"].setNewTextFormat(textFormat); this["mapExtentLabel"].text = // "Kaartgebied:"; (Strings.getFile("Print").getString("Area")); useExtentBtn = RadioButton(attachMovie("RadioButton", "useExtentBtn", 30, {_x:100, _y:30})); useExtentBtn.label = // "Gebruik zichtbare gebied"; (Strings.getFile("Print").getString("UseVisibleArea")); useExtentBtn.data = false; useExtentBtn.groupName = "bboxOrScale"; useExtentBtn.setSize(200, useExtentBtn.height); useExtentBtn.selected = true; useScale = RadioButton(attachMovie("RadioButton", "useScale", 31, {_x:100, _y:50})); useScale.label = "Gebruik centrum en schaal:"; (Strings.getFile("Print").getString("UseCentreScale")); useScale.data = true; useScale.setSize(200, useScale.height); useScale.groupName = "bboxOrScale"; bboxOrScale.addEventListener("click", Delegate.create(this, onClickBBoxOrScale)); scaleField = TextInput(attachMovie("TextInput", "Scale",32,{_width:175,_x:275,_y:50})); scaleField.restrict = "0-9"; scaleField.enabled = false; scaleField.text = "1"; //default value >=1 scaleField.addEventListener("change", Delegate.create(this, onChangeScale)); createTextField("titleLabel",5,0,80,120,20, {enabled:false}); this["titleLabel"].setNewTextFormat(textFormat); this["titleLabel"].text = // "Kaart titel:"; (Strings.getFile("Print").getString("MapTitle")); titleField = TextInput(attachMovie("TextInput", "title",6,{_width:350,_x:100,_y:77})); titleField.addEventListener("change", Delegate.create(this, onChangeTitle)); createTextField("legendLabel",7,0,100,100,20, {enabled:false}); this["legendLabel"].setNewTextFormat(textFormat); this["legendLabel"].text = "Toon legenda:"; (Strings.getFile("Print").getString("ShowLegend")); createObject("CheckBox", "checkLegend", 8,{_x:100, _y:103}); this["checkLegend"].addEventListener("click", Delegate.create(this, onClickLegend)); createTextField("scaleBarLabel",9,0,120,100,20, {enabled:false}); this["scaleBarLabel"].setNewTextFormat(textFormat); this["scaleBarLabel"].text = // "Toon schaal:"; (Strings.getFile("Print").getString("ShowScale")); createObject("CheckBox", "checkScaleBar", 10,{_x:100, _y:123}); this["checkScaleBar"].addEventListener("click", Delegate.create(this, onClickScaleBar)); createTextField("noteLabel",11,0,140,210,20, {enabled:false}); this["noteLabel"].setNewTextFormat(textFormat); this["noteLabel"].text = // "Notitie:"; (Strings.getFile("Print").getString("Note")); noteField = TextInput(attachMovie("TextInput", "note",12,{_width:350,_x:100,_y:137})); noteField.addEventListener("change", Delegate.create(this, onChangeNote)); createTextField("mailLabel",13,0,160,100,20, {enabled:false}); this["mailLabel"].setNewTextFormat(textFormat); this["mailLabel"].text = // "e-mail adres:"; (Strings.getFile("Print").getString("EmailAddress")); mailField = TextInput(attachMovie("TextInput", "mail",14,{_width:350,_x:100,_y:157})); mailField.addEventListener("change", Delegate.create(this, onChangeMail)); createTextField("layerLabel",15,0,180,100,20, {enabled:false}); this["layerLabel"].setNewTextFormat(textFormat); this["layerLabel"].text = "Kaartlagen:"; (Strings.getFile("Print").getString("MapLayers")); attachMovie("Button", "layerPickerButton", 16, {_width:140,_height:20,_x:310, _y:182 , label: "Selecteer ..."}); this["layerPickerButton"].addEventListener("click", Delegate.create(this, onClickLayerPickerButton)); layerGrid = DataGrid(this.attachMovie("DataGrid", "layers", 19, {_x:100,_y: 182,_visible:true})); layerGrid.setSize(200,155); resetLayerGrid(); attachMovie("Button", "printButton", 20, {_width:205,_x:100, _y:355 , label: "Printen"}); this["printButton"].addEventListener("click", Delegate.create(this, onClickPrintButton)); initFields(); _parent.refreshPane(); } private function onClickBBoxOrScale(evt_obj:Object){ if (evt_obj.target.selection == useScale) { printRequest.setUseScale(true); scaleField.enabled = true; } else { printRequest.setUseScale(false); scaleField.enabled = false; } } private function onChangeScale(eventObject:Object):Void{ if(eventObject.target.text == null || eventObject.target.text == ""){ eventObject.target.text = "1"; //scale must be >= 1 } printRequest.setScale(Number(eventObject.target.text)); } private function initFields(){ titleField.text = printRequest.getTitle(); this["checkLegend"].selected = printRequest.getLegend(); this["checkScaleBar"].selected = printRequest.getScaleBar(); noteField.text = printRequest.getNote(); mailField.text = printRequest.getMailAdress(); templatePicker.setSelectedIndex(1); //set default to first selectedTemplate = map.getPrintTemplates()[0]; printRequest.setTemplate(selectedTemplate); } private function onSelectTemplate():Void{ selectedTemplate = this.templatePicker.selectedItem.value; if(this.templatePicker.selectedIndex!=0){ printRequest.setTemplate(selectedTemplate); } else { printRequest.setTemplate(null); } } private function onChangeTitle():Void{ printRequest.setTitle(titleField.text); } private function onClickLegend():Void{ printRequest.setLegend(this["checkLegend"].selected); } private function onClickScaleBar():Void{ printRequest.setScaleBar(this["checkScaleBar"].selected); } private function onChangeNote():Void{ printRequest.setNote(noteField.text); } private function onChangeMail():Void{ printRequest.setMailAdress(mailField.text); } private function onClickLayerPickerButton():Void{ openValuePicker(); } private function onClickPrintButton():Void{ printRequest.sendRequest(); } private function resetLayerGrid(){ layerGrid.removeAll(); var printLayers:Array = new Array(); for (var i:Number = 0; i < zoomVisibleLayers.length; i++) { if (Layer(zoomVisibleLayers[i][0].data).isVisible()){ printLayers.push(zoomVisibleLayers[i][0].data); var item:Object = {gekozen_lagen:zoomVisibleLayers[i][0].label}; layerGrid.addItem(item); } } printRequest.setLayers(printLayers); } private function openValuePicker():Void{ var scrl:Boolean = false; var initObject:Object = new Object(); var paneHeight:Number = zoomVisibleLayers.length * 20 + 80; if (paneHeight > 600){ paneHeight = 600; scrl = true; } initObject = {scrollContent: "lib://ValuePicker" , paneTitle: "Kaartlagen kiezer", resizable: false, hasShader: false, doorzichtig:false, _x:300, _y:300, isScrolling:scrl}; initObject["contentProperties"] = new Object(); initObject["contentProperties"]["returnObject"] = this; var selectLayers:Array = new Array(); var printLayers:Array = printRequest.getLayers(); for (var i:Number = 0; i < zoomVisibleLayers.length; i++) { var checked:Boolean = false; for (var j:Number = 0; j < printLayers.length; j++) { if (Layer(zoomVisibleLayers[i][0].data) == Layer(printLayers[j])) { checked = true; break; } } selectLayers.push([{label:zoomVisibleLayers[i][0].label,data:zoomVisibleLayers[i][0].data},checked]); } initObject["contentProperties"]["values"] = selectLayers; ModalFrameFactory.makeFrame(initObject,300,paneHeight); } function setValues(values:Array){ ModalFrameFactory.removeFrame(); var printLayers:Array = new Array(); layerGrid.removeAll(); for (var i:Number = 0; i < values.length; i++) { if (values[i][1]){ printLayers.push(values[i][0].data); var item:Object = {gekozen_lagen:values[i][0].label}; layerGrid.addItem(item); } } printRequest.setLayers(printLayers); } function closeValuePicker():Void{ ModalFrameFactory.removeFrame(); } function onChangePrintRequest() : Void { zoomVisibleLayers = new Array(); var layers:Array = ruler.getGIS().getZoomVisibleLayersForScale(printRequest.getScale());//)); for (var i:Number = 0; i < layers.length; i++) { var name:String = layers[i].getTitle(); zoomVisibleLayers.push([{label:name,data:layers[i]},true]); } resetLayerGrid(); scaleField.text = Math.round(printRequest.getScale()).toString(); } function onZoom():Void { printRequest.recalculateMapExtent(); } }