QuickWMS-Extension/WMStools.js
GISWiki - Das freie Portal für Geoinformatik (GIS)
Version vom 17. August 2005, 09:19 Uhr von HeinzJ (Diskussion | Beiträge)
/* * Project quickWMS: Generic JavaScript WMS Client * File : WMStools.js * Author : Pedro Pereira Gonçalves * email : pedro.goncalves@esa.int or pedro@inovagis.org * Version : 0.1 * Description: Deals with mouse functions and basic WMS tools and toolbars * Please read coderules.txt before making any change * Tested on : Netscape 7.0, IE 5.5, IE 6.0 * Last Change : 2003-10-24 * Dependencies : WMSbrowsers.js * Future Developments : Pan buttons (left, right .. and so on ) * License : OpenSource (check license.txt in the same directory) * History : 2003-10-24 : When in select mode clicking again in the selection button will disable the tool and hide the selection layer 2003-04-23 : Documentation added 2003-03-20 : File Created * Objects : * Functions : */ function toolBar(obRefName){ //obRefName.toolBar=this; this.map=obRefName; this.images = new Array ('back.gif', 'forward.gif', 'home.gif', 'zsel.gif', 'zminus.gif', 'select.gif'); this.help = new Array ('back to previous view', 'jump to next view', 'go to first to home view','select area to zoom', 'zoom out', 'select tool'); this.events = new Array; this.events[0]= function (map) {map.back();} this.events[1]= function (map) {map.forward();} this.events[2]= function (map) {map.home();} this.events[3]= function (map) {map.toolMode='selzoom';map.toolbar.reset();map.toolbar.imgs[3].src=path_skin+'h_'+map.toolbar.images[3]} this.events[4]= function (map) {map.toolMode='zoomout';map.toolbar.reset();map.toolbar.imgs[4].src=path_skin+'h_'+map.toolbar.images[4]} this.events[5]= function (map) {if (map.toolMode=='selection') { map.toolMode=''; hideLayer(map.name+"Selection"); map.toolbar.reset(); } else {map.toolMode='selection';map.toolbar.reset();map.toolbar.imgs[5].src=path_skin+'h_'+map.toolbar.images[5]} } this.reset = function () { for(i=0; i<this.images.length; i++){ this.imgs[i].src=path_skin+this.images[i]; } } this.writeDOM = function ( x, y, horiz) { var content=""; if (browser.isOldNS){var style=""} else {var style=" style='cursor:pointer;cursor:hand'"} for(i=0; i<this.images.length; i++){ content+="<img src='"+path_skin+this.images[i]+"'"+style+" width=24 height=24 border=0 alt='"+this.help[i]+"' onmouseup=getLayer('"+this.map.name+"ToolBar').reference.events["+i+"](getLayer('"+this.map.name+"ToolBar').reference.map)>"; } openLayer(this.map.name+"ToolBar","","", x, y, 25*this.images.length, 25, true); document.write(content); closeLayer(); // 2003-10-24 : Note .. for the tools to be compatible with ns47 we should make a special case for it because it doesn't works with getElementXXX methods if (browser.isNS47x) { getLayer(this.map.name+"ToolBar").reference=this; this.imgs=getLayer(this.map.name+"ToolBar").document.images; } else { //getLayer(this.map.name+"ToolBar").reference=this; //this.imgs=getLayer(this.map.name+"ToolBar").getElementsByTagName("img"); // 2003-10-13 : changed this because of ns71 document.getElementById(this.map.name+"ToolBar").reference=this; this.imgs=document.getElementById(this.map.name+"ToolBar").getElementsByTagName("img"); } } } function getMouseXY(e) { var mouseX; var mouseY; if (browser.isIE50 || browser.isIE55 || browser.isIE60){e = window.event;} if (e.layerX) { mouseX =e.layerX; mouseY =e.layerY; } else if (browser.isOldNS) { mouseX=e.pageX; mouseY=e.pageY; } else { mouseX=e.clientX; mouseY=e.clientY; mouseX=e.offsetX; mouseY=e.offsetY; } mouseX++; mouseY++; mouseX=Math.round(mouseX/mouseGrid)*mouseGrid; mouseY=Math.round(mouseY/mouseGrid)*mouseGrid; if (e.target){ if (e.target.parent) return new layerPoint(e.target.parent,mouseX,mouseY); } else{ if (e.srcElement){ if (e.srcElement.parentElement){ if (e.srcElement.parentElement.reference){ return new layerPoint(e.srcElement.parentElement.reference,mouseX,mouseY) } } } else if (e.currentTarget) return new layerPoint(e.currentTarget.reference,mouseX,mouseY); } } function WMS_zoomTool(obRef, eventType, X, Y){ if (eventType=="mouseMove" && obRef.toolMode=="zooming"){ showLayer(obRef.name+"zoom"); obRef.setZoomBox(null,null,X,Y); return true; } else if (eventType=="mouseMove" && obRef.toolMode=="selecting"){ showLayer(obRef.name+"Selection"); if (obRef.onSelecting){ var tX2=mouse2GeoX(obRef,X); var tY1=mouse2GeoY(obRef,Y); var tX1=obRef.slBox[0]; var tY2=obRef.slBox[3]; if (tX2<obRef.slBox[0]){ tX1=tX2; tX2=obRef.slBox[0]; } /*if (tY2<obRef.slBox[1]){ tY1=tY2; tY2=obRef.slBox[1]; } */ if (obRef.onSelecting(obRef,tX1,tY1,tX2,tY2)){ obRef.setSelection(null,null,X,Y); } } else{ obRef.setSelection(null,null,X,Y); } return true; } else if (eventType=="mouseDown") { if (obRef.toolMode=="selzoom"){ if(obRef.setZoomBox){ if (obRef.toolMode=="zooming"){ obRef.setZoomBox(null,null,X,Y); } else{ obRef.setZoomBox(X,Y,X,Y); obRef.toolMode="zooming"; //showLayer(obRef.name+"Selection"); } } } if (obRef.toolMode=="selection"){ if(obRef.setSelection){ if (obRef.toolMode=="selecting"){ obRef.setSelection(null,null,X,Y); } else{ obRef.setSelection(X,Y,X,Y); obRef.toolMode="selecting"; //showLayer(obRef.name+"Selection"); } } if (obRef.onSelecting){obRef.onSelecting(obRef,X,Y,X,Y)} } return true } else if (eventType=="mouseUp") { if (obRef.toolMode=="zooming"){ if(obRef.setZoomBox){ if (isVisible(obRef.name+"zoom")){ obRef.setZoomBox(null,null,X,Y); if ( X-geo2MouseX(obRef,obRef.zBox[0])<5 && Y-geo2MouseY(obRef,obRef.zBox[1])<5) { obRef.zoomTo(mouse2GeoX(obRef,X),mouse2GeoY(obRef,Y),2); } else obRef.updateBBox( obRef.zBox[0], obRef.zBox[1],obRef.zBox[2],obRef.zBox[3]); hideLayer(obRef.name+"zoom"); } else{ obRef.zoomTo(mouse2GeoX(obRef,X),mouse2GeoY(obRef,Y),2); hideLayer(obRef.name+"zoom"); } } else{ } obRef.toolMode="selzoom"; return true; } if (obRef.toolMode=="zoomout"){ obRef.zoomTo(mouse2GeoX(obRef,X),mouse2GeoY(obRef,Y),0.5); return true; } if (obRef.toolMode=="selecting"){ obRef.toolMode="selection"; if (obRef.onSelection){obRef.onSelection(obRef,obRef.slBox[0],obRef.slBox[1],obRef.slBox[2],obRef.slBox[3])} return true; } } else return false } function WMS_mouseToolManager(eventType, X, Y){ if (true)//(this.toolMode=="selzoom" || this.toolMode=="zooming" || this.toolMode=="zoomout") {return WMS_zoomTool(this,eventType, X, Y);} else return false; } function WMS_mouseUp(e){ mouse=getMouseXY(e); if (mouse){ if (!mouse.layer.mouseToolManager("mouseUp",mouse.X,mouse.Y)){ if (mouse.layer.onMouseUp) {mouse.layer.onMouseUp(mouse.layer, mouse.X,mouse.Y);} } } // Returning true on a mouse event insures that window.status will not be // overwritten (browser convention) return false; } function WMS_mouseDown(e){ mouse=getMouseXY(e); //window.status+=mouse.X; if (mouse){ if (!mouse.layer.mouseToolManager("mouseDown",mouse.X,mouse.Y)){ if (mouse.layer.onMouseUp){ mouse.layer.onMouseUp(mouse.layer, mouse.X,mouse.Y); } } } // Returning true on a mouse event insures that window.status will not be // overwritten (browser convention) stopEventPropagation(e); //return false; return true; } function WMS_mouseMove(e){ if (getMouseXY){ mouse=getMouseXY(e); if (mouse){ if (!mouse.layer.mouseToolManager("mouseMove",mouse.X,mouse.Y)){ if (mouse.layer.onMouseMove){ mouse.layer.onMouseMove(mouse.layer,mouse2GeoX(mouse.layer,mouse.X),mouse2GeoY(mouse.layer,mouse.Y)); } } } stopEventPropagation(e); return false;//true; } } function changeBBox(obRef,value) { if (value!=-1) { var box=value.split(','); obRef.updateBBox (box[0],box[1],box[2],box[3]); } } function changeSelectBBox(obRef,value) { if (value!=-1) { var box=value.split(','); showLayer(obRef.name+"Selection"); obRef.updateBBox ( (box[0]/1)-20.0, (box[1]/1)-20.0, (box[2]/1)+20.0, (box[3]/1)+20.0); // obRef.updateBBox ( 30-2, 40-2, 60+2, 50+2); obRef.setSelectionXY (box[0],box[1],box[2],box[3]); } } //undocumented functions /* function writeNavArrows(x,y, obRef){ openLayer(obRef.name+"Arrows","","filter:alpha(opacity=80);-moz-opacity:0.80;border-style:solid;border-width:1;background-color:white;", x, y, 64,67, true); document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:5;left:5' src='"+path_IMG+"nw.gif' width=24 height=24 border=0 alt=''>"); document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:2;left:20' src='"+path_IMG+"n.gif' width=24 height=24 border=0 alt=''>"); document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:5;left:35' src='"+path_IMG+"ne.gif' width=24 height=24 border=0 alt=''>"); document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:21;left:5' src='"+path_IMG+"w.gif' width=24 height=24 border=0 alt=''>"); document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:21;left:37' src='"+path_IMG+"e.gif' width=24 height=24 border=0 alt=''>"); document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:38;left:5' src='"+path_IMG+"sw.gif' width=24 height=24 border=0 alt=''>"); document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:41;left:20' src='"+path_IMG+"s.gif' width=24 height=24 border=0 alt=''>"); document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:38;left:35' src='"+path_IMG+"se.gif' width=24 height=24 border=0 alt=''>"); } */