import nl.idgis.giclient.gui.ContainerContent; import mx.controls.Button; import mx.utils.Delegate; import nl.idgis.giclient.util.Strings; import nl.idgis.giclient.gis.GIS; import nl.idgis.giclient.webserviceconnector.wmsconnector.WMSConnector; import nl.idgis.giclient.webserviceconnector.wmsconnector.WMSConnectorListener; import nl.idgis.giclient.gis.WMLayer; import nl.idgis.giclient.gis.Layer; import nl.idgis.giclient.event.StateEvent; import mx.controls.TextInput; import nl.idgis.giclient.framework.IDComboBox; /** * @author copierrj */ class nl.idgis.giclient.gui.context.AddLayer extends ContainerContent implements WMSConnectorListener { private var connector:WMSConnector; private var serviceInput:TextInput; private var addButton:Button; private var layersButton:Button; private var layerInput:IDComboBox; private var layers:Array; private var gis:GIS; private var initService:String = null; private var loaded:Boolean = false; public function setService(service:String): Void { if(loaded) { serviceInput.setText(service); layerInput.dataProvider = null; layerInput.enabled = false; addButton.enabled = false; layersButton.enabled = true; } else { initService = service; } } private function fetchLayers():Void { connector = WMSConnector.getInstance(serviceInput.getText(), serviceInput.getText()); WMSConnector.loadCapabilities(this, gis.getTransformConnector()); } private function changeService():Void { layerInput.dataProvider = null; layerInput.enabled = false; addButton.enabled = false; layersButton.enabled = true; } private function addLayer():Void { var selectedLayer:Object = layerInput.selectedItem; var layer:Layer = new WMLayer(connector, new Array(), selectedLayer["name"], selectedLayer["title"], true, false, new Array(), null, false, ""); layer.setLayers(new Array()); layer.setSRS(gis.getCurrentSrs()); gis.getActiveMap().addLayer(layer); ruler["stateEventDispatcher"].dispatchEvent(new StateEvent(this, "Ruler", StateEvent.CHANGE, "context")); removeUsedLayers(); layerInput.selectedIndex = 0; } function onLoad() : Void { gis = ruler.getGIS(); var format:TextFormat = new TextFormat(); format.font = "_sans"; format.size = 12; var x:Number = 20; var y:Number = 20; lineTo(x, y); var serviceLabel:TextField = createTextField("serviceLabel", getNextHighestDepth(), x, y, 100, 25); serviceLabel.autoSize = "left"; serviceLabel.setNewTextFormat(format); serviceLabel.text = "Service:"; serviceInput = TextInput(attachMovie("TextInput", "serviceInput", getNextHighestDepth(), {_x: x + 100, _y: y, _width: 300})); serviceInput.addEventListener("change", Delegate.create(this, changeService)); layersButton = Button(attachMovie("Button", "layersButton", getNextHighestDepth(), {_visible: true, _width: 125, _x: x + 410, _y: y, label: Strings.getFile("Geoide").getString("FetchLayers")})); layersButton.addEventListener("click", Delegate.create(this, fetchLayers)); y += 25; var layerLabel:TextField = createTextField("layerLabel", getNextHighestDepth(), x, y, 100, 25); layerLabel.autoSize = "left"; layerLabel.setNewTextFormat(format); layerLabel.text = "Layer:"; layerInput = IDComboBox(attachMovie("IDComboBox", "layerInput", getNextHighestDepth(), {_x: x + 100, _y: y, _width: 300})); layerInput.enabled = false; layerInput.editable = false; layerInput.labelFunction = function(item:Object) { var depth:Number = item["depth"]; var title:String = item["title"]; while(depth != 0) { title = " " + title; depth --; } return title; }; addButton = Button(attachMovie("Button", "addButton", getNextHighestDepth(), {_visible: true, _width: 125, _x: x + 410, _y: y, label: Strings.getFile("Geoide").getString("AddLayer")})); addButton.enabled = false; addButton.addEventListener("click", Delegate.create(this, addLayer)); loaded = true; if(initService != null) { setService(initService); initService = null; } _parent.refreshPane(); } function onWMSReady() : Void { layers = connector.getLayers(); removeUsedLayers(); layerInput.enabled = true; layerInput.dataProvider = layers; layerInput.selectedIndex = 0; addButton.enabled = true; layersButton.enabled = false; } function removeUsedLayers() : Void { var gis:GIS = ruler.getGIS(); var allLayers:Array = gis.getLayers(); for(var i:Number = 0; i < allLayers.length; i++) { var layer:Layer = Layer(allLayers[i]); if(layer.getMapConnector() == connector) { var name:String = layer.getName(); for(var j:Number = 0; j < layers.length; j++) { if(layers[j]["name"] == name) { layers.splice(j, 1); j--; } } } } } function onWMSError(connector : WMSConnector) : Void { trace("error"); } }