diff --git a/src/module_vmap/module/javascript/app/vmap/mapmanager/layerstree.js b/src/module_vmap/module/javascript/app/vmap/mapmanager/layerstree.js index 120e98bda666acaeed717e9dc7d14060983662d4..1ec2f59db6427c0aeb5276b0c29a9a9190a9139b 100644 --- a/src/module_vmap/module/javascript/app/vmap/mapmanager/layerstree.js +++ b/src/module_vmap/module/javascript/app/vmap/mapmanager/layerstree.js @@ -667,6 +667,8 @@ nsVmap.nsMapManager.LayersTree.prototype.LayertreeController.prototype.toggleLay } else { this.closeLayersMenus(); oLayer['displayedMenu'] = true; + // Si toutes les couches sont activés : le checkbox pour activer ou désactiver toutes les couches est coché. + this.setAllSublayersActivationCheckbox(oLayer["olLayer"]); } // Resize la fenêtre @@ -749,6 +751,9 @@ nsVmap.nsMapManager.LayersTree.prototype.LayertreeController.prototype.toggleSub this.activeSublayer(olLayer, sSublayer); } + // Si toutes les couches sont activés : le checkbox pour activer ou désactiver toutes les couches est coché. + this.setAllSublayersActivationCheckbox(olLayer); + // oVmap['scope'].$broadcast('layersChanged'); }; @@ -1021,3 +1026,41 @@ nsVmap.nsMapManager.LayersTree.prototype.LayertreeController.prototype.setSublay oVmap['scope'].$broadcast('layersChanged'); } + +/** + * Toggle all the sublayers in the olLayer + * @param {ol.Layer} oLayer + * @param {string} sCheckboxId + * @export + */ +nsVmap.nsMapManager.LayersTree.prototype.LayertreeController.prototype.toggleAllSubLayers = function (oLayer, sCheckboxId) { + oVmap.log('nsVmap.nsMapManager.LayersTree.LayertreeController.toggleAllSubLayers'); + var aAvailableSublayers = angular.copy(oLayer["olLayer"]["get"]('sublayers')); + var bLayersVisibility = document.getElementById(sCheckboxId).checked; + for (var i = 0; i < aAvailableSublayers.length; i++) { + if (bLayersVisibility || i == 0) + this.activeSublayer(oLayer["olLayer"], aAvailableSublayers[i]); + else + this.unactiveSublayer(oLayer["olLayer"], aAvailableSublayers[i], '#' + oLayer["olLayer"].$$hashKey + '_sublayer_' + aAvailableSublayers[i] + '_visible_checkbox'); + } + oLayer["olLayer"]["allSublayersActive"] = bLayersVisibility; + oVmap['scope'].$broadcast('layersChanged'); +}; + +/* +* LayertreeController.prototype.setAllSublayersActivationCheckbox - Coche ou décoche le checkbox pour activer ou désactiver toutes les couches +* +* @param {ol.Layer} olLayer +* @export +*/ +nsVmap.nsMapManager.LayersTree.prototype.LayertreeController.prototype.setAllSublayersActivationCheckbox = function(olLayer) { + oVmap.log('nsVmap.nsMapManager.LayersTree.LayertreeController.setAllSublayersActivationCheckbox'); + var aAvailableSublayers = olLayer.get('sublayers'); + var aActiveSublayers = olLayer.get('activeSublayers'); + if (goog.isArray(aAvailableSublayers) && goog.isArray(aAvailableSublayers)) { + if (aAvailableSublayers.length == aActiveSublayers.length) + olLayer["allSublayersActive"] = true; + else + olLayer["allSublayersActive"] = false; + } +}; diff --git a/src/module_vmap/module/template/layers/layertree.html b/src/module_vmap/module/template/layers/layertree.html index 3141c44e2381b972cbd1df47df5f2c3cd7f5de90..16ede7a751f412636438248f9bad2648fedba6af 100644 --- a/src/module_vmap/module/template/layers/layertree.html +++ b/src/module_vmap/module/template/layers/layertree.html @@ -117,19 +117,37 @@ </div> </a> </li> + <!-- Coche ou décoche toutes les couches --> + <li ng-if="layer.olLayer.get('sublayers').length > 1"> + <div class="sublayer-checkboxes"> + <!-- Checkbox interrogation GetFeatureInfo --> + <div class="checkbox checkbox-success sublayer-checkbox inline-checkbox" ng-if="layer.olLayer.values.is_queryable_getfeatureinfo === true && ctrl.properties.selection.enable_getfeatureinfo === true"> + </div> + <!-- Checkbox visible --> + <div class="checkbox checkbox-info inline-checkbox" ng-class="{'checkbox_indeterminate' : layer.olLayer.allSublayersActive === false}"> + <input id="{{layer.$$hashKey}}_all_sublayer_visibility_checkbox" + type="checkbox" + style="cursor:pointer; position: absolute" + title="Définition de la visibilité de toutes les couches" + ng-checked="layer.olLayer.allSublayersActive" + ng-click="ctrl.toggleAllSubLayers(layer, layer.$$hashKey + '_all_sublayer_visibility_checkbox')"> + <label for="{{layer.$$hashKey}}_all_sublayer_visibility_checkbox" style="cursor:pointer" title="Définition de la visibilité de toutes les couches"></label> + </div> + </div> + </li> <li ng-if="layer.olLayer.get('type') === 'imagewms' || layer.olLayer.get('type') === 'tilewms'" ng-repeat="sublayer in layer.olLayer.get('sublayers')"> <div class="sublayer-checkboxes"> <!-- Checkbox interrogation GetFeatureInfo --> <div class="checkbox checkbox-success sublayer-checkbox inline-checkbox" ng-if="layer.olLayer.values.is_queryable_getfeatureinfo === true && ctrl.properties.selection.enable_getfeatureinfo === true"> <input id="{{layer.$$hashKey}}_sublayer_{{sublayer}}_wms_queryable_checkbox" - type="checkbox" - style="cursor:pointer; position: absolute" - title="Definit si la couche est est interrogeable par requête WMS" - ng-checked="ctrl.isSublayerWMSQueryable(layer.olLayer, sublayer)" - ng-disabled="layer.olLayer.values.visible !== true" - ng-click="ctrl.toggleSublayerWMSQueryable(layer.olLayer, sublayer)"> - <label for="{{layer.$$hashKey}}_sublayer_{{sublayer}}_wms_queryable_checkbox" style="cursor:pointer" title="Definit si la couche est interrogeable par requête WMS"></label> + type="checkbox" + style="cursor:pointer; position: absolute" + title="Definit si la couche est est interrogeable par requête WMS" + ng-checked="ctrl.isSublayerWMSQueryable(layer.olLayer, sublayer)" + ng-disabled="layer.olLayer.values.visible !== true" + ng-click="ctrl.toggleSublayerWMSQueryable(layer.olLayer, sublayer)"> + <label for="{{layer.$$hashKey}}_sublayer_{{sublayer}}_wms_queryable_checkbox" style="cursor:pointer" title="Definit si la couche est interrogeable par requête WMS"></label> </div> <!-- Checkbox visible --> <div class="checkbox checkbox-info sublayer-checkbox inline-checkbox">