/*---------------- 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 nl.idgis.giclient.geoma.Envelope;
import nl.idgis.giclient.gis.CentreScale;
import nl.idgis.giclient.gis.Coordinate;
import nl.idgis.giclient.gis.Feature;
import nl.idgis.giclient.gis.Layer;
import nl.idgis.giclient.gis.PopUpInfoFeatureListener;
import nl.idgis.giclient.gui.htmlviewer.HtmlViewer;
import nl.idgis.giclient.gui.mapviewer.MapViewer;
import nl.idgis.giclient.util.SynchListener;
import nl.idgis.giclient.util.URLTools;
import nl.idgis.giclient.StringTools;
import nl.idgis.giclient.gis.Map;
import nl.idgis.giclient.gis.SelectableLayer;
import nl.idgis.giclient.util.Strings;
import nl.idgis.giclient.event.StateEventListener;
import nl.idgis.giclient.event.StateEvent;
import nl.idgis.giclient.framework.SinglePaneComponent;
class nl.idgis.giclient.gui.popupviewer.InfoPopUpViewer extends HtmlViewer implements PopUpInfoFeatureListener,SynchListener,StateEventListener {
private var mapViewer:MapViewer;//set by initObject
private var infoFlag:MovieClip = null;
private var flagDepth:Number;
private var waving:Boolean = true;
private var movieClipLoader:MovieClipLoader = null;
private var infoFeature:Feature;
private var infoFlagLocation:Coordinate= null;
function onLoad():Void {
super.onLoad();
ruler.getGIS().gisEventDispatcher.addPopUpInfoFeatureListener(this);
movieClipLoader = new MovieClipLoader();
movieClipLoader.addListener(this);
//setPopUpInfoFeature in the onLoad because of asynchrone loading of scrollcontent
mapViewer = frame.contentProperties.mapViewer;
flagDepth = mapViewer.getNextHighestDepth();
var layer:Layer = frame.contentProperties.layer;
var featureID:String = frame.contentProperties.featureID;
var dateTime:Date = frame.contentProperties.dateTime;
ruler.getGIS().setPopUpInfoFeature(layer,featureID, dateTime);
//frame.setSize(((Stage.width/2) - 40),((Stage.height/2) - 70));
if (mapViewer._xmouse <= Stage.width/2){
frame._x = (Stage.width/2) + 20;
} else {
frame._x = 20;
}
if (mapViewer._ymouse <= Stage.height/2){
frame._y = (Stage.height/2) + 35;
} else {
frame._y = 35;
}
var popUpViewer:SinglePaneComponent =
SinglePaneComponent(ruler.getGIClientConfig().getGIComponent("InfoPopUp"));
popUpViewer.addEventListener(this, StateEvent.CHANGE, "visible");
}
function onStateEvent(stateEvent : StateEvent) : Void {
if(stateEvent.getActionType() == StateEvent.CHANGE &&
stateEvent.getPropertyName() == "visible" &&
stateEvent.getSourceClassName() == "SinglePaneComponent") {
if(mapViewer["crossHair"]!=null){
mapViewer["crossHair"].removeMovieClip();
}
if(mapViewer["infoFlag"]!=null){
mapViewer["infoFlag"].removeMovieClip();
mapViewer["flagMask"].removeMovieClip();
}
ruler.getGIS().setPopUpInfoFeature(null,null);
clearHtml();
}
}
function onChangePopUpInfoFeature(feature:Feature, dateTime:Date):Void {
if(feature!=null){
this.infoFeature = feature;
infoFeature.loadEnvelope(this);//to onSynch
var url:String = feature.getLayer().getPopUpInfoUrl();
if(url=="default"){
this.infoFeature.requestProperties(this);
} else {
if (url.indexOf(":") == -1) { // Assumes that an occurence of ":" means an absolute URL.
var serverUrl:String = feature.getLayer().getServerURL();
url = serverUrl.substr(0, serverUrl.lastIndexOf("/") + 1) + url;
} // TODO relative paths
if (dateTime == null) {
url = url + feature.getID();
} else {
var parts:Array = url.split("{0}");
var parts1:Array = url.split("{0}");
var timepar:String = String(parts[1]).substring(0,String(parts[1]).indexOf("{1}"));
var dateTimeStr = StringTools.dateTimeToString(dateTime);
url = parts[0] + feature.getID() + "&" + timepar + dateTimeStr;
}
showHtml(url);
}
}
}
private function buildDefaultHtml():Void{
var layer:SelectableLayer = SelectableLayer(this.infoFeature.getLayer());
var columns:Array = layer.getContextColumns();
var deepestLevel:Number = layer.getLevel();
var size:Number = 14 + (2*deepestLevel);
if(deepestLevel==0){
deepestLevel=1;
}
var level:Number = deepestLevel;
var layerTitles:Array = new Array();
var htmlString:String = "";
var lyr:Layer = layer;
while (level!=0) {
level = lyr.getLevel();
if(lyr.getMetaUrl()!=null){
layerTitles[level] = "" + lyr.getTitle() + "";
} else {
layerTitles[level] = lyr.getTitle();
}
lyr = lyr.getSuperLayer();
}
var tabStop:Number = 0;
for(var i:Number=0;i
\t" + title + "\t"; if (value.length < 50){ htmlString+= value + "
"; } else { var index1:Number = 0; var indexspace:Number = 0; var temp:String = ''; while(index1 < value.length){ temp = value.substr(index1, 50); if(temp.length == 50) { indexspace = temp.lastIndexOf(' '); htmlString+= "\t\t" + value.substr(index1,indexspace) + "
"; } else { indexspace = 50; htmlString+= "\t\t" + temp + "
"; } index1 += indexspace + 1; } htmlString += ""; } } } htmlString += "