QuickWMS-Extension/WMStools.js
GISWiki - Das freie Portal für Geoinformatik (GIS)
/*
* 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)>";
}
openLayerR(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=''>");
}
*/