Merge pull request #1273 from tschaub/select-layers
Rename layerFilter option to layers and accept array for select interaction.
This commit is contained in:
@@ -92,13 +92,14 @@ var vector = new ol.layer.Vector({
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
var selectInteraction = new ol.interaction.Select({
|
var select = new ol.interaction.Select({
|
||||||
layerFilter: function(layer) { return layer.get('id') == 'vector'; }
|
layers: [vector]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var modify = new ol.interaction.Modify();
|
||||||
|
|
||||||
var map = new ol.Map({
|
var map = new ol.Map({
|
||||||
interactions: ol.interaction.defaults().extend(
|
interactions: ol.interaction.defaults().extend([select, modify]),
|
||||||
[selectInteraction, new ol.interaction.Modify()]),
|
|
||||||
layers: [raster, vector],
|
layers: [raster, vector],
|
||||||
renderer: ol.RendererHint.CANVAS,
|
renderer: ol.RendererHint.CANVAS,
|
||||||
target: 'map',
|
target: 'map',
|
||||||
|
|||||||
@@ -47,12 +47,12 @@ var vector = new ol.layer.Vector({
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
var selectInteraction = new ol.interaction.Select({
|
var select = new ol.interaction.Select({
|
||||||
layerFilter: function(layer) { return layer.get('id') == 'vector'; }
|
layers: [vector]
|
||||||
});
|
});
|
||||||
|
|
||||||
var map = new ol.Map({
|
var map = new ol.Map({
|
||||||
interactions: ol.interaction.defaults().extend([selectInteraction]),
|
interactions: ol.interaction.defaults().extend([select]),
|
||||||
layers: [raster, vector],
|
layers: [raster, vector],
|
||||||
renderer: ol.RendererHint.CANVAS,
|
renderer: ol.RendererHint.CANVAS,
|
||||||
target: 'map',
|
target: 'map',
|
||||||
|
|||||||
@@ -395,8 +395,8 @@
|
|||||||
* modifier (e.g. shift key) that determines if the interaction is active
|
* modifier (e.g. shift key) that determines if the interaction is active
|
||||||
* (i.e. selection occurs) or not. By default, a click with no modifier keys
|
* (i.e. selection occurs) or not. By default, a click with no modifier keys
|
||||||
* toggles the selection.
|
* toggles the selection.
|
||||||
* @property {undefined|function(ol.layer.Layer):boolean} layerFilter Filter
|
* @property {undefined|Array.<ol.layer.Layer>|function(ol.layer.Layer):boolean} layers
|
||||||
* function to restrict selection to a subset of layers.
|
* Layers or filter function to restrict selection to a subset of layers.
|
||||||
* @todo stability experimental
|
* @todo stability experimental
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
goog.provide('ol.interaction.Select');
|
goog.provide('ol.interaction.Select');
|
||||||
|
|
||||||
goog.require('goog.array');
|
goog.require('goog.array');
|
||||||
|
goog.require('goog.asserts');
|
||||||
goog.require('ol.Feature');
|
goog.require('ol.Feature');
|
||||||
goog.require('ol.events.ConditionType');
|
goog.require('ol.events.ConditionType');
|
||||||
goog.require('ol.events.condition');
|
goog.require('ol.events.condition');
|
||||||
@@ -34,12 +35,19 @@ ol.interaction.Select = function(opt_options) {
|
|||||||
this.addCondition_ = goog.isDef(options.addCondition) ?
|
this.addCondition_ = goog.isDef(options.addCondition) ?
|
||||||
options.addCondition : ol.events.condition.shiftKeyOnly;
|
options.addCondition : ol.events.condition.shiftKeyOnly;
|
||||||
|
|
||||||
|
var layerFilter = options.layers;
|
||||||
|
if (!goog.isDef(layerFilter)) {
|
||||||
|
layerFilter = goog.functions.TRUE;
|
||||||
|
} else if (goog.isArray(layerFilter)) {
|
||||||
|
layerFilter = function(layer) {return options.layers.indexOf(layer) > -1;};
|
||||||
|
}
|
||||||
|
goog.asserts.assertFunction(layerFilter);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {null|function(ol.layer.Layer):boolean}
|
* @type {function(ol.layer.Layer):boolean}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
this.layerFilter_ = goog.isDef(options.layerFilter) ?
|
this.layerFilter_ = layerFilter;
|
||||||
options.layerFilter : null;
|
|
||||||
|
|
||||||
goog.base(this);
|
goog.base(this);
|
||||||
};
|
};
|
||||||
@@ -53,10 +61,8 @@ ol.interaction.Select.prototype.handleMapBrowserEvent =
|
|||||||
function(mapBrowserEvent) {
|
function(mapBrowserEvent) {
|
||||||
if (this.condition_(mapBrowserEvent)) {
|
if (this.condition_(mapBrowserEvent)) {
|
||||||
var map = mapBrowserEvent.map;
|
var map = mapBrowserEvent.map;
|
||||||
var layers = map.getLayerGroup().getLayersArray();
|
var layers = goog.array.filter(
|
||||||
if (!goog.isNull(this.layerFilter_)) {
|
map.getLayerGroup().getLayersArray(), this.layerFilter_);
|
||||||
layers = goog.array.filter(layers, this.layerFilter_);
|
|
||||||
}
|
|
||||||
var clear = !this.addCondition_(mapBrowserEvent);
|
var clear = !this.addCondition_(mapBrowserEvent);
|
||||||
|
|
||||||
var that = this;
|
var that = this;
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ describe('ol.interaction.Select', function() {
|
|||||||
vector = new ol.layer.Vector({source: new ol.source.Vector({})});
|
vector = new ol.layer.Vector({source: new ol.source.Vector({})});
|
||||||
vector.addFeatures(features);
|
vector.addFeatures(features);
|
||||||
select = new ol.interaction.Select({
|
select = new ol.interaction.Select({
|
||||||
layerFilter: function(layer) { return layer === vector; }
|
layers: [vector]
|
||||||
});
|
});
|
||||||
map.getInteractions().push(select);
|
map.getInteractions().push(select);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user