import nl.idgis.giclient.gui.ContainerContent; import nl.idgis.giclient.io.XMLResponseListener; import nl.idgis.giclient.io.XMLResponse; import nl.idgis.giclient.util.XMLTools; import nl.idgis.giclient.gis.Layer; import nl.idgis.giclient.gis.GILayer; import nl.idgis.giclient.gis.Feature; import nl.idgis.giclient.gis.Column; import nl.idgis.giclient.geoma.Geometry; import nl.idgis.giclient.gui.mapviewer.MapViewer; import nl.idgis.giclient.gis.SelectableLayer; import nl.idgis.giclient.event.StateEventListener; import nl.idgis.giclient.framework.SinglePaneComponent; import nl.idgis.giclient.event.StateEvent; /** * @author copierrj */ class nl.idgis.giclient.gui.featureinfoviewer.FeatureInfoViewer extends ContainerContent implements XMLResponseListener,StateEventListener { private var count:Number = 0; private var dy:Number = 0; private var maxWidth:Number = 0; private var titleFormat:TextFormat; private var format:TextFormat; private var mapViewer:MapViewer; function onLoad() { titleFormat = new TextFormat(); titleFormat.font = "_sans"; titleFormat.bold = true; titleFormat.size = 12; format = new TextFormat(); format.font = "_sans"; format.size = 12; var featureInfoViewer:SinglePaneComponent = SinglePaneComponent(ruler.getGIClientConfig().getGIComponent("FeatureInfoViewer")); featureInfoViewer.addEventListener(this, StateEvent.CHANGE, "visible"); } function onStateEvent(event:StateEvent):Void { mapViewer["crossHair"].removeMovieClip(); } function setMapViewer(mapViewer:MapViewer):Void{ this.mapViewer = mapViewer; } function FeatureInfoViewer() { super(); } function clearViewer():Void { for(var i:Number = 0; i < count; i++) { TextField(this["item" + i]).removeTextField(); } count = 0; dy = 0; } function addGILayer(layer:GILayer, features:Array) : Void { var title:String = layer.getTitle(); var extent:Object = titleFormat.getTextExtent(title); var textFieldWidth:Number = extent["textFieldWidth"] + 2; var textFieldHeight:Number = extent["textFieldHeight"] + 2; if(textFieldWidth > maxWidth) { maxWidth = textFieldWidth; } var textField:TextField = this.createTextField("item" + count, this.getNextHighestDepth(), 0, dy, textFieldWidth, textFieldHeight); textField.autoSize = true; textField.setNewTextFormat(titleFormat); textField.text = title; count++; dy += textFieldHeight; for(var i:Number = 0; i < features.length; i++) { var feature:Feature = Feature(features[i]); var columns:Object = feature.getColumnValues(); for(var s:String in columns) { title = s; var column:Column = layer.getColumn(s); if(column != null) { var sLayer:SelectableLayer = SelectableLayer(layer); if(sLayer != null) { var columnItem:Object = sLayer.getColumnItem(column.getPath()); title = columnItem["title"]; if(title == null) { title = column.getAlias(); } } } if(columns[s] == null) { continue; } var value:String = columns[s].toString(); var text:String = title + ": " + value; extent = format.getTextExtent(text); textFieldWidth = extent["textFieldWidth"] + 2; textFieldHeight = extent["textFieldHeight"] + 2; if(textFieldWidth > maxWidth) { maxWidth = textFieldWidth; } textField = this.createTextField("item" + count, this.getNextHighestDepth(), 0, dy, textFieldWidth, textFieldHeight); textField.autoSize = true; textField.setNewTextFormat(format); textField.text = text; count++; dy += textFieldHeight; } } clear(); moveTo(0, 0); lineTo(maxWidth, dy); _parent.refreshPane(); } function onLoadXMLResponse(xmlResponse : XMLResponse) : Void { if(xmlResponse.firstChild.localName != "ServiceExceptionReport" && (xmlResponse.firstChild.childNodes.length == 1 && xmlResponse.firstChild.firstChild.localName != "boundedBy") || xmlResponse.firstChild.childNodes.length > 1) { var title:String = Layer(xmlResponse.getProperties()["layer"]).getTitle(); if (title == null) { title = Layer(xmlResponse.getProperties()["layer"]).getName(); } var lines:Array = new Array(); for(var i:Number = 0; i < xmlResponse.firstChild.childNodes.length; i++) { for(var j:Number = 0; j < xmlResponse.firstChild.childNodes[i].childNodes.length; j++) { for(var k:Number = 0; k < xmlResponse.firstChild.childNodes[i].childNodes[j].childNodes.length; k++) { var node:XMLNode = xmlResponse.firstChild.childNodes[i].childNodes[j].childNodes[k]; if(node.firstChild.nodeValue != null && node.namespaceURI != "http://www.opengis.net/gml") { var text:String = node.localName + ": " + node.firstChild.nodeValue; lines.push(text); } } } } if(lines.length > 0) { var extent:Object = titleFormat.getTextExtent(title); var textFieldWidth:Number = extent["textFieldWidth"] + 2; var textFieldHeight:Number = extent["textFieldHeight"] + 2; if(textFieldWidth > maxWidth) { maxWidth = textFieldWidth; } var textField:TextField = this.createTextField("item" + count, this.getNextHighestDepth(), 0, dy, textFieldWidth, textFieldHeight); textField.autoSize = true; textField.setNewTextFormat(titleFormat); textField.text = title; count++; dy += textFieldHeight; for(var i:Number = 0; i < lines.length; i++) { var text:String = lines[i]; extent = format.getTextExtent(text); textFieldWidth = extent["textFieldWidth"] + 2; textFieldHeight = extent["textFieldHeight"] + 2; if(textFieldWidth > maxWidth) { maxWidth = textFieldWidth; } textField = this.createTextField("item" + count, this.getNextHighestDepth(), 0, dy, textFieldWidth, textFieldHeight); textField.autoSize = true; textField.setNewTextFormat(format); textField.text = text; count++; dy += textFieldHeight; } } clear(); moveTo(0, 0); lineTo(maxWidth, dy); _parent.refreshPane(); } } }