/*---------------- 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.TextInput; import mx.utils.Delegate; import mx.core.UIObject; import nl.idgis.giclient.gui.ContainerContent; import nl.idgis.giclient.gis.SelectionListener; import nl.idgis.giclient.gis.Layer; import nl.idgis.giclient.gis.Column; import nl.idgis.giclient.gis.ActiveLayerListener; import nl.idgis.giclient.gis.EditListener; import nl.idgis.giclient.gis.Feature; import nl.idgis.giclient.GIClientConfig; import nl.idgis.giclient.framework.buttons.GIButtonConfig; import nl.idgis.giclient.framework.buttons.ActionButton; import nl.idgis.giclient.framework.buttons.ActionButtonConfig; import nl.idgis.giclient.gis.GIS; import nl.idgis.giclient.framework.IDComboBox; import nl.idgis.giclient.synch.SynchSocket; import nl.idgis.giclient.webserviceconnector.FeatureCollection; import nl.idgis.giclient.webserviceconnector.FeatureMember; import mx.core.UIComponent; import nl.idgis.giclient.Ruler; import nl.idgis.giclient.gui.propertiesviewer.PropertiesViewer; import nl.idgis.giclient.gis.SelectableLayer; import nl.idgis.giclient.event.StateEvent; import nl.idgis.giclient.event.StateEventListener; import nl.idgis.giclient.util.Strings; import mx.controls.TextArea; class nl.idgis.giclient.gui.propertiesviewer.PropertiesPane extends MovieClip implements SelectionListener, StateEventListener { private var layer:SelectableLayer = null; // Set by init object. private var width:Number = -1; // Set by init object. private var itemHeight:Number = -1; // Set by init object. private var textFormat:TextFormat = null; private var nullValueText:String = ""; private var idTextField:TextField = null; private var comboBoxes:Number = 0; function onLoad():Void { textFormat = new TextFormat(); textFormat.font = "_sans"; textFormat.size = 10; layer.layerEventDispatcher.addSelectionListener(this); layer.addEventListener(this, "SelectableLayer", StateEvent.CHANGE, "editingStatus"); drawAll(); } function onChangeLayerSelectedFeatures(layer:Layer, selected:Boolean, subSelected:Boolean, current:Boolean):Void{ setItemsEditable(); setItemsValue(); } function onStateEvent(stateEvent:StateEvent):Void { var sourceClassName:String = stateEvent.getSourceClassName(); var actionType:Number = stateEvent.getActionType(); var propertyName:String = stateEvent.getPropertyName(); if (sourceClassName + "_" + actionType + "_" + propertyName == "SelectableLayer_" + StateEvent.CHANGE + "_editingStatus") { setItemsEditable(); setItemsValue(); } } private function drawAll():Void { var columns:Array = layer.getContextColumns(); var column:Column = null; var textField:TextField = null; var initObject:Object = null; var item:UIComponent = null; var y:Number = itemHeight; this._alpha = 50; createTextField("idTextField_mc", this.getNextHighestDepth(), 0, 0, width, itemHeight); idTextField = this["idTextField_mc"]; idTextField.setNewTextFormat(textFormat); this.comboBoxes = 0; var annoColumn:String = layer.getAnnotationColumn(); var annoLabel:String = null; for (var i:Number = 0; i < columns.length; i++) { column = Column(columns[i]); var columnItem:Object = layer.getColumnItem(column.getPath()); if (columnItem != null && !(annoColumn != null && annoColumn == column.getPath())) { createTextField("textField" + i + "_mc", this.getNextHighestDepth(), 0, y, 70, 20); textField = this["textField" + i + "_mc"]; textField.setNewTextFormat(textFormat); textField.text = columnItem["title"]; if(textField.text != null) { textField.text += ":"; } else { textField.text = column.getAlias() + ":"; } if(column.isMandatory()) { textField.text += "*"; } initObject = new Object(); initObject["_x"] = 75; initObject["_y"] = y; initObject["column"] = column; if(columnItem["featureTypeName"] != null) { item = UIComponent(attachMovie("IDComboBox", "comboBox" + i + "_mc", this.getNextHighestDepth(), initObject)); item.setEnabled(false); item.setSize(width - 85, 22); layer.wfsConnector.performGetFeature(columnItem["featureTypeName"], new SynchSocket(this, onLoadFeatureCollection, {comboBox: item, columnItem: columnItem})); item.addEventListener("select", Delegate.create(this, onComboBoxSelect)); this.comboBoxes++; } else { item = UIComponent(attachMovie("TextInput", "textInput" + i + "_mc", this.getNextHighestDepth(), initObject)); item.setSize(width - 85, 20); item.setEnabled(false); item.addEventListener("change", Delegate.create(this, onTextInputChange)); } y += itemHeight; } else if (annoColumn != null && annoColumn == column.getPath()) { annoLabel = columnItem["title"]; } } if(layer.hasAnnotations()) { createTextField("annotation_mc", this.getNextHighestDepth(), 0, y, 70, 20); textField = this["annotation_mc"]; textField.setNewTextFormat(textFormat); if (annoLabel == null) { annoLabel = "Annotation"; } textField.text = annoLabel + ":"; initObject = new Object(); initObject["_x"] = 75; initObject["_y"] = y; initObject["annotation"] = true; item = UIComponent(attachMovie("TextArea", "annotation_area_mc", this.getNextHighestDepth(), initObject)); item.setSize(width - 85, 75); item.setEnabled(false); item.addEventListener("change", Delegate.create(this, onTextInputChange)); } if(this.comboBoxes == 0) { setItemsEditable(); setItemsValue(); } } function onLoadFeatureCollection(synchObject:Object):Void { var featureMembers:Array = FeatureCollection(synchObject["featureCollection"]).getFeatureMembers(); var featureMember:FeatureMember = null; var comboBox:IDComboBox = IDComboBox(synchObject["comboBox"]); var columnItem:Object = synchObject["columnItem"]; var columnValue:String = layer.getCurrentFeature().getColumnValue(comboBox["column"].getPath()); for (var i:Number = 0; i < featureMembers.length; i++) { featureMember = FeatureMember(featureMembers[i]); comboBox.addItem({label: featureMember.getValue(columnItem["label"]), data: featureMember.getValue(columnItem["data"])}); } var feature:Feature = layer.getCurrentFeature(); if(feature != null) { if(feature.getColumnValue(comboBox["column"].getPath()) == null) { feature.setColumnValue(comboBox["column"].getPath(), comboBox.selectedItem.data); } } this.comboBoxes--; if(this.comboBoxes == 0) { setItemsEditable(); setItemsValue(); } } function onComboBoxSelect(eventObject:Object):Void { var columnName:String = Column(eventObject.target["column"]).getPath(); var columnValue:String = eventObject.target.selectedItem.data; layer.getCurrentFeature().setColumnValue(columnName, columnValue); } function onTextInputChange(eventObject:Object):Void { var columnValue:String = eventObject.target.text; if (columnValue == nullValueText) { columnValue = null; } if(eventObject.target["annotation"]) { layer.getCurrentFeature().setAnnotation(columnValue == null ? "" : columnValue); } else { var columnName:String = Column(eventObject.target["column"]).getPath(); layer.getCurrentFeature().setColumnValue(columnName, columnValue); } } private function setItemsEditable():Void { var editing:Boolean = layer.isEditing() && layer.getCurrentFeature() != null && layer.getCurrentFeature().isEditable(); if (editing) { this._alpha = 100; } else { this._alpha = 50; } var columns:Array = layer.getContextColumns(); for (var i:Number = 0; i < columns.length; i++) { if (this["comboBox" + i + "_mc"] != null) { var comboBox:IDComboBox = IDComboBox(this["comboBox" + i + "_mc"]); comboBox.setEnabled(editing); } else { var textInput:UIComponent = UIComponent(this["textInput" + i + "_mc"]); if(textInput != null) { textInput.setEnabled(editing); } //trace("ownerProp = " + layer.getObjectOwnerProperty() + " column = " + columns[i].getPath()); if (layer.getObjectOwnerProperty() == columns[i].getPath()) { textInput.setEnabled(false); } } } var annotation:UIComponent = UIComponent(this["annotation_area_mc"]); if(annotation != null) { annotation.setEnabled(editing); } } private function setItemsValue():Void { var feature:Feature = layer.getCurrentFeature(); if (feature == null) { idTextField.text = // "Er is geen aangewezen object."; (Strings.getFile("Gui").getString("NoDesignatedObject")); } else { idTextField.text = layer.getTitle() + ": " + feature.getID(); } var columns:Array = layer.getContextColumns(); var column:Column = null; for (var i:Number = 0; i < columns.length; i++) { column = Column(columns[i]); if (feature == null) { setItemValue(i, null); } else { setItemValue(i, feature.getColumnValue(column.getPath())); } } var annotation:TextArea = TextArea(this["annotation_area_mc"]); if(annotation != null && feature != null) { annotation.text = feature.getAnnotation(); } } private function setItemValue(i:Number, propertyValue:String):Void { if (this["comboBox" + i + "_mc"] != null) { var comboBox:IDComboBox = IDComboBox(this["comboBox" + i + "_mc"]); if(propertyValue != null) { for (var j:Number = 0; j < comboBox.dataProvider.length; j++) { if (comboBox.dataProvider[j].data == propertyValue) { comboBox.setSelectedIndex(j); break; } } } else { comboBox.setSelectedIndex(0); var currentFeature:Feature = layer.getCurrentFeature(); if(currentFeature != null) { layer.getCurrentFeature().setColumnValue( Column(layer.getContextColumns()[i]).getPath(), comboBox.getSelectedItem().data); } } } else { var textInput:TextInput = TextInput(this["textInput" + i + "_mc"]); if (propertyValue == null) { textInput.text = nullValueText; } else { textInput.text = propertyValue; } } } }