/** * Title: Eventos * * Controla as operações que são executadas em eventos que ocorrem no mapa. * * As listas de operações consistem em variáveis com nomes de funções. * * As listas são inicializadas com algunmas funções já pré-definidas, mas podem ser acrescentadas outras. * * Namespace: * * i3GEO.eventos * * Exemplos: * * Para incluir uma função em um determinado evento utilize * * i3GEO.eventos.adicionaEventos("ATUALIZAARVORECAMADAS",["i3GEOF.agrupaElementos.t0()"]); * * Para remover utilize * * i3GEO.eventos.removeEventos("ATUALIZAARVORECAMADAS",["i3GEOF.agrupaElementos.t0()"]); * * Veja: * * */ //i3GEO.eventos.removeEventos("",[]); /** * Licença * * GPL2 * * i3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet * * Direitos Autorais Reservados (c) 2006 Ministério do Meio Ambiente Brasil Desenvolvedor: Edmar Moretti edmar.moretti@gmail.com * * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo sob os termos da Licença * Pública Geral GNU conforme publicada pela Free Software Foundation; * * Este programa é distribuído na expectativa de que seja útil, porém, SEM NENHUMA GARANTIA; nem mesmo a * garantia implícita de COMERCIABILIDADE OU ADEQUACÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença * Pública Geral do GNU para mais detalhes. Você deve ter recebido uma cópia da Licença Pública Geral * do GNU junto com este programa; se não, escreva para a Free Software Foundation, Inc., no endereço 59 Temple Street, * Suite 330, Boston, MA 02111-1307 USA. */ if (typeof (i3GEO) === 'undefined') { var i3GEO = {}; } /** * Variavel: objposicaocursor * * Utilizada como variável global para armazenar a posição do mouse * * (start code) * * objposicaocursor = { ddx : "", ddy : "", dmsx : "", dmsy : "", telax : "", telay : "", imgx : "", imgy : "", refx : "", refy : "" }; * * (end) */ objposicaocursor = { ddx : "", ddy : "", dmsx : "", dmsy : "", telax : "", telay : "", imgx : "", imgy : "", refx : "", refy : "" }; i3GEO.eventos = { CONTATOUCH : 0, /** * Variavel: SELECAO * * Armazena as funções (eventos) que serão executadas quando uma operação de seleção e concluida. * * Tipo: * * {Array} */ SELECAO : [], /** * Variavel: ATUALIZAARVORECAMADAS * * Armazena as funções (eventos) que serão executadas quando a árvore de camadas for atualizada. * * Tipo: * * {Array} */ ATUALIZAARVORECAMADAS : [], /** * Variavel: ATIVATEMA * * Armazena as funções (eventos) que serão executadas quando um tema da árvore de camadas é * ativado. * * Tipo: * * {Array} */ ATIVATEMA : [], /** * Variavel: NAVEGAMAPA * * Armazena as funções que serão executadas quando é feita uma operação de * navegação sobre o mapa. * * Tipo: * * {Array} */ NAVEGAMAPA : [], /** * Variavel: MOUSEPARADO * * Armazena as funções que serão executadas quando o usuário estaciona o mouse sobre o mapa por alguns * instantes. * * Tipo: * * {Array} * */ MOUSEPARADO : [ ], /** * Variavel: MOUSEMOVE * * Armazena as funções que serão executadas quando o usuário move o mouse sobre o mapa * * Tipo: * * {Array} */ MOUSEMOVE : [], /** * Variavel: MOUSEDOWN * * Armazena as funções que serão executadas quando o usuário pressiona o botão do mouse sobre o * mapa * * Tipo: * * {Array} */ MOUSEDOWN : [], /** * Variavel: MOUSEUP * * Armazena as funções que serão executadas quando o usuário solta o botão do mouse sobre o mapa * * Tipo: * * {Array} * * Default: * * {["i3GEO.eventos.cliquePerm.executa()"]} */ MOUSEUP : [ "i3GEO.eventos.cliquePerm.executa()" ], /** * Variavel: MOUSECLIQUE * * Armazena as funções que serão executadas quando o usuário clica sobre o mapa * * Tipo: * * {Array} * * Default: * * {["i3GEO.eventos.cliqueCapturaPt()"]} */ MOUSECLIQUE : [ "i3GEO.eventos.cliqueCapturaPt()" ], /** * Variavel: MOUSECLIQUEPERM * * Armazena as funções permanentes que serão executadas quando o usuário clica sobre o mapa * * As operações definidas aqui normalmente não fazem verificação de status de outras ferramentas * e podem ser bloqueadas momentaneamente alterando-se i3GEO.eventos.cliquePerm.status * * Tipo: * * {Array} * * Default: * * i3GEO.configura.funcaoTip */ MOUSECLIQUEPERM : [ i3GEO.configura.funcaoTip ], /** * Timer utilizado pelo contador do mouse parado * * Tipo: * * {Timeout} */ TIMERPARADO : "", /** * Function: mouseParado * * Executa as funções definidas em MOUSEPARADO quando é detectado que o mouse está estacionado. * * A execução desse evento é controlado por um timer definido no evento onmousemove (sobre o mapa). * */ mouseParado : function() { try { clearTimeout(this.TIMERPARADO); } catch (e) { this.TIMERPARADO = ""; } if (objposicaocursor.dentroDomapa === false) { return; } try { if (objposicaocursor.imgy === "") { objposicaocursor.imgy = 1; objposicaocursor.imgx = 1; } if (i3GEO.eventos.MOUSEPARADO.length > 0 && objposicaocursor.imgy > 0 && objposicaocursor.imgx > 0) { if (objposicaocursor.imgx > 0) { i3GEO.eventos.executaEventos(i3GEO.eventos.MOUSEPARADO); } } } catch (e) { if (typeof (console) !== 'undefined') console.error("i3GEO.eventos.mouseParado" + e); } }, /** * Function: navegaMapa * * Executa as funções armazenadas em NAVEGAMAPA, ou seja, operações executadas quando o mapa tem sua * extensão geográfica alterada. */ navegaMapa : function() { i3GEO.eventos.executaEventos(this.NAVEGAMAPA); }, /** * Function: mousemoveMapa * * Executa as funções armazenadas em MOUSEMOVE. */ mousemoveMapa : function() { i3GEO.eventos.executaEventos(this.MOUSEMOVE); }, /** * Function: mousedownMapa * * Executa as funções armazenadas em MOUSEDOWN. */ mousedownMapa : function() { i3GEO.eventos.executaEventos(this.MOUSEDOWN); }, /** * Function: mouseupMapa * * Executa as funções armazenadas em MOUSEUP. */ mouseupMapa : function(exy) { if (!exy) { i3GEO.eventos.executaEventos(this.MOUSEUP); } else { if (i3GEO.Interface.ATUAL === "googlemaps" && exy.target && !exy.target.src) { //recalcula a posicao do mouse. Necessario em dispositivos touch if(i3GEOtouchesPosMapa === ""){ i3GEOtouchesPosMapa = i3GEO.util.pegaPosicaoObjeto($i(i3GEO.Interface.IDMAPA)); } pos = i3GEOtouchesPosMapa; p = new google.maps.Point(exy.clientX - pos[0],exy.clientY - pos[1]); e = null; lonlat = i3GeoMapOverlay.getProjection().fromContainerPixelToLatLng(p); if(lonlat){ objposicaocursor.ddx = lonlat.lng(); objposicaocursor.ddy = lonlat.lat(); } i3GEO.eventos.executaEventos(this.MOUSEUP); } else if (i3GEO.Interface.ATUAL === "openlayers"){ i3GEO.eventos.executaEventos(this.MOUSEUP); } /* if (i3GEO.Interface.ATUAL === "googlemaps" && exy.target && !exy.target.src) { //recalcula a posicao do mouse. Necessario em dispositivos touch if(i3GEOtouchesPosMapa === ""){ i3GEOtouchesPosMapa = i3GEO.util.pegaPosicaoObjeto($i(i3GEO.Interface.IDMAPA)); } pos = i3GEOtouchesPosMapa; p = new google.maps.Point(exy.clientX - pos[0],exy.clientY - pos[1]); e = null; lonlat = i3GeoMapOverlay.getProjection().fromContainerPixelToLatLng(p); if(lonlat){ objposicaocursor.ddx = lonlat.lng(); objposicaocursor.ddy = lonlat.lat(); } i3GEO.eventos.executaEventos(this.MOUSEUP); } if (i3GEO.Interface.ATUAL === "openlayers" && exy.target && (i3GEO.desenho.layergrafico || exy.target.style.zIndex == "" || exy.target.style.zIndex == 1)) { var parente = exy.target.parentNode; if (parente && (parente.className === "olLayerDiv" || parente.className === "olLayerDiv olLayerGrid" || (parente.childNodes && parente.childNodes[0].attributes[0].nodeValue === "olTileImage"))) { i3GEO.eventos.executaEventos(this.MOUSEUP); } } */ } }, /** * Function: mousecliqueMapa * * Executa as funções armazenadas em MOUSECLIQUE. */ mousecliqueMapa : function() { i3GEO.eventos.executaEventos(this.MOUSECLIQUE); }, /** * Executa a pilha de nomes de funcoes ou funcoes armazenados em um array * * Parameter: * * eventos {array} - array com os nomes das funções */ executaEventos : function(eventos) { if (i3GEO.Interface.STATUS.pan === true) { return; } var f = 0; try { if (eventos.length > 0) { f = eventos.length - 1; if (f >= 0) { do { if (eventos[f] !== "") { if (typeof (eventos[f]) === "function") { eventos[f].call(); } else { eval(eventos[f]); } } } while (f--); } } } catch (e) { if (typeof (console) !== 'undefined') console.error(e); eventos[f] = ""; } }, /** * Function: removeEventos * * Remove uma lista de eventos registrados * * Parameters: * * {string} - tipo de evento (MOUSECLIQUE por exemplo) * * {array} - lista dos nomes dos eventos registrados */ removeEventos : function(tipo,eventos){ var i,n = eventos.length; for(i=0;i