/*jslint white:false,undef: false, rhino: true, onevar: true, evil: false */ /* Title: Árvore de camadas Arquivo: i3geo/classesjs/classe_arvoredecamadas.js Licenca: 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@mma.gov.br 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 ADEQUAÇÃ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'){ i3GEO = []; } /* Classe: i3GEO.arvoreDeCamadas Monta a árvore com os temas existentes no mapa atual. A árvore contém as opções de ligar e desligar temas. Permite controlar quais as opções que serão mostradas na árvore. Exemplos: Para alterar as opções da árvore, modifique as propriedades i3GEO.arvoreDeCamadas.OPCOESTEMAS = false; */ i3GEO.arvoreDeCamadas = { /* Propriedade: BARRAPROGRESSO Mostra uma barra com o progresso do desenho das camadas do mapa Não funciona em todas as interfaces Default: {true} Type: {boolean} */ BARRAPROGRESSO: true, /* Propriedade: MOSTRALISTAKML Mostra na árvore a lista de endereços de arquivos KML cadastrados no sistema de administração Default: {true} Type: {boolean} */ MOSTRALISTAKML: false, /* Propriedade: FILTRO Filtro que será aplicado para restringir os tipos de camadas mostradas na árvore Default: {""} Type: {string} - ligados|desligados|selecionados|download|wms|raster|toponimia */ FILTRO: "", /* Propriedade: VERIFICAABRANGENCIATEMAS Verifica ou não se um tema da árvore está dentro da abrangência do mapa atual A verificação só é feita se o tema possuir a extensão geográfica registrada (veja o sistema de administração) Default: {true} Type: {boolean} */ VERIFICAABRANGENCIATEMAS: true, /* Propriedade: finaliza Nome de uma função que será executada após a árvore ter sido montada Default: {""} Type: {String} */ finaliza: "", /* Propriedade: EXPANDESOLEGENDA Ao expandir um tema mostra apenas a legenda, sem as outras opções Default: {false} Type: {boolean} */ EXPANDESOLEGENDA: false, /* Propriedade: PERMITEEXPANDIRTEMAS Permite que as opções abaixo dos nós referentes acada tema sejam mostradas Default: {true} Type: {boolean} */ PERMITEEXPANDIRTEMAS:true, /* Propriedade: ARRASTARORDEM Ativa a opção de arrastar um tema para alterar a ordem de desenho das camadas Default: {true} Type: {boolean} */ ARRASTARORDEM: true, /* Propriedade: ARRASTARLIXEIRA Ativa a opção de arrastar um tema para a lixeria quando se quer removê-lo do mapa. Default: {true} Type: {boolean} */ ARRASTARLIXEIRA: true, /* Propriedade: ALTERAOPACIDADE Mostra ou não a opção que permite alterar a transparência das camadas existentes no mapa Type: {boolean} */ ALTERAOPACIDADE: true, /* Propriedade: ANIMAMAPA Mostra ou não a opção que permite gerar uma animação do mapa, ligando e desligando camadas Type: {boolean} */ ANIMAMAPA: true, /* Propriedade: LIGARDESLIGARTODOS Mostra os ícones de desligar/ligar todos os temas. Default: {true} Type: {boolean} */ LIGARDESLIGARTODOS: true, /* Propriedade: FILTRAR Mostra o ícone para filtrar as camadas. Default: {true} Type: {boolean} */ FILTRAR: true, /* Propriedade: ABRELEGENDA Mostra o ícone para abrir a legenda do mapa. Default: {true} Type: {boolean} */ ABRELEGENDA: true, /* Propriedade: EXPANDIDA Indica se a árvore será montada de forma expandida ou não. Se true, os nós do primeiro nível serão abertos na inicialização da árvore. Default: {false} Tipo: {Boolena} */ EXPANDIDA: false, /* Propriedade: LEGENDAEXPANDIDA Indica se a legenda da árvore será montada de forma expandida ou não. Default: {false} Tipo: {Boolena} */ LEGENDAEXPANDIDA: false, /* Propriedade: OPCOESICONES Inclui ou não os ícones de opções em cada tema (farol, zoom para o tema, etc) Default: {true} Tipo: {boolean} */ OPCOESICONES: true, /* Propriedade: OPCOESTEMAS Inclui ou não o nó com as opções de manipulação de cada tema. Default: true Tipo: {Boolean} */ OPCOESTEMAS: true, /* Propriedade: OPCOESLEGENDA Inclui ou não o nó para mostrar a legenda do tema. Default: true Tipo: {Boolean} */ OPCOESLEGENDA: true, /* Propriedade: AGUARDALEGENDA Ativa a opção de aguarde para mostrar a legenda de um tema quando o usuário estaciona o mouse sobre o nome de um tema. Default: {false} Tipo: {Boolean} */ AGUARDALEGENDA: false, /* Propriedade: ICONETEMA Mostra ou não o ícone do tema caso exista. O ícone é definido no METADATA ICONETEMA no mapfile correspondente ao tema Default: {true} Tipo: {Boolean} */ ICONETEMA: true, /* Propriedade: FUNCOES Indicação de quais funções serão incluídas em cada tema mostrado na árvore quando o usuário aciona o item "opções" Além de definir o item como false ou true, algumas funções apenas são mostradas em conformidade com o tipo de camada. No sistema de administração, pode-se também controlar algumas das funções, como por exemplo "sql", "wms" e "temporizador" Exemplo de como alterar um valor diretamente no javascript da interface do mapa i3GEO.arvoreDeCamadas.FUNCOES.excluir = false */ FUNCOES: { farolescala: true, excluir:true, sobe:true, desce:true, fonte:true, zoomtema:true, compartilhar:true, opacidade:true, mudanome: true, procurar:true, toponimia:true, etiquetas:true, filtrar:true, tabela:true, grafico:true, editorlegenda:true, destacar:true, cortina:true, sql:true, comentar:true, temporizador:true, wms: true, tme: true }, /* Variavel: CAMADAS Objeto com a lista de camadas existentes no mapa. É definido na inicialização ou no redesenho do mapa. Este objeto é construído nas operações em PHP de inicialização ou redesenho do mapa e lista todos os layers existentes no mapfile temporário em uso. Exemplo: "CAMADAS":[ { "name":"estadosl", //código do layer "status":2, //ver constante MS_STATUS do Mapserver "tema":"Limite Estadual", "transparency":100, "type":1, //ver constante MS_TYPE do Mapserver "sel":"nao", "escala":"250000", "download":"", "features":"nao", "connectiontype":1, //ver constante MS_CONNECTIONTYPE do Mapserver "zoomtema":"sim", "contextoescala":"nao", "etiquetas":"", "editorsql":"sim", "iconetema":"", "permitecomentario":"", "exttema":"" } ] Tipo: {OBJETO} */ CAMADAS: "", /* Variavel: CAMADASINICIAIS O mesmo que CAMADAS mas guarda de forma permanente as camadas que iniciaram no mapa Tipo: {OBJETO} */ CAMADASINICIAIS: "", /* Variavel: ARVORE Objeto com a árvore criada com YAHOO.widget.TreeView Tipo: {YAHOO.widget.TreeView} */ ARVORE: null, /* Variavel: IDHTML Armazena o ID do elemento DOM onde a árvore foi inserida. Tipo: {String} Default: {listaTemas} */ IDHTML: "listaTemas", /* Variavel: SID Código da seção aberta no servidor pelo i3Geo Tipo: {String} */ SID: null, /* Variavel: LOCAPLIC Endereço da aplicação i3geo. Utilizado para definir o caminho para a chamada em AJAX. Exemplo: 'http://localhost/i3geo' Tipo: {String} */ LOCAPLIC: null, /* Variavel: ATIVATEMA Nome da função que será incluída no evento onclick do elemento checkbox adicionado no início do nome de um tema. Tipo: {String} */ ATIVATEMA: "", /* Function: cria Cria a árvore com as opções de manipulação das camadas existentes no mapa Parametros: onde {String} - ID do elemento DOM onde a árvore será inserida. Se for definido como "" o id será buscado da variável IDHTML. temas {JSON} - Objeto JSON com as camadas e propriedades. Se não for definido ou for vazio, será utilizado i3GEO.arvoreDeCamadas.CAMADAS g_sid {String} - Código da seção PHP criada ao abrir o i3Geo funcaoTema {String} - (opcional) Nome da função que será incluida no evento disparado quando o usuário clicar no checkbox de um tema */ cria: function(onde,temas,g_sid,g_locaplic,funcaoTema){ if(typeof(console) !== 'undefined'){console.info("i3GEO.arvoreDeCamadas.cria()");} if(!YAHOO.lang.isUndefined(funcaoTema)){ i3GEO.arvoreDeCamadas.ATIVATEMA = funcaoTema; } var novoel; //inclui o div para a barra de progresso if(i3GEO.arvoreDeCamadas.BARRAPROGRESSO === true && i3GEO.Interface.ATUAL === "openlayers"){ if(!$i("i3GEOprogressoDiv")){ novoel = document.createElement("div"); novoel.id = "i3GEOprogressoDiv"; novoel.style.position = "absolute"; novoel.style.top = "0px"; novoel.style.zIndex = "50000"; novoel.style.left = (i3GEO.parametros.w / 2) - 75 + "px"; //novoel.style.display = "none"; $i(i3GEO.Interface.IDMAPA).appendChild(novoel); i3GEO.arvoreDeCamadas.progressBar = new YAHOO.widget.ProgressBar({ height: 5, width: 150, minValue: 1, maxValue: 0, value: 0 }).render("i3GEOprogressoDiv"); } } i3GEO.arvoreDeCamadas.SID = typeof(g_sid) !== 'undefined' ? g_sid : i3GEO.configura.sid; i3GEO.arvoreDeCamadas.LOCAPLIC = typeof(g_locaplic) !== 'undefined' ? g_locaplic : i3GEO.configura.locaplic; if(onde !== "") {i3GEO.arvoreDeCamadas.IDHTML = onde;} if(i3GEO.arvoreDeCamadas.IDHTML === "") {return;} if(!$i(i3GEO.arvoreDeCamadas.IDHTML)) {return;} if(YAHOO.lang.isUndefined(temas) || temas === "") {temas = i3GEO.arvoreDeCamadas.CAMADAS;} i3GEO.arvoreDeCamadas.atualiza(temas); if(i3GEO.arvoreDeCamadas.finaliza !== ""){ eval(i3GEO.arvoreDeCamadas.finaliza); } }, /* Function: atualiza Atualiza a árvore de camadas. Antes de executar a atualização, essa função verifica se é necessário fazê-lo. O objeto CAMADAS é comparado com o parâmetro "temas" para verificar se existem diferenças que justifiquem a atualização. Parametro: temas {JSON} - Objeto com a lista de camadas e propriedades (veja CAMADAS). Se não existir, a árvore é redesenhada forca {boolean} - força a atualização da árvore, sem verificar automaticamente se a atualização deve ou não ser feita */ atualiza: function(temas,forca){ if(typeof(console) !== 'undefined'){console.info("i3GEO.arvoreDeCamadas.atualiza()");} if(arguments.length === 0){ temas = i3GEO.arvoreDeCamadas.CAMADAS; i3GEO.arvoreDeCamadas.CAMADAS = ""; forca = false; } var estilo,temp,newVal,root,tempNode,titulo,d,c,ltema,temaNode,i,j,n,nk,k,noGrupo, incluidos=[], grupoNode = "", grupoLayers = i3GEO.configura.grupoLayers, textoTema = ""; // //essa verificacao é necessaria quando a arvore é criada fora dos padrões normais // temp = $i(i3GEO.arvoreDeCamadas.IDHTML); if(temp){ if(forca === true) {temp.innerHTML = "";} if(temp.innerHTML !== ""){ if(i3GEO.arvoreDeCamadas.comparaTemas(temas,i3GEO.arvoreDeCamadas.CAMADAS)){ if(typeof(console) !== 'undefined'){console.info("Nao é necessario atualizar arvoreDeCamadas - return");} i3GEO.arvoreDeCamadas.CAMADAS = temas; return; } } } else {return;} i3GEO.util.defineValor(i3GEO.arvoreDeCamadas.IDHTML,"innerHTML",""); i3GEO.arvoreDeCamadas.CAMADAS = temas; if(i3GEO.arvoreDeCamadas.CAMADASINICIAIS === "") {i3GEO.arvoreDeCamadas.CAMADASINICIAIS = temas;} (function(){ function changeIconMode(){ var currentIconMode = ""; newVal = parseInt(this.value,10); if (newVal !== currentIconMode) {currentIconMode = newVal;} buildTree(); } function buildTree(){ i3GEO.arvoreDeCamadas.ARVORE = new YAHOO.widget.TreeView(i3GEO.arvoreDeCamadas.IDHTML); //root = i3GEO.arvoreDeCamadas.ARVORE.getRoot(); } buildTree(); })(); root = i3GEO.arvoreDeCamadas.ARVORE.getRoot(); titulo = "
"+$trad("a7")+""; //titulo += i3GEO.arvoreDeCamadas.montaOpcoesArvore(); titulo += "
"; tempNode = new YAHOO.widget.HTMLNode({expanded:true,html:titulo,hasIcon:true,enableHighlight: false}, root); new YAHOO.widget.HTMLNode({expanded:false,html:i3GEO.arvoreDeCamadas.montaOpcoesArvore(),hasIcon:false,enableHighlight: false}, tempNode); // //estilo usado no input qd existirem grupos // estilo = navm ? "text-align:left;font-size:11px;vertical-align:middle;display:table-cell;" : "text-align:left;font-size:11px;vertical-align:vertical-align:top;padding-top:4px;"; // //monta a árvore. //se i3GEO.configura.grupoLayers estiver definido //o processo é diferenciado // if (grupoLayers === ""){ c = temas.length; for (i=0, j=c; i "; } noGrupo += ""+grupoLayers[i].nome+"

"; d = this.EXPANDIDA; if(grupoLayers[i].expandido && grupoLayers[i].expandido === true) {d = true;} n = grupoLayers[i].layers.length; //layers de um grupo for(j=0;jOutros"}, tempNode); c = incluidos.length; for(k=0;k";} if(this.FILTRAR === true) {ins += "";} if(this.ABRELEGENDA === true) {ins += "";} if(this.ALTERAOPACIDADE === true) {ins += "";} if(this.ANIMAMAPA === true && (i3GEO.Interface.ATUAL === "openlayers" || i3GEO.Interface.ATUAL === "googlemaps")) {ins += "";} if(this.LIGARDESLIGARTODOS === true){ ins += " "; ins += " "; } return ins; }, /* Function: ligaDesligaTemas Marca ou desmarca os checkbox da árvore de uma lista de temas Parametros: lista {string} - lista, separada por vírgulas, dos códigos dos temas status {boolean} - marca ou desmarca */ ligaDesligaTemas: function(lista,status){ var c,n,i,aplica = false; lista = lista.split(","); n = lista.length; for(i=0;i= 0){ do{ ltema = i3GEO.arvoreDeCamadas.CAMADAS[i]; if($i("arrastar_"+ltema.name)) {new YAHOO.example.DDList("arrastar_"+ltema.name);} } while(i--); } } }; YAHOO.example.DDList = function(id, sGroup, config) { YAHOO.example.DDList.superclass.constructor.call(this, id, sGroup, config); this.logger = this.logger || YAHOO; YAHOO.util.Dom.setStyle(this.getDragEl(), "opacity", 0.67); // The proxy is slightly transparent this.goingUp = false; this.lastY = 0; }; YAHOO.extend( YAHOO.example.DDList, YAHOO.util.DDProxy, { startDrag: function(x, y){ var dragEl,clickEl, Dom = YAHOO.util.Dom; this.logger.log(this.id + " startDrag"); // make the proxy look like the source element dragEl = this.getDragEl(); clickEl = this.getEl(); Dom.setStyle(clickEl, "visibility", "hidden"); dragEl.innerHTML = clickEl.innerHTML; Dom.setStyle(dragEl, "color", Dom.getStyle(clickEl, "color")); Dom.setStyle(dragEl, "backgroundColor", Dom.getStyle(clickEl, "backgroundColor")); Dom.setStyle(dragEl, "border", "4px solid gray"); Dom.setStyle(dragEl, "z-index", "5000"); }, endDrag: function(e){ var srcEl,proxy,a,thisid,proxyid; srcEl = this.getEl(); proxy = this.getDragEl(); // Show the proxy element and animate it to the src element's location Dom.setStyle(proxy, "visibility", ""); a = new YAHOO.util.Motion( proxy,{ points: {to: Dom.getXY(srcEl)} }, 0.2, YAHOO.util.Easing.easeOut ); proxyid = proxy.id; thisid = this.id; // Hide the proxy and show the source element when finished with the animation a.onComplete.subscribe( function(){ var Dom = YAHOO.util.Dom; Dom.setStyle(proxyid, "visibility", "hidden"); Dom.setStyle(thisid, "visibility", ""); } ); a.animate(); YAHOO.util.Dom.setStyle('i3geo_lixeira', 'border', '0px solid blue'); }, onDragDrop: function(e, id){ var pt,region,tema,destEl,els,lista,temp, DDM = YAHOO.util.DragDropMgr, Dom = YAHOO.util.Dom; if (DDM.interactionInfo.drop.length === 1){ pt = DDM.interactionInfo.point; region = DDM.interactionInfo.sourceRegion; if (!region.intersect(pt)){ DDM.refreshCache(); //exclui tema if(DDM.getDDById(id).id === "i3geo_lixeira"){ if(i3GEO.arvoreDeCamadas.ARRASTARLIXEIRA === true){ (new YAHOO.util.Anim("i3geo_lixeira", { opacity: { from: 0, to: 1 } },3, YAHOO.util.Easing.easeOutStrong)).animate(); tema = (this.getEl()).id.split("arrastar_")[1]; i3GEO.tema.exclui(tema); } } //muda ordem de desenho do tema else{ if(i3GEO.arvoreDeCamadas.ARRASTARORDEM === true){ destEl = Dom.get(id); destEl.appendChild(this.getEl()); els = i3GEO.arvoreDeCamadas.listaLigadosDesligados(); lista = els[2].join(","); temp = function(retorno){ i3GEO.atualiza(retorno); if(i3GEO.Interface.ATUAL === "openlayers") {i3GEO.Interface.openlayers.ordenaLayers();} }; i3GEO.php.reordenatemas(temp,lista); } } } } }, onDrag: function(e){ // Keep track of the direction of the drag for use during onDragOver var y; y = Event.getPageY(e); if (y < this.lastY) {this.goingUp = true;} else if (y > this.lastY) {this.goingUp = false;} this.lastY = y; if(i3GEO.guias.TIPO === "movel"){ YAHOO.util.Dom.setStyle("i3GEOguiaMovelMolde", "opacity", 0.9); } }, onDragOver: function(e, id){ var destEl; destEl = YAHOO.util.Dom.get(id); // We are only concerned with list items, we ignore the dragover // notifications for the list. if ($i("i3geo_lixeira") && id === "i3geo_lixeira") {$i("i3geo_lixeira").style.border = "1px solid red";} else{destEl.style.textDecoration="underline";} }, onDragOut: function(e, id) {$i(id).style.textDecoration="none";} } ); Event.onDOMReady(YAHOO.example.DDApp.init, YAHOO.example.DDApp, true); }, /* Function: montaOpcoes Abre o segundo nível da árvore de temas, mostrando as opções disponíveis para cada tema. Nesse segundo nível são mostrados alguns ícones como o farol, excluir, etc, além do nó de opções e legenda. Parametro: node {YAHOO.widget.HTMLNode} - Nó que foi clicado */ montaOpcoes: function(node){ if(typeof(console) !== 'undefined'){console.info("i3GEO.arvoreDeCamadas.montaOpcoes()");} //YAHOO.log("Montando as opções da árvore de camadas", "i3geo"); var opcoesNode,idtema,ltema,farol,mfarol,tnome = "", imb = i3GEO.util.$im("branco.gif"), funcoes = i3GEO.arvoreDeCamadas.FUNCOES; idtema = node.data.id; ltema = i3GEO.arvoreDeCamadas.pegaTema(idtema); if(i3GEO.arvoreDeCamadas.OPCOESICONES === true){ // //define o farol indicativo da compatibilidade de escala do mapa com a fonte do layer // if(funcoes.farolescala === true){ farol = "maisamarelo.png"; mfarol = ""; if (ltema.escala*1 < i3GEO.parametros.mapscale*1){ farol = "maisverde.png"; mfarol = $trad("t9"); } if (ltema.escala*1 > i3GEO.parametros.mapscale*1){ farol = "maisvermelho.png"; mfarol = $trad("t10"); } if (ltema.escala === 0){ farol = "maisamarelo.png"; mfarol = $trad("t11"); } tnome += " "; } if(funcoes.excluir === true) {tnome += " ";} if(funcoes.sobe === true) {tnome += " ";} if(funcoes.desce === true) {tnome += " ";} if(funcoes.fonte === true) {tnome += " ";} if( (ltema.zoomtema.toLowerCase() === "sim") && (funcoes.zoomtema === true)) {tnome += " ";} new YAHOO.widget.HTMLNode({html:tnome,enableHighlight: false,isLeaf:true,expanded:false}, node); if(funcoes.compartilhar === true && ltema.permitecomentario.toLowerCase() !== "nao") { temp = i3GEO.configura.locaplic+"/ms_criamapa.php?layers="+ltema.name+"&temasa="+ltema.name; tnome = i3GEO.social.compartilhar("",temp,temp,"semtotal"); iconesNode = new YAHOO.widget.HTMLNode({html:tnome,enableHighlight:false,isLeaf:true,expanded:false},node); } } if(i3GEO.arvoreDeCamadas.OPCOESTEMAS === true){ opcoesNode = new YAHOO.widget.HTMLNode({html:$trad("t18a"),idopcoes:ltema.name,identifica:ltema.identifica,enableHighlight:false,expanded:false}, node); opcoesNode.setDynamicLoad(i3GEO.arvoreDeCamadas.mostraOpcoes, 1); } if(i3GEO.arvoreDeCamadas.OPCOESLEGENDA === true && ltema.classe !== "NAO"){ opcoesNode = new YAHOO.widget.HTMLNode({html:$trad("p3"),idlegenda:ltema.name,enableHighlight:false,expanded:i3GEO.arvoreDeCamadas.LEGENDAEXPANDIDA}, node); opcoesNode.setDynamicLoad(i3GEO.arvoreDeCamadas.mostraLegenda, 1); } node.loadComplete(); }, /* Function: mostraOpcoes Monta os nós filhos do nó "opções" Parametro: node {YAHOO.widget.HTMLNode} */ mostraOpcoes: function(node){ if(typeof(console) !== 'undefined'){console.info("i3GEO.arvoreDeCamadas.mostraOpcoes()");} //YAHOO.log("Mostrando as opções da árvore de camadas", "i3geo"); var tnome, idtema = node.data.idopcoes, ltema = i3GEO.arvoreDeCamadas.pegaTema(idtema), funcoes = i3GEO.arvoreDeCamadas.FUNCOES; if(funcoes.opacidade === true){ if(navm) {tnome = ""+$trad("t20")+"    "+$inputText("","","tr"+ltema.name,"","3",ltema.transparency)+" ";} else {tnome = ""+$trad("t20")+"    "+$inputText("","","tr"+ltema.name,"","3",ltema.transparency)+"";} new YAHOO.widget.HTMLNode({expanded:false,enableHighlight:false,isLeaf:true,html:tnome}, node); } if(funcoes.temporizador === true){ if(navm) {tnome = ""+$trad("t48")+"    "+$inputText("","","temporizador"+ltema.name,"","3",ltema.temporizador)+" ";} else {tnome = ""+$trad("t48")+"    "+$inputText("","","temporizador"+ltema.name,"","3",ltema.temporizador)+"";} new YAHOO.widget.HTMLNode({expanded:false,enableHighlight:false,isLeaf:true,html:tnome}, node); } if(funcoes.mudanome === true){ if(navm) {tnome = ""+$trad("t21")+"    "+$inputText("","","nn"+ltema.name,"","8","")+" ";} else {tnome = ""+$trad("t21")+"    "+$inputText("","","nn"+ltema.name,"","10","")+"";} new YAHOO.widget.HTMLNode({expanded:false,enableHighlight:false,isLeaf:true,html:tnome}, node); } if ((ltema.type < 3) && (ltema.connectiontype !== 7)){ if(funcoes.procurar === true) {i3GEO.arvoreDeCamadas.adicionaOpcaoTema($trad("t22"),$trad("t23"),'i3GEO.tema.dialogo.procuraratrib(\"'+ltema.name+'\")',node);} if(funcoes.toponimia === true) {i3GEO.arvoreDeCamadas.adicionaOpcaoTema($trad("t24"),$trad("t25"),'i3GEO.tema.dialogo.toponimia(\"'+ltema.name+'\")',node);} if(funcoes.etiquetas === true &&(ltema.identifica.toLowerCase() === "sim" || ltema.identifica === "")) {i3GEO.arvoreDeCamadas.adicionaOpcaoTema($trad("t26"),$trad("t27"),'i3GEO.tema.dialogo.etiquetas(\"'+ltema.name+'\")',node);} if(funcoes.filtrar === true) {i3GEO.arvoreDeCamadas.adicionaOpcaoTema($trad("t28"),$trad("t29"),'i3GEO.tema.dialogo.filtro(\"'+ltema.name+'\")',node);} if(funcoes.tabela === true) {i3GEO.arvoreDeCamadas.adicionaOpcaoTema($trad("t30"),$trad("t31"),'i3GEO.tema.dialogo.tabela(\"'+ltema.name+'\")',node);} if(i3GEO.parametros.versaoms > 4 && funcoes.grafico === true){ i3GEO.arvoreDeCamadas.adicionaOpcaoTema($trad("t37"),$trad("t37"),'i3GEO.tema.dialogo.graficotema(\"'+ltema.name+'\")',node); } } if ((ltema.type < 4 || ltema.type === 8) && funcoes.editorlegenda === true){ i3GEO.arvoreDeCamadas.adicionaOpcaoTema($trad("t32"),$trad("t33"),'i3GEO.tema.dialogo.editaLegenda(\"'+ltema.name+'\")',node); } if(funcoes.destacar === true && i3GEO.Interface.ATUAL !== "googlemaps" && i3GEO.Interface.ATUAL !== "googleearth"){ i3GEO.arvoreDeCamadas.adicionaOpcaoTema($trad("t34"),$trad("t35"),'i3GEO.navega.destacaTema.inicia(\"'+ltema.name+'\")',node); } //as opções SLD foram migradas para a ferramenta de edição de legenda //i3GEO.arvoreDeCamadas.adicionaOpcaoTema($trad("t38"),$trad("t39"),'i3GEO.tema.dialogo.sld(\"'+ltema.name+'\")',node); //i3GEO.arvoreDeCamadas.adicionaOpcaoTema($trad("t43"),$trad("t43"),'i3GEO.tema.dialogo.aplicarsld(\"'+ltema.name+'\")',node); if(funcoes.sql === true && ltema.editorsql.toLowerCase() === "sim") {i3GEO.arvoreDeCamadas.adicionaOpcaoTema($trad("t40"),$trad("t41"),'i3GEO.tema.dialogo.editorsql(\"'+ltema.name+'\")',node);} if(funcoes.comentar === true && ltema.permitecomentario.toLowerCase() !== "nao" && i3GEO.arvoreDeTemas.OPCOESADICIONAIS.comentarios === true) {i3GEO.arvoreDeCamadas.adicionaOpcaoTema($trad("t45"),$trad("t45"),'i3GEO.tema.dialogo.comentario(\"'+ltema.name+'\")',node);} if(funcoes.wms === true && ltema.permiteogc.toLowerCase() !== "nao"){ i3GEO.arvoreDeCamadas.adicionaOpcaoTema("Getcapabilities",'WMS-OGC','i3GEO.tema.dialogo.mostraWms(\"'+ltema.name+'\")',node); } if(i3GEO.parametros.editor.toLowerCase() === "sim") {i3GEO.arvoreDeCamadas.adicionaOpcaoTema($trad("t44"),""+$trad("t44")+"",'i3GEO.tema.dialogo.salvaMapfile(\"'+ltema.name+'\")',node);} if(funcoes.tme === true) {i3GEO.arvoreDeCamadas.adicionaOpcaoTema($trad("t49"),$trad("t49"),'i3GEO.tema.dialogo.tme(\"'+ltema.name+'\")',node);} node.loadComplete(); }, /* Function: adicionaOpcaoTema Adiciona uma nova opção no nó de opções de um tema Parametros: dica {String} - dica que será mostrada na janela de mensagens do mapa quando o usuário sobrepoem o mouse titulo {String} - título que será mostrado no nó onclick {String} - string que define o evento onclick sobre o título da opção node {String} - objeto node da árvore (YUI) que receberá o novo nó */ adicionaOpcaoTema:function(dica,titulo,onclick,node){ var tnome = ""+titulo+" "; new YAHOO.widget.HTMLNode({html:tnome,enableHighlight:false,isLeaf:true,expanded:false}, node); }, /* Function: mostraLegenda Monta os nós filhos do nó "legenda" Parametro: node - {YAHOO.widget.HTMLNode} */ mostraLegenda: function(node){ if(typeof(console) !== 'undefined'){console.info("i3GEO.arvoreDeCamadas.mostraLegenda()");} var retorna, idtema = node.data.idlegenda; retorna = function(retorno){ var original = {data:""}, i,re,tabela,linhas,linha,colunas,incluir,elementos,nelementos,inputs,desativar,nindices; if(retorno.data.legenda){ original = retorno; retorno = retorno.data.legenda; if (retorno[0]){ if ((navn) && (!retorno[0].imagem)){tabela = retorno;} else{ i = retorno[0].imagem; re = new RegExp("tiff", "g"); i = i.replace(re,'png'); tabela = ""; } retorno = ""; } else{ linhas = retorno.split("#"); if (linhas.length > 1){ linhas = retorno.split("|"); tabela = ""; linha = linhas.length-1; if(linha >= 0){ do{ colunas = linhas[linha].split("#"); re = new RegExp("'", "g"); tabela += ""; } while(linha--); } tabela += "
"+colunas[2]+"

"; } else{tabela = retorno;} } } else {tabela = "";} //o tema é um wms incluir = "
"+tabela+"
"; new YAHOO.widget.HTMLNode({html:incluir,enableHighlight:false,expanded:false}, node); node.loadComplete(); // //desliga os checkbox que foram desativados //pega os objetos input // elementos = document.getElementById(idtema+"verdiv").getElementsByTagName("input"); nelementos = elementos.length; inputs = []; i = 0; if (nelementos > 0){ do{ if (elementos[i].type === "checkbox") {inputs.push(elementos[i]);} i++; } while(i < nelementos); } if(original.data.desativar){ desativar = original.data.desativar; nindices = desativar.length; i = 0; if (nindices > 0){ do{ inputs[desativar[i]].checked = false; i++; } while(i < nindices); } } }; if(i3GEO.configura.templateLegenda !== "") {i3GEO.php.criaLegendaHTML(retorna,idtema,i3GEO.configura.templateLegenda);} else {i3GEO.php.criaLegendaHTML(retorna,idtema);} }, /* Function: atualizaLegenda Atualiza a legenda de um tema. A legenda precisa ser atualizada emalgumas circunstâncias, como quando é feitoumzoom no mapa. Parametro: id {String} - ID (name) do tema */ atualizaLegenda: function(idtema){ if(typeof(console) !== 'undefined'){console.info("i3GEO.arvoreDeCamadas.atualizaLegenda()");} var node; if(document.getElementById(idtema+"verdiv")) { node = i3GEO.arvoreDeCamadas.ARVORE.getNodeByProperty("idlegenda",idtema); if(node) { i3GEO.arvoreDeCamadas.ARVORE.removeChildren(node); this.mostraLegenda(node); //atualiza as janelas individuais com as legendas de cada tema if($i("janelaLegenda"+idtema+"_corpo")) {i3GEO.tema.mostralegendajanela(idtema,"","abrejanela");} } } }, /* Function: escolheCorClasse Abre uma janela para escolher uma nova cor para o símbolo da classe. A chamada dessa função é definida em aplicmap/legenda2.htm Parametro: leg {Object input} - objeto do tipo INPUT com o id da classe e o id do tema */ escolheCorClasse: function (leg){ //cria um elemento que receberá a escolha da cor e que irá disparar a função de mudança de cor da classe var obj,novoel; leg = leg.parentNode.getElementsByTagName("input")[0]; if(!$i("tempinputcorclasse")){ novoel = document.createElement("input"); novoel.id = "tempinputcorclasse"; novoel.style.display="none"; novoel.alt = "objeto criado para guardar dados da funcao escolohercorclasse"; novoel.onchange = ""; document.body.appendChild(novoel); } obj = $i("tempinputcorclasse"); obj.value = ""; obj.tema = leg.name; obj.idclasse = leg.value; obj.onchange = function(){ var obj = $i("tempinputcorclasse"); i3GEO.tema.alteracorclasse(obj.tema,obj.idclasse,obj.value); }; i3GEO.util.abreCor("","tempinputcorclasse"); }, /* Function: inverteStatusClasse Liga ou desliga uma classe da legenda. A chamada dessa função é definida em aplicmap/legenda2.htm Parametro: leg {Object input} - objeto do tipo INPUT com o id da classe e o id do tema */ inverteStatusClasse: function (leg){ var temp = function(retorno){ i3GEO.atualiza(); i3GEO.Interface.atualizaTema(retorno,leg.name); }; i3GEO.php.inverteStatusClasse(temp,leg.name,leg.value); }, /* Function: montaTextoTema Monta o texto com o título do tema. Esse texto é o que será mostrado nos nós principais da árvore e contém o checkbox para ligar e desligar o tema. Parametro: tema - {Object} - objeto JSON com as propriedades do tema Return: {String} - texto formatado */ montaTextoTema: function(tema){ var ck,html,estilo, iu = i3GEO.util; if(tema.status*1 === 2) {ck = ' CHECKED ';} else {ck = "";} // //verifica se o filtro de camadas está ativo // if(this.FILTRO !== ""){ if(this.FILTRO === "desligados" && ck !== "") {return "";} if(this.FILTRO === "ligados" && ck === "") {return "";} if(this.FILTRO === "selecionados" && tema.sel.toLowerCase() !== "sim") {return "";} if(this.FILTRO === "download" && tema.download.toLowerCase() !== "sim") {return "";} if(this.FILTRO === "wms" && tema.connectiontype*1 !== 7) {return "";} if(this.FILTRO === "raster" && tema.type*1 !== 3) {return "";} if(this.FILTRO === "toponimia" && tema.type*1 !== 4) {return "";} } estilo = navm ? "text-align:left;font-size:11px;vertical-align:middle;display:table-cell;" : "text-align:left;font-size:11px;vertical-align:top;"; html = "

"; estilo = navm ? "cursor:pointer;vertical-align:15%;" : "cursor:pointer;"; html += "";} // //inclui icone indicando que o tema muda conforme a escala // if (tema.contextoescala.toLowerCase() === "sim") {html += " ";} if (tema.sel.toLowerCase() === "sim"){ html += " "; html += " "; } //manter a lógica de exigir sim ao invés de vazio if (tema.download.toLowerCase() === "sim") {html += " ";} estilo = navm ? "cursor:move;vertical-align:35%;padding-top:0px;color:black;" : "cursor:move;vertical-align:20%;color:black;"; if(i3GEO.arvoreDeCamadas.AGUARDALEGENDA) {html += " "+tema.tema+"";} else {html += " "+tema.tema+"";} html += "

"; if(i3GEO.tema.TEMPORIZADORESID[tema.name] == undefined && tema.temporizador != "") {i3GEO.tema.temporizador(tema.name,tema.temporizador);} return(html); }, /* Function: atualizaFarol Atualiza o farol de cada tema. O farol identifica a compatibilidade da escala do mapa com a escala de cada tema Parametro: mapscale {Numeric} - escala de comparação com a escala de cada tema */ atualizaFarol: function(mapscale) { if(typeof(console) !== 'undefined'){console.info("i3GEO.arvoreDeCamadas.atualizaFarol()");} //YAHOO.log("Atualizando o farol da árvore de camadas", "i3geo"); var farol,l,ltema,escala, iu = i3GEO.util, im = i3GEO.configura.locaplic+"/imagens/", camadas = i3GEO.arvoreDeCamadas.CAMADAS; farol = "maisamarelo.png"; l = camadas.length-1; if (l >= 0){ do{ ltema = camadas[l]; escala = ltema.escala; if (escala*1 < mapscale*1) {farol = "maisverde.png";} if (escala*1 > mapscale*1) {farol = "maisvermelho.png";} if (escala*1 === 0) {farol = "maisamarelo.png";} iu.defineValor("farol"+ltema.name,"src",im+farol); } while(l--); } }, /* Function: aplicaTemas Refaz o mapa ligando e desligando os temas conforme consta na árvore de camadas ou ligando/desligando todos Parametro: tipo {String} - tipo de operação normal|ligartodos|desligartodos a opção 'normal' irá desligar/ligar o que estiver marcado */ aplicaTemas: function(tipo){ if(arguments.length === 0) {tipo = "normal";} if(typeof(console) !== 'undefined'){console.info("i3GEO.arvoreDeCamadas.aplicaTemas()");} var t = "", temp; if(tipo === "normal") {t = i3GEO.arvoreDeCamadas.listaLigadosDesligados("mantem");} if(tipo === "ligartodos"){ t = i3GEO.arvoreDeCamadas.listaLigadosDesligados("marca"); if(i3GEO.util.in_array(i3GEO.Interface.ATUAL,["googleearth","openlayers","googlemaps"])) {return;} } if(tipo === "desligartodos"){ t = i3GEO.arvoreDeCamadas.listaLigadosDesligados("desmarca"); if(i3GEO.util.in_array(i3GEO.Interface.ATUAL,["googleearth","openlayers","googlemaps"])) {return;} } // //zera o contador de tempo // temp = function(){ i3GEO.atualiza(); i3GEO.janela.fechaAguarde("redesenha"); }; try{clearTimeout(tempoBotaoAplicar);} catch(erro){ if(typeof(console) !== 'undefined'){console.error(erro);} } tempoBotaoAplicar = ""; if(tipo === "normal"){ i3GEO.php.ligatemas(temp,t[1].toString(),t[0].toString()); return; } if(tipo === "ligartodos"){ i3GEO.php.ligatemas(temp,"",t[2].toString()); return; } if(tipo === "desligartodos"){ i3GEO.php.ligatemas(temp,t[2].toString(),""); } }, /* Function: listaLigadosDesligados Lista os temas que estão ligados e os que estão desligados tendo como fonte de busca os checkbox existentes na árvore. Esse método é mais demorado pois varre a árvore toda. Porém, obtém o status verdadeiro do tema. Parametro: tipo {String} - mantem|marca|desmarca marca, desmarca ou mantém o checkbox após identificar seu status atual Return: {Array} - array de arrays com os códigos dos temas [0]=ligados [1]=desligados [2]=todos na ordem encontrada */ listaLigadosDesligados: function(tipo){ if(!$i(i3GEO.arvoreDeCamadas.IDHTML)) {return [[],[],[]];} if(arguments.length === 0) {tipo = "manter";} if(typeof(console) !== 'undefined'){console.info("i3GEO.arvoreDeCamadas.listaLigadosDesligados()");} var no,cs,csn,j,c, nos = i3GEO.arvoreDeCamadas.ARVORE.getNodesByProperty("tipo","tema"), ligados = [], desligados = [], todos = [], n = nos.length, i=0, ATUAL = i3GEO.Interface.ATUAL; do{ try{ no = nos[i].getEl(); cs = no.getElementsByTagName("input"); csn = cs.length; for(j=0;j 0){ i -= 1; if(camadas[i].name === idtema){ return camadas[i]; } } return ""; }, /* Function: filtraCamadas Busca temas na variável i3GEO.arvoreDeCamadas.CAMADAS aplicando um filtro Parameters: propriedade {string} - propriedade de CAMADAS que será filtrado valor - valor do filtro operador {string} - operador entre propriedade e valor igual|diferente|menor camadas {array} - array do tipo i3GEO.arvoreDeCamadas.CAMADAS Return: {Array} */ filtraCamadas: function(propriedade,valor,operador,camadas){ if(typeof(console) !== 'undefined'){console.info("i3GEO.arvoreDeCamadas.filtraCamadas()");} var resultado = [], i = 0, temp, nelementos = camadas.length, ltema; if (nelementos > 0){ do{ ltema = camadas[i]; if(ltema.escondido.toLowerCase() !== "sim"){ temp = ltema[propriedade]; if(operador === "igual"){ if(temp == valor) //não usar === aqui {resultado.push(ltema);} } if(operador === "diferente"){ if(temp != valor) {resultado.push(ltema);} } if(operador === "menor"){ if(temp < valor) {resultado.push(ltema);} } } i += 1; } while(i < nelementos); } return resultado; }, /* Function: alteraPropCamadas Altera o valor de uma propriedade de um tema do objeto i3GEO.arvoreDeCamadas.CAMADAS Parameters: propriedade {string} - propriedade que será modificada valor - novo valor camada {string} - código da camada */ alteraPropCamadas: function(propriedade,valor,camada){ if(typeof(console) !== 'undefined'){console.info("i3GEO.arvoreDeCamadas.alteraPropCamadas()");} var i = 0, nelementos = i3GEO.arvoreDeCamadas.CAMADAS.length, ltema; if (nelementos > 0){ do{ ltema = i3GEO.arvoreDeCamadas.CAMADAS[i]; if(ltema.name === camada){ ltema[propriedade] = valor; } i += 1; } while(i < nelementos); } }, /* Function: verificaAbrangenciaTemas Verifica se um tema está ou não na abrangência espacial do mapa atual modificando a cor com que o nome é mostrado na árvore */ verificaAbrangenciaTemas: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.arvoreDeCamadas.verificaAbrangenciaTemas()");} if(i3GEO.arvoreDeCamadas.VERIFICAABRANGENCIATEMAS === false) {return;} try{ var i = 0, temp, nelementos = i3GEO.arvoreDeCamadas.CAMADAS.length, ltema; if (nelementos > 0){ do{ ltema = i3GEO.arvoreDeCamadas.CAMADAS[i]; temp = ltema.exttema; if(temp !== ""){ if(i3GEO.util.intersectaBox(temp,i3GEO.parametros.mapexten) === false){ $i("ArvoreTituloTema"+ltema.name).style.color = "gray"; } else{ $i("ArvoreTituloTema"+ltema.name).style.color = "black"; } } i += 1; } while(i < nelementos); } } catch(e){} }, /* Function: verificaAplicaExtensao Verifica se algum tema está marcado com o metadado Aplicaextensao. Retorna a primeira ocorrência se houver Return: {string} código do tema ou "" */ verificaAplicaExtensao: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.arvoreDeCamadas.verificaAplicaExtensao()");} var i = 0, temp = "", nelementos = i3GEO.arvoreDeCamadas.CAMADAS.length, ltema; try{ if (nelementos > 0){ do{ ltema = i3GEO.arvoreDeCamadas.CAMADAS[i]; if(ltema.aplicaextensao.toLowerCase() === "sim"){ temp = ltema.name; } i += 1; } while(i < nelementos); } } catch(e){return "";} return temp; }, /* Classe: i3GEO.arvoreDeCamadas.dialogo Abre as telas de diálogo das opções de manipulação da árvore */ dialogo: { /* Function: abreFiltro Abre a janela de diálogo para o usuário escolher ou alterar o filtro aplicado à árvore */ filtro: function(){ i3GEO.util.dialogoFerramenta("i3GEO.arvoreDeCamadas.dialogo.filtro()","filtroarvore","filtroarvore"); }, /* Function: excluir Abre a janela de diálogo para o usuário escolher os temas que serão excluídos da árvore */ excluir: function(){ i3GEO.util.dialogoFerramenta("i3GEO.arvoreDeCamadas.dialogo.excluir()","excluirarvore","excluirarvore"); } } };