/*---------------- 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.core.UIComponent; import mx.utils.Delegate; import nl.idgis.giclient.framework.buttons.ActionButton; import nl.idgis.giclient.framework.buttons.ActionButtonConfig; import nl.idgis.giclient.gui.ContainerContent; import nl.idgis.giclient.framework.buttons.GIButtonConfig; import nl.idgis.giclient.GIClientConfig; import nl.idgis.giclient.gis.ActiveLayerListener; import nl.idgis.giclient.gis.Column; import nl.idgis.giclient.gis.Feature; import nl.idgis.giclient.gis.FeatureGeometryListener; import nl.idgis.giclient.gis.GIS; import nl.idgis.giclient.gis.GILayer; import nl.idgis.giclient.gis.Layer; import nl.idgis.giclient.gis.SelectionListener; 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 nl.idgis.giclient.gui.propertiesviewer.PropertiesPane; import nl.idgis.giclient.gis.SelectableLayer; import nl.idgis.giclient.util.Strings; import nl.idgis.giclient.event.StateEventListener; import nl.idgis.giclient.event.StateEvent; class nl.idgis.giclient.gui.propertiesviewer.PropertiesViewer extends ContainerContent implements ActiveLayerListener, StateEventListener { private var textFormat:TextFormat = null; private var propertiesPanes:Array = null; private var itemHeight:Number = 24; private var buttonx=0; private var statusTextField:TextField = null; private var messageTextField:TextField = null; private var propertiesPanel:MovieClip = null; private var buttonsPanel:MovieClip = null; function onLoad():Void { ruler.getGIS().gisEventDispatcher.addActiveLayerListener(this); textFormat = new TextFormat(); textFormat.font = "_sans"; textFormat.size = 10; propertiesPanes = new Array(); var selectableLayers:Array = ruler.getGIS().getSelectableLayers(); for(var i:Number = 0; i < selectableLayers.length; i++) { SelectableLayer(selectableLayers[i]).addEventListener(this, "SelectableLayer", StateEvent.CHANGE, "editingMessage"); } drawAll(); } function remove():Void { ruler.getGIClientConfig().getGIButtonConfig("CancelEditsFlashButton").deflate(); ruler.getGIClientConfig().getGIButtonConfig("SaveEditsFlashButton").deflate(); } function onChangeActiveLayer():Void { setCurrentPropertiesPane(); } private function drawAll():Void { addStatusTextField(); addMessageTextField(); addPropertiesPanel(); addButtonsPanel(); setCurrentPropertiesPane(); _parent.refreshPane(); } private function addStatusTextField():Void { createTextField("statusTextField_mc", 0, 0, 0, frame.getWidth(), 20); statusTextField = this["statusTextField_mc"]; statusTextField.setNewTextFormat(textFormat); } private function addMessageTextField():Void { createTextField("messageTextField_mc", 1, 0, 0, frame.getWidth(), 20); messageTextField = this["messageTextField_mc"]; textFormat.color = 0xffffff; messageTextField.setNewTextFormat(textFormat); } function setStatusText(statusText:String):Void { statusTextField.text = statusText; } function setMessageText(messageText:String):Void { messageTextField.text = messageText; } private function addPropertiesPanel():Void { propertiesPanel = createEmptyMovieClip("propertiesPanel_mc", 2); var layers:Array = ruler.getGIS().getSelectableLayers(); for (var i:String in layers) { addPropertiesPane(SelectableLayer(layers[i])); } addPropertiesPane(ruler.getGIS().getUnboundFeatureLayer()); } private function addPropertiesPane(layer:SelectableLayer):Void { var depth:Number = propertiesPanel.getNextHighestDepth(); var initObject:Object = new Object(); initObject["_visible"] = false; initObject["layer"] = layer; initObject["width"] = frame.getWidth(); initObject["itemHeight"] = itemHeight; var propertiesPane:PropertiesPane = PropertiesPane(propertiesPanel.attachMovie("PropertiesPane", "propertiesPane" + depth + "_mc", depth, initObject)); propertiesPanes.push(propertiesPane); } private function setCurrentPropertiesPane():Void { var layer:Layer = ruler.getGIS().getActiveLayer(); if (layer == null && ruler.getGIS().getActiveMap().getUnboundFeatureLayer()) { layer = ruler.getGIS().getUnboundFeatureLayer(); } if (layer == null) { //setStatusText("Er is geen aangewezen kaartlaag."); setStatusText(Strings.getFile("Gui").getString("NoLayerSelected")); for (var i:String in propertiesPanes) { PropertiesPane(propertiesPanes[i])._visible = false; } buttonsPanel._visible = false; } else if (!(layer instanceof GILayer)) { setStatusText // ("Er is geen geoide kaartlaag aangewezen."); (Strings.getFile("Gui").getString("NoGeoideLayerSelected")); for (var i:String in propertiesPanes) { PropertiesPane(propertiesPanes[i])._visible = false; } buttonsPanel._visible = false; } else { var sLayer:SelectableLayer = SelectableLayer(layer); var paneHeight:Number = 0; setStatusText(""); var propertiesPane:PropertiesPane = null; for (var i:String in propertiesPanes) { propertiesPane = PropertiesPane(propertiesPanes[i]); if (propertiesPane["layer"] == layer) { //var paneHeight:Number = (giLayer.getColumns().length + 1) * itemHeight; paneHeight = (sLayer.columnItemCount() + 1) * itemHeight; if(sLayer.hasAnnotations()) { paneHeight += itemHeight * 3; } propertiesPane._visible = true; } else { propertiesPane._visible = false; } } if(sLayer.getWfsConnector() != null) { buttonsPanel._y = paneHeight; buttonsPanel._visible = true; var editingMessage:String = sLayer.getEditingMessage(); if(editingMessage != null) { setMessageText(editingMessage); buttonsPanel._y += itemHeight; messageTextField._y = paneHeight + 5; paneHeight += itemHeight; } else { setMessageText(""); } setSize(frame.getWidth(), paneHeight + 40); } else { buttonsPanel._visible = false; setSize(frame.getWidth(), paneHeight + 20); } } } private function setSize(width:Number, height:Number) { var stageHeight:Number = Stage.height; var maxHeight = stageHeight * 0.7; clear(); moveTo(0, 0); lineTo(width, height); if(height > maxHeight) { height = maxHeight; width += 10; frame.setVScroll(true); } else { frame.setScrolling(false); } frame.setSize(width, height); frame.refreshScrollContent(); } private function addButtonsPanel():Void { buttonsPanel = createEmptyMovieClip("buttonPanel_mc", 3); buttonsPanel._visible = false; var giClientConfig:GIClientConfig = ruler.getGIClientConfig(); var cancelButtonConfig:GIButtonConfig = giClientConfig.getGIButtonConfig("CancelEditsFlashButton"); var saveButtonConfig:GIButtonConfig = giClientConfig.getGIButtonConfig("SaveEditsFlashButton"); if(saveButtonConfig.giButton!=null){ saveButtonConfig.deflate(); } if(cancelButtonConfig.giButton!=null){ cancelButtonConfig.deflate(); } addActionButton(saveButtonConfig, buttonsPanel); addActionButton(cancelButtonConfig, buttonsPanel); } function addActionButton(giButtonConfig:GIButtonConfig, parent:MovieClip):ActionButton { var actionButtonConfig = ActionButtonConfig(giButtonConfig); var initObject:Object = {_x: buttonx, name: giButtonConfig.getName(), size: 13, toolTipText: giButtonConfig.getToolTipText(), baseURL: giButtonConfig.getBaseURL(), iconURL: giButtonConfig.getIconURL(), _giButtonLoadListener: parent}; var actionButton:ActionButton = ActionButton(actionButtonConfig.inflate(parent, parent.getNextHighestDepth(),null, initObject)); buttonx += 70; return actionButton; } function onStateEvent(stateEvent : StateEvent) : Void { if(stateEvent.getSource() == ruler.getGIS().getActiveLayer()) { this.setCurrentPropertiesPane(); } } }