/*---------------- 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 mx.controls.gridclasses.DataGridColumn; import mx.controls.DataGrid; import mx.data.binding.DataType; import nl.idgis.giclient.util.ArrayTools; import nl.idgis.giclient.gui.ContainerContent; import nl.idgis.giclient.gis.AttrInfoListener; import nl.idgis.giclient.gis.Column; import nl.idgis.giclient.gis.SelectableLayer; import nl.idgis.giclient.gis.GILayer; class nl.idgis.giclient.gui.attributeviewer.AttributeViewer extends ContainerContent implements AttrInfoListener { var gridWidth:Number = 400 - 5; var gridHeight:Number = 200 - 5; var layer:SelectableLayer = null; var index:Number = 0; var attrViewerFeatureIds:Array = new Array(); var newAttrInfoFeatureIDs:Array = new Array(); var initObject:Object = null; var dataGrid:DataGrid = null; function onLoad():Void { layer = _parent._parent.attrInfoLayer; layer.layerEventDispatcher.addAttrInfoListener(this); drawAll(); _parent.refreshPane(); setNewAttrInfoFeatureIDs(); } function onUnload():Void { layer.layerEventDispatcher.removeAttrInfoListener(this); layer.clearAttrInfoFeaturesIDs(); } private function drawAll():Void { attachMovie("XMLConnector", "xmlConnector", 2); // Data components can NOT be attached with createClassObject. this["xmlConnector"].ignoreWhite = true; this["xmlConnector"].addEventListener("result", onXMLConnected); attachMovie("DataSet", "dataSet", 4); dataGrid = DataGrid(attachMovie("DataGrid", "dataGrid", 5)); dataGrid.setSize(gridWidth, gridHeight); dataGrid.resizableColumns = true; dataGrid.multipleSelection = false; dataGrid.editable = true; //--> AttributeEditViewer //this["dataGrid"].addEventListener("cellEdit", onEdit);// --> AttributeEditViewer //dataGrid.hScrollPolicy = "off"; //dataGrid.vScrollPolicy = "off"; dataGrid.showHeaders = true; drawDataGridColumns(); } function onChangeLayerAttrInfoFeatures(layer:SelectableLayer):Void { if (this.layer == layer) { setNewAttrInfoFeatureIDs(); } } function drawDataGridColumns():Void { var columns:Array = layer.getAttrInfoColumns(); var column:Column = null; var dataGridColumn:DataGridColumn = null; var textFormat:TextFormat = new TextFormat(); var columnWidth:Number = 0; var columnWidthString:String = ""; for (var i:Number=0; i < columns.length;i++) { column = columns[i]; dataGridColumn = new DataGridColumn(column.getAlias()); dataGridColumn.editable = false; dataGrid.addColumn(dataGridColumn); if (column.getType() == "Boolean") { dataGridColumn.cellRenderer = "CheckCellRenderer"; // Boolean values are shown as checkboxes. } else if (column.getType() == "URL") { dataGridColumn.cellRenderer = "URLCellRenderer"; } else { dataGridColumn.cellRenderer = "DefaultCellRenderer"; } columnWidth = column.getWidth(); if(columnWidth ==0){ columnWidth = 10; } columnWidthString = ""; for (var j:Number = 0; j < columnWidth; j++) { columnWidthString += "W"; } textFormat.font = "_sans"; // should get this info from cell renderer dataGridColumn.width = textFormat.getTextExtent(columnWidthString).width; } } function setNewAttrInfoFeatureIDs():Void { var attrInfoFeatureIDs:Array = layer.getAttrInfoFeatureIDs(); // if attrInfoFeatureIDs.length == 0 { clear all } newAttrInfoFeatureIDs = ArrayTools.getLeftOver(attrInfoFeatureIDs, attrViewerFeatureIds); if (newAttrInfoFeatureIDs.length > 0) { //var url:String = ruler.getGIClientConfig().getServerURLPrefix(); var url:String = GILayer(layer).getServerURL(); url += "request=GetFeature&layer=" + layer.getName(); url += "&id="+newAttrInfoFeatureIDs[0]; url += "&srs=" + layer.getSRS(); for (var i:Number = 1; i < newAttrInfoFeatureIDs.length; i++) { url += "," + newAttrInfoFeatureIDs[i]; } this["xmlConnector"].direction = "receive"; this["xmlConnector"].URL = url; this["xmlConnector"].trigger(); } else { setDataGridSelectedIndex(); } } function onXMLConnected():Void { _parent.fillDataGrid(); } function fillDataGrid():Void { var dataSetItem:Array = null; var columns:Array = layer.getAttrInfoColumns(); var column:Column = null; var dataType:DataType = null; var field:Object = null; var url:String = ""; for (var i:Number = 0; i < newAttrInfoFeatureIDs.length; i++) { dataSetItem = new Array(); dataSetItem["featureID"] = newAttrInfoFeatureIDs[i]; for (var j:Number = 0; j < columns.length; j++) { column = columns[j]; dataType = this["xmlConnector"].getField("results", "/GetFeature/" + layer.getName() + "[@fid='" + newAttrInfoFeatureIDs[i] + "']/" + column.getPath()); if (dataType.getAsString().substr(-2, 2) == "/>") { field = new String(""); } else if (column.getType() == "Number") { field = dataType.getAsNumber(); } else if (column.getType() == "Boolean") { field = dataType.getAsBoolean(); } else if (column.getType() == "URL") { url = ""; //if (column.getURLPrefix().indexOf(":") == -1) { // Assumes that an occurence of ":" means an absolute URL. //url += ruler.getGIClientConfig().getServerPath(); // url += layer.getServerURL(); //} TODO relative paths url += column.getURLPrefix() + dataType.getAsString(); field = "" + dataType.getAsString() + ""; } else { field = dataType.getAsString(); } dataSetItem[column.getAlias()] = field; } } attrViewerFeatureIds = ArrayTools.concat(attrViewerFeatureIds, newAttrInfoFeatureIDs); newAttrInfoFeatureIDs = new Array(); this["dataSet"].addItem(dataSetItem); // Case sensitive dataSetItem! dataGrid.dataProvider = this["dataSet"].items; setDataGridSelectedIndex(); } private function setDataGridSelectedIndex():Void { var selectedAttrInfoFeatureID:Number = layer.getSelectedAttrInfoFeatureIDs()[0]; var dataSetItems:Array = this["dataGrid"].dataProvider; var dataSetItem:Array = null; for (var i:Number = 0; i < dataSetItems.length; i++) { dataSetItem = dataSetItems[i]; if (dataSetItem["featureID"] == selectedAttrInfoFeatureID) { this["dataGrid"].selectedIndex = i; return; } } } }