add onEnter and onLeave callback functions to the DragFeature control, p=adube, r=me (closes #3034)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@11071 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -65,6 +65,28 @@ OpenLayers.Control.DragFeature = OpenLayers.Class(OpenLayers.Control, {
|
|||||||
*/
|
*/
|
||||||
onComplete: function(feature, pixel) {},
|
onComplete: function(feature, pixel) {},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APIProperty: onEnter
|
||||||
|
* {Function} Define this function if you want to know when the mouse
|
||||||
|
* goes over a feature and thereby makes this feature a candidate
|
||||||
|
* for dragging.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* feature - {<OpenLayers.Feature.Vector>} The feature that is ready
|
||||||
|
* to be dragged.
|
||||||
|
*/
|
||||||
|
onEnter: function(feature) {},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APIProperty: onLeave
|
||||||
|
* {Function} Define this function if you want to know when the mouse
|
||||||
|
* goes out of the feature that was dragged.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* feature - {<OpenLayers.Feature.Vector>} The feature that was dragged.
|
||||||
|
*/
|
||||||
|
onLeave: function(feature) {},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* APIProperty: documentDrag
|
* APIProperty: documentDrag
|
||||||
* {Boolean} If set to true, mouse dragging will continue even if the
|
* {Boolean} If set to true, mouse dragging will continue even if the
|
||||||
@@ -192,6 +214,7 @@ OpenLayers.Control.DragFeature = OpenLayers.Class(OpenLayers.Control, {
|
|||||||
this.handlers.drag.activate();
|
this.handlers.drag.activate();
|
||||||
this.over = true;
|
this.over = true;
|
||||||
OpenLayers.Element.addClass(this.map.viewPortDiv, this.displayClass + "Over");
|
OpenLayers.Element.addClass(this.map.viewPortDiv, this.displayClass + "Over");
|
||||||
|
this.onEnter(feature);
|
||||||
} else {
|
} else {
|
||||||
if(this.feature.id == feature.id) {
|
if(this.feature.id == feature.id) {
|
||||||
this.over = true;
|
this.over = true;
|
||||||
@@ -269,6 +292,7 @@ OpenLayers.Control.DragFeature = OpenLayers.Class(OpenLayers.Control, {
|
|||||||
OpenLayers.Element.removeClass(
|
OpenLayers.Element.removeClass(
|
||||||
this.map.viewPortDiv, this.displayClass + "Over"
|
this.map.viewPortDiv, this.displayClass + "Over"
|
||||||
);
|
);
|
||||||
|
this.onLeave(feature);
|
||||||
this.feature = null;
|
this.feature = null;
|
||||||
} else {
|
} else {
|
||||||
if(this.feature.id == feature.id) {
|
if(this.feature.id == feature.id) {
|
||||||
|
|||||||
@@ -71,11 +71,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function test_Control_DragFeature_over(t) {
|
function test_Control_DragFeature_over(t) {
|
||||||
t.plan(3);
|
t.plan(5);
|
||||||
|
var log = [];
|
||||||
var map = new OpenLayers.Map("map");
|
var map = new OpenLayers.Map("map");
|
||||||
var layer = new OpenLayers.Layer.Vector();
|
var layer = new OpenLayers.Layer.Vector();
|
||||||
map.addLayer(layer);
|
map.addLayer(layer);
|
||||||
var control = new OpenLayers.Control.DragFeature(layer);
|
var control = new OpenLayers.Control.DragFeature(layer, {
|
||||||
|
onEnter: function(f) { log.push({feature: f}); }
|
||||||
|
});
|
||||||
map.addControl(control);
|
map.addControl(control);
|
||||||
|
|
||||||
control.activate();
|
control.activate();
|
||||||
@@ -94,6 +97,10 @@
|
|||||||
"control gets the proper feature from the feature handler");
|
"control gets the proper feature from the feature handler");
|
||||||
t.ok(control.handlers.drag.active,
|
t.ok(control.handlers.drag.active,
|
||||||
"drag handler activated when over a feature");
|
"drag handler activated when over a feature");
|
||||||
|
t.eq(log.length, 1,
|
||||||
|
"onEnter called exactly once");
|
||||||
|
t.eq(log[0].feature.id, feature.id,
|
||||||
|
"onEnter called with expected feature");
|
||||||
}
|
}
|
||||||
|
|
||||||
function test_Control_DragFeature_down(t) {
|
function test_Control_DragFeature_down(t) {
|
||||||
@@ -241,11 +248,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function test_Control_DragFeature_out(t) {
|
function test_Control_DragFeature_out(t) {
|
||||||
t.plan(2);
|
t.plan(4);
|
||||||
|
var log = [];
|
||||||
var map = new OpenLayers.Map("map");
|
var map = new OpenLayers.Map("map");
|
||||||
var layer = new OpenLayers.Layer.Vector();
|
var layer = new OpenLayers.Layer.Vector();
|
||||||
map.addLayer(layer);
|
map.addLayer(layer);
|
||||||
var control = new OpenLayers.Control.DragFeature(layer);
|
var control = new OpenLayers.Control.DragFeature(layer, {
|
||||||
|
onLeave: function(f) { log.push({feature: f}); }
|
||||||
|
});
|
||||||
map.addControl(control);
|
map.addControl(control);
|
||||||
|
|
||||||
control.activate();
|
control.activate();
|
||||||
@@ -268,7 +278,10 @@
|
|||||||
map.events.triggerEvent("mousemove", {type: "mousemove"});
|
map.events.triggerEvent("mousemove", {type: "mousemove"});
|
||||||
t.ok(control.feature == null,
|
t.ok(control.feature == null,
|
||||||
"feature is set to null on mouse out");
|
"feature is set to null on mouse out");
|
||||||
|
t.eq(log.length, 1,
|
||||||
|
"onLeave called exactly once");
|
||||||
|
t.eq(log[0].feature.id, feature.id,
|
||||||
|
"onLeave called with expected feature");
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user