Commit de0cc17b8695c995e6d3dfc42c6738cbc3780783

Authored by Edmar Moretti
1 parent 21ff17e6

Inclusão de botão de seleção no editor vetorial em OL3

classesphp/mapa_controle.php
@@ -2282,7 +2282,7 @@ switch (strtoupper($funcao)) @@ -2282,7 +2282,7 @@ switch (strtoupper($funcao))
2282 /* 2282 /*
2283 Valor: LISTAEPSG 2283 Valor: LISTAEPSG
2284 2284
2285 - Pega os cdigos de projeção EPSG. 2285 + Pega os codigos de projeção EPSG.
2286 2286
2287 */ 2287 */
2288 case "LISTAEPSG": 2288 case "LISTAEPSG":
ferramentas/editorol/editorol.js
@@ -213,6 +213,8 @@ i3GEO.editorOL = @@ -213,6 +213,8 @@ i3GEO.editorOL =
213 maxext : "", 213 maxext : "",
214 mapext : [-76.5125927, -39.3925675209, -29.5851853, 9.49014852081], 214 mapext : [-76.5125927, -39.3925675209, -29.5851853, 9.49014852081],
215 mapa : "", 215 mapa : "",
  216 + //ids das features graficas selecionadas
  217 + idsSelecionados : [],
216 //utilizado pelo mashup 218 //utilizado pelo mashup
217 inicia : function() { 219 inicia : function() {
218 // ativabotoes e boolean 220 // ativabotoes e boolean
@@ -986,7 +988,9 @@ i3GEO.editorOL = @@ -986,7 +988,9 @@ i3GEO.editorOL =
986 n = botoes.length; 988 n = botoes.length;
987 for(i = 0; i < n; i++){ 989 for(i = 0; i < n; i++){
988 botoes[i].className = botoes[i].className.replace("ItemActive","ItemInactive"); 990 botoes[i].className = botoes[i].className.replace("ItemActive","ItemInactive");
989 - botoes[i].className = botoes[i].className.replace(classeBotao+"ItemInactive",classeBotao+"ItemActive"); 991 + if(classeBotao){
  992 + botoes[i].className = botoes[i].className.replace(classeBotao+"ItemInactive",classeBotao+"ItemActive");
  993 + }
990 } 994 }
991 i3GEO.editorOL.removeInteracoes(); 995 i3GEO.editorOL.removeInteracoes();
992 }, 996 },
@@ -1006,7 +1010,7 @@ i3GEO.editorOL = @@ -1006,7 +1010,7 @@ i3GEO.editorOL =
1006 $i("i3GEObarraEdicao").style.display = "block"; 1010 $i("i3GEObarraEdicao").style.display = "block";
1007 return; 1011 return;
1008 } 1012 }
1009 - var temp, controles = [], adiciona = true; 1013 + var temp;
1010 //cria o painel onde entrarão os icones 1014 //cria o painel onde entrarão os icones
1011 i3GEOpanelEditor = document.createElement("div"); 1015 i3GEOpanelEditor = document.createElement("div");
1012 i3GEOpanelEditor.id = "i3GEObarraEdicao"; 1016 i3GEOpanelEditor.id = "i3GEObarraEdicao";
@@ -1098,7 +1102,7 @@ i3GEO.editorOL = @@ -1098,7 +1102,7 @@ i3GEO.editorOL =
1098 temp.onclick = function(){ 1102 temp.onclick = function(){
1099 i3GEO.editorOL.marcaBotao("editorOLarea"); 1103 i3GEO.editorOL.marcaBotao("editorOLarea");
1100 i3GEO.barraDeBotoes.defBotao("area").funcaoonclick; 1104 i3GEO.barraDeBotoes.defBotao("area").funcaoonclick;
1101 - } 1105 + };
1102 i3GEOpanelEditor.appendChild(temp); 1106 i3GEOpanelEditor.appendChild(temp);
1103 } 1107 }
1104 if (botoes.linha === true) { 1108 if (botoes.linha === true) {
@@ -1183,7 +1187,7 @@ i3GEO.editorOL = @@ -1183,7 +1187,7 @@ i3GEO.editorOL =
1183 i3GEO.eventos.cliquePerm.desativa(); 1187 i3GEO.eventos.cliquePerm.desativa();
1184 temp = document.createElement("div"); 1188 temp = document.createElement("div");
1185 temp.className = "editorOLpoligonoItemInactive olButton"; 1189 temp.className = "editorOLpoligonoItemInactive olButton";
1186 - temp.title = $trad("dpoligono"); 1190 + temp.title = $trad("dpol");
1187 temp.onclick = function(){ 1191 temp.onclick = function(){
1188 i3GEO.editorOL.marcaBotao("editorOLpoligono"); 1192 i3GEO.editorOL.marcaBotao("editorOLpoligono");
1189 var draw = new ol.interaction.Draw({ 1193 var draw = new ol.interaction.Draw({
@@ -1200,7 +1204,7 @@ i3GEO.editorOL = @@ -1200,7 +1204,7 @@ i3GEO.editorOL =
1200 width: i3GEO.editorOL.simbologia.strokeWidth 1204 width: i3GEO.editorOL.simbologia.strokeWidth
1201 }), 1205 }),
1202 fill: new ol.style.Fill({ 1206 fill: new ol.style.Fill({
1203 - color: 'rgba(' + i3GEO.editorOL.simbologia.fillColor + ',' + i3GEO.editorOL.simbologia.opacidade + ')' 1207 + color: 'rgba(' + i3GEO.editorOL.simbologia.fillColor + ',' + i3GEO.editorOL.simbologia.opacidade + ')'
1204 }) 1208 })
1205 }) 1209 })
1206 ); 1210 );
@@ -1215,43 +1219,137 @@ i3GEO.editorOL = @@ -1215,43 +1219,137 @@ i3GEO.editorOL =
1215 }; 1219 };
1216 i3GEOpanelEditor.appendChild(temp); 1220 i3GEOpanelEditor.appendChild(temp);
1217 } 1221 }
1218 - 1222 +
  1223 + if (botoes.texto === true) {
  1224 + i3GEO.eventos.cliquePerm.desativa();
  1225 + temp = document.createElement("div");
  1226 + temp.className = "editorOLtextoItemInactive olButton";
  1227 + temp.title = $trad("dtexto");
  1228 + temp.onclick = function(){
  1229 + i3GEO.eventos.cliquePerm.desativa();
  1230 + i3GEO.editorOL.marcaBotao("editorOLtexto");
  1231 + var draw = new ol.interaction.Draw({
  1232 + type : "Point"
  1233 + });
  1234 + //adiciona a interacao para poder ser removida
  1235 + i3GEO.editorOL.interacoes.push(draw);
  1236 + i3GEO.Interface.openlayers.interacoes[0].setActive(false);
  1237 + draw.on("drawend", function(evt) {
  1238 + var texto = window.prompt("Texto", "");
  1239 + evt.feature.setStyle(
  1240 + new ol.style.Style({
  1241 + text: new ol.style.Text({
  1242 + text: texto,
  1243 + font: 'Bold ' + i3GEO.editorOL.simbologia.fontSize + 'px Arial',
  1244 + textAlign: 'left',
  1245 + stroke: new ol.style.Stroke({
  1246 + color: 'white',
  1247 + width: i3GEO.editorOL.simbologia.strokeWidth
  1248 + }),
  1249 + fill: new ol.style.Fill({
  1250 + color: i3GEO.editorOL.simbologia.fontColor
  1251 + }),
  1252 + zIndex: 2000
  1253 + })
  1254 + })
  1255 + );
  1256 + i3GEO.desenho.layergrafico.getSource().addFeature(evt.feature);
  1257 + draw.setActive(false);
  1258 + draw.setActive(true);
  1259 + i3GEO.editorOL.marcaBotao();
  1260 + });
  1261 + i3geoOL.addInteraction(draw);
  1262 + };
  1263 + i3GEOpanelEditor.appendChild(temp);
  1264 + }
  1265 +
  1266 + if (botoes.selecao === true) {
  1267 + i3GEO.eventos.cliquePerm.desativa();
  1268 + temp = document.createElement("div");
  1269 + temp.className = "editorOLselecaoItemInactive olButton";
  1270 + temp.title = $trad("d24t");
  1271 + temp.onclick = function(){
  1272 + i3GEO.editorOL.marcaBotao("editorOLselecao");
  1273 + var sel = new ol.interaction.Select();
  1274 + //adiciona a interacao para poder ser removida
  1275 + i3GEO.editorOL.interacoes.push(sel);
  1276 + i3GEO.Interface.openlayers.interacoes[0].setActive(false);
  1277 + sel.on("select", function(evt) {
  1278 + var i, n, id, f;
  1279 + n = evt.selected.length;
  1280 + for(i=0; i<n; i++){
  1281 + f = evt.selected[i];
  1282 + id = f.getId();
  1283 + if(id && i3GEO.util.in_array(id,i3GEO.editorOL.idsSelecionados)){
  1284 + i3GEO.editorOL.unselFeature(id);
  1285 + }
  1286 + else{
  1287 + id = i3GEO.util.uid();
  1288 + i3GEO.editorOL.idsSelecionados.push(id);
  1289 + f.setId(id);
  1290 + f.setProperties({
  1291 + fillColor: f.getStyle().getFill().getColor(),
  1292 + strokeColor: f.getStyle().getStroke().getColor()
  1293 + });
  1294 + f.getStyle().getFill().setColor('rgba(255, 255, 255, 0.5)');
  1295 + f.getStyle().getStroke().setColor('blue');
  1296 + }
  1297 + }
  1298 + if (n === 0){
  1299 + i3GEO.editorOL.unselTodos();
  1300 + }
  1301 + });
  1302 + i3geoOL.addInteraction(sel);
  1303 + };
  1304 + i3GEOpanelEditor.appendChild(temp);
  1305 + }
  1306 +
1219 i3GEOpanelEditor.style.width = i3GEOpanelEditor.getElementsByTagName("div").length * 33 + "px"; 1307 i3GEOpanelEditor.style.width = i3GEOpanelEditor.getElementsByTagName("div").length * 33 + "px";
1220 i3GEO.editorOL.mapa.getViewport().getElementsByClassName("ol-overlaycontainer-stopevent")[0].appendChild(i3GEOpanelEditor); 1308 i3GEO.editorOL.mapa.getViewport().getElementsByClassName("ol-overlaycontainer-stopevent")[0].appendChild(i3GEOpanelEditor);
1221 1309
1222 /* 1310 /*
1223 - if (botoes.texto === true) { 1311 +
  1312 + // botao de selecionar tudo
  1313 + if (botoes.selecaotudo === true) {
1224 1314
1225 - button = new OpenLayers.Control.DrawFeature(i3GEO.desenho.layergrafico, OpenLayers.Handler.Point, {  
1226 - displayClass : "editorOLtexto",  
1227 - title : $trad("dtexto"),  
1228 - type : OpenLayers.Control.TYPE_TOOL,  
1229 - persist : true,  
1230 - callbacks : {  
1231 - done : function(feature) {  
1232 - var texto = window.prompt("Texto", ""), label = new OpenLayers.Feature.Vector(feature);  
1233 - label["attributes"] = {  
1234 - opacidade : 0.1,  
1235 - fillColor : "white",  
1236 - strokeWidth : i3GEO.editorOL.simbologia.strokeWidth,  
1237 - texto : texto,  
1238 - pointRadius : 2,  
1239 - graphicName : "square",  
1240 - strokeColor : "black",  
1241 - fontColor : i3GEO.editorOL.simbologia.fontColor,  
1242 - fontSize : i3GEO.editorOL.simbologia.fontSize,  
1243 - fontFamily : "Arial",  
1244 - fontWeight : "bold",  
1245 - labelAlign : "rt"  
1246 - };  
1247 - if (texto && texto !== "") {  
1248 - i3GEO.desenho.layergrafico.addFeatures([  
1249 - label  
1250 - ]); 1315 + button = new OpenLayers.Control.Button({
  1316 + displayClass : "editorOLselecaoTudo",
  1317 + trigger : function() {
  1318 + var fs = i3GEO.desenho.layergrafico.features, n = fs.length, i;
  1319 + for (i = 0; i < n; i++) {
  1320 + i3GEO.editorOL.selbutton.select(fs[i]);
  1321 + }
  1322 + },
  1323 + title : $trad("studo"),
  1324 + type : OpenLayers.Control.TYPE_BUTTON
  1325 + });
  1326 + controles.push(button);
  1327 + adiciona = true;
  1328 +
  1329 + }
  1330 + if (botoes.apaga === true) {
  1331 +
  1332 + button = new OpenLayers.Control.Button({
  1333 + displayClass : "editorOLapaga",
  1334 + trigger : function() {
  1335 + if (i3GEO.desenho.layergrafico.selectedFeatures.length > 0) {
  1336 + var x = window.confirm($trad("excsel") + "?");
  1337 + if (x) {
  1338 + i3GEO.editorOL.guardaBackup();
  1339 + i3GEO.desenho.layergrafico.removeFeatures(i3GEO.desenho.layergrafico.selectedFeatures);
  1340 + if (document.getElementById("panellistagEditor")) {
  1341 + i3GEO.editorOL.listaGeometrias();
  1342 + }
  1343 + if (typeof i3geoOL !== "undefined") {
  1344 + i3GEO.janela.tempoMsg($trad("meneditor1"));
  1345 + }
1251 } 1346 }
1252 - i3GEO.editorOL.sobeLayersGraficos(); 1347 + } else {
  1348 + i3GEO.janela.tempoMsg($trad("seluma"));
1253 } 1349 }
1254 - } 1350 + },
  1351 + title : $trad("excsel"),
  1352 + type : OpenLayers.Control.TYPE_BUTTON
1255 }); 1353 });
1256 controles.push(button); 1354 controles.push(button);
1257 adiciona = true; 1355 adiciona = true;
@@ -1361,70 +1459,7 @@ i3GEO.editorOL = @@ -1361,70 +1459,7 @@ i3GEO.editorOL =
1361 1459
1362 } 1460 }
1363 // botao de sele&ccedil;&atilde;o 1461 // botao de sele&ccedil;&atilde;o
1364 - if (botoes.selecao === true) {  
1365 -  
1366 - i3GEO.editorOL.selbutton = new OpenLayers.Control.SelectFeature(i3GEO.desenho.layergrafico, {  
1367 - displayClass : "editorOLselecao",  
1368 - title : $trad("d24t"),  
1369 - type : OpenLayers.Control.TYPE_TOOL,  
1370 - clickout : true,  
1371 - toggle : true,  
1372 - multiple : false,  
1373 - hover : false,  
1374 - toggleKey : "ctrlKey", // ctrl key removes from selection  
1375 - multipleKey : "shiftKey", // shift key adds to selection  
1376 - box : false  
1377 - });  
1378 - controles.push(i3GEO.editorOL.selbutton);  
1379 - adiciona = true;  
1380 -  
1381 - }  
1382 - // botao de selecionar tudo  
1383 - if (botoes.selecaotudo === true) {  
1384 -  
1385 - button = new OpenLayers.Control.Button({  
1386 - displayClass : "editorOLselecaoTudo",  
1387 - trigger : function() {  
1388 - var fs = i3GEO.desenho.layergrafico.features, n = fs.length, i;  
1389 - for (i = 0; i < n; i++) {  
1390 - i3GEO.editorOL.selbutton.select(fs[i]);  
1391 - }  
1392 - },  
1393 - title : $trad("studo"),  
1394 - type : OpenLayers.Control.TYPE_BUTTON  
1395 - });  
1396 - controles.push(button);  
1397 - adiciona = true;  
1398 -  
1399 - }  
1400 - if (botoes.apaga === true) {  
1401 -  
1402 - button = new OpenLayers.Control.Button({  
1403 - displayClass : "editorOLapaga",  
1404 - trigger : function() {  
1405 - if (i3GEO.desenho.layergrafico.selectedFeatures.length > 0) {  
1406 - var x = window.confirm($trad("excsel") + "?");  
1407 - if (x) {  
1408 - i3GEO.editorOL.guardaBackup();  
1409 - i3GEO.desenho.layergrafico.removeFeatures(i3GEO.desenho.layergrafico.selectedFeatures);  
1410 - if (document.getElementById("panellistagEditor")) {  
1411 - i3GEO.editorOL.listaGeometrias();  
1412 - }  
1413 - if (typeof i3geoOL !== "undefined") {  
1414 - i3GEO.janela.tempoMsg($trad("meneditor1"));  
1415 - }  
1416 - }  
1417 - } else {  
1418 - i3GEO.janela.tempoMsg($trad("seluma"));  
1419 - }  
1420 - },  
1421 - title : $trad("excsel"),  
1422 - type : OpenLayers.Control.TYPE_BUTTON  
1423 - });  
1424 - controles.push(button);  
1425 - adiciona = true;  
1426 -  
1427 - } 1462 +
1428 // n&atilde;o dispon&iacute;vel ainda 1463 // n&atilde;o dispon&iacute;vel ainda
1429 if (botoes.propriedades === true) { 1464 if (botoes.propriedades === true) {
1430 1465
@@ -2138,12 +2173,18 @@ i3GEO.editorOL = @@ -2138,12 +2173,18 @@ i3GEO.editorOL =
2138 // i3GEO.editorOL.backup.addFeatures(i3GEO.desenho.layergrafico.features); 2173 // i3GEO.editorOL.backup.addFeatures(i3GEO.desenho.layergrafico.features);
2139 }, 2174 },
2140 unselTodos : function() { 2175 unselTodos : function() {
2141 - var n, i;  
2142 - n = i3GEO.desenho.layergrafico.features.length;  
2143 - for (i = 0; i < n; i++) {  
2144 - i3GEO.desenho.layergrafico.features[i].renderIntent = "default";  
2145 - i3GEO.editorOL.selbutton.unselect(i3GEO.desenho.layergrafico.features[i]); 2176 + var i, n, f, s;
  2177 + s = i3GEO.desenho.layergrafico.getSource();
  2178 + n = i3GEO.editorOL.idsSelecionados.length;
  2179 + for(i=0; i<n; i++){
  2180 + f = s.getFeatureById(i3GEO.editorOL.idsSelecionados[i]);
  2181 + if(f){
  2182 + f.getStyle().getFill().setColor(f.getProperties().fillColor);
  2183 + f.getStyle().getStroke().setColor(f.getProperties().strokeColor);
  2184 + }
2146 } 2185 }
  2186 + i3GEO.editorOL.idsSelecionados = [];
  2187 + i3GEO.desenho.layergrafico.getSource().changed();
2147 }, 2188 },
2148 unselTodosBackup : function() { 2189 unselTodosBackup : function() {
2149 var n, i; 2190 var n, i;
@@ -2153,6 +2194,17 @@ i3GEO.editorOL = @@ -2153,6 +2194,17 @@ i3GEO.editorOL =
2153 i3GEO.editorOL.selbutton.unselect(i3GEO.editorOL.backup.features[i]); 2194 i3GEO.editorOL.selbutton.unselect(i3GEO.editorOL.backup.features[i]);
2154 } 2195 }
2155 }, 2196 },
  2197 + unselFeature : function(id) {
  2198 + var f, s;
  2199 + s = i3GEO.desenho.layergrafico.getSource();
  2200 + f = s.getFeatureById(id);
  2201 + if(f){
  2202 + f.getStyle().getFill().setColor(f.getProperties().fillColor);
  2203 + f.getStyle().getStroke().setColor(f.getProperties().strokeColor);
  2204 + }
  2205 + i3GEO.editorOL.idsSelecionados.remove(id);
  2206 + i3GEO.desenho.layergrafico.getSource().changed();
  2207 + },
2156 restauraBackup : function() { 2208 restauraBackup : function() {
2157 if (i3GEO.editorOL.backup.features.length > 0) { 2209 if (i3GEO.editorOL.backup.features.length > 0) {
2158 i3GEO.desenho.layergrafico.removeFeatures(i3GEO.desenho.layergrafico.features); 2210 i3GEO.desenho.layergrafico.removeFeatures(i3GEO.desenho.layergrafico.features);
@@ -2238,9 +2290,6 @@ i3GEO.editorOL = @@ -2238,9 +2290,6 @@ i3GEO.editorOL =
2238 selFeature : function(index) { 2290 selFeature : function(index) {
2239 i3GEO.editorOL.selbutton.select(i3GEO.desenho.layergrafico.features[index]); 2291 i3GEO.editorOL.selbutton.select(i3GEO.desenho.layergrafico.features[index]);
2240 }, 2292 },
2241 - unselFeature : function(index) {  
2242 - i3GEO.editorOL.selbutton.unselect(i3GEO.desenho.layergrafico.features[index]);  
2243 - },  
2244 carregajts : function(funcao) { 2293 carregajts : function(funcao) {
2245 if (i3GEO.configura) { 2294 if (i3GEO.configura) {
2246 i3GEO.util.scriptTag(i3GEO.configura.locaplic + "/pacotes/jsts/lib/jsts.js", funcao, "i3GEOjts", true); 2295 i3GEO.util.scriptTag(i3GEO.configura.locaplic + "/pacotes/jsts/lib/jsts.js", funcao, "i3GEOjts", true);
js/barradebotoes.js
@@ -826,9 +826,9 @@ i3GEO.barraDeBotoes = @@ -826,9 +826,9 @@ i3GEO.barraDeBotoes =
826 eval(l[b].constroiconteudo); 826 eval(l[b].constroiconteudo);
827 } 827 }
828 } 828 }
829 - YAHOO.util.Event.addListener($i(l[b].iddiv), "click", YAHOO.util.Event.preventDefault);  
830 - YAHOO.util.Event.addListener($i(l[b].iddiv), "click", YAHOO.util.Event.stopPropagation);  
831 - YAHOO.util.Event.addFocusListener($i(l[b].iddiv), YAHOO.util.Event.preventDefault); 829 + //YAHOO.util.Event.addListener($i(l[b].iddiv), "click", YAHOO.util.Event.preventDefault);
  830 + //YAHOO.util.Event.addListener($i(l[b].iddiv), "click", YAHOO.util.Event.stopPropagation);
  831 + //YAHOO.util.Event.addFocusListener($i(l[b].iddiv), YAHOO.util.Event.preventDefault);
832 } while (b--); 832 } while (b--);
833 } 833 }
834 if (padrao === "") { 834 if (padrao === "") {
js/ini_i3geo.js
@@ -942,6 +942,7 @@ var i3GEO = { @@ -942,6 +942,7 @@ var i3GEO = {
942 + "px"; 942 + "px";
943 temp.style.width = w 943 temp.style.width = w
944 + "px"; 944 + "px";
  945 + /*
945 YAHOO.util.Event.addListener( 946 YAHOO.util.Event.addListener(
946 temp, 947 temp,
947 "click", 948 "click",
@@ -949,6 +950,7 @@ var i3GEO = { @@ -949,6 +950,7 @@ var i3GEO = {
949 YAHOO.util.Event.addFocusListener( 950 YAHOO.util.Event.addFocusListener(
950 temp, 951 temp,
951 YAHOO.util.Event.preventDefault); 952 YAHOO.util.Event.preventDefault);
  953 + */
952 } 954 }
953 temp = $i(i3GEO.Interface.IDCORPO); 955 temp = $i(i3GEO.Interface.IDCORPO);
954 if (temp) { 956 if (temp) {
@@ -3397,6 +3397,14 @@ i3GEO.util = @@ -3397,6 +3397,14 @@ i3GEO.util =
3397 m = Mustache.render(templateMustache, hashMustache); 3397 m = Mustache.render(templateMustache, hashMustache);
3398 m = m.replace(re, '&'); 3398 m = m.replace(re, '&');
3399 return m; 3399 return m;
  3400 + },
  3401 + /**
  3402 + * Function: uid
  3403 + *
  3404 + * Retorna um ID unico baseado no tempo
  3405 + */
  3406 + uid : function(){
  3407 + return (new Date().getTime()).toString(36);
3400 } 3408 }
3401 }; 3409 };
3402 3410