Adding support for a modify callback in the sketch handlers. This lets controls know about each sketch modification as a sketch is being drawn. Also a bit of a refactor of the sketch handlers to share sketch geometry parts. r=ahocevar (closes #1903)

git-svn-id: http://svn.openlayers.org/trunk/openlayers@8831 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
Tim Schaub
2009-02-04 22:45:16 +00:00
parent 112debe5f5
commit f4bae0a011
6 changed files with 352 additions and 103 deletions
+71
View File
@@ -68,7 +68,78 @@
t.ok(!handler.line.geometry.getBounds().equals(new OpenLayers.Bounds(0,-35.15625,35.15625,0)), "Correct bounds after dragging without letting go. (Came out as "+handler.line.geometry.getBounds().toBBOX() + ".)");
map.destroy();
}
function test_callbacks(t) {
t.plan(12);
var map = new OpenLayers.Map("map", {
resolutions: [1]
});
var layer = new OpenLayers.Layer.Vector("foo", {
maxExtent: new OpenLayers.Bounds(-10, -10, 10, 10),
isBaseLayer: true
});
map.addLayer(layer);
var control = new OpenLayers.Control({
});
var log = {};
var handler = new OpenLayers.Handler.Path(control, {
modify: function() {
log.type = "modify",
log.args = arguments
},
done: function() {
log.type = "done",
log.args = arguments
},
cancel: function() {
log.type = "cancel",
log.args = arguments
}
});
control.handler = handler;
map.addControl(control);
map.setCenter(new OpenLayers.LonLat(0, 0), 0);
// mock up feature drawing
handler.activate();
handler.mousedown({type: "mousedown", xy: new OpenLayers.Pixel(0, 0)});
handler.mouseup({type: "mouseup", xy: new OpenLayers.Pixel(0, 0)});
t.eq(log.type, "modify", "[mouseup] modify called");
t.geom_eq(log.args[0], new OpenLayers.Geometry.Point(-150, 75), "[mouseup] correct vertex");
t.ok(log.args[1] === handler.line, "[mouseup] correct sketch feature");
handler.mousemove({type: "mousemove", xy: new OpenLayers.Pixel(1, 1)});
t.eq(log.type, "modify", "[mousemove] modify called");
t.geom_eq(log.args[0], new OpenLayers.Geometry.Point(-149, 74), "[mousemove] correct vertex");
t.ok(log.args[1] === handler.line, "[mousemove] correct sketch feature");
handler.mousemove({type: "mousemove", xy: new OpenLayers.Pixel(10, 10)});
t.eq(log.type, "modify", "[mousemove] modify called");
t.geom_eq(log.args[0], new OpenLayers.Geometry.Point(-140, 65), "[mousemove] correct vertex");
t.ok(log.args[1] === handler.line, "[mousemove] correct sketch feature");
handler.mousedown({type: "mousedown", xy: new OpenLayers.Pixel(10, 10)});
handler.mouseup({type: "mouseup", xy: new OpenLayers.Pixel(10, 10)});
handler.mousedown({type: "mousedown", xy: new OpenLayers.Pixel(10, 10)});
handler.mouseup({type: "mouseup", xy: new OpenLayers.Pixel(10, 10)});
handler.dblclick({type: "dblclick", xy: new OpenLayers.Pixel(10, 10)});
t.eq(log.type, "done", "[dblclick] done called");
t.geom_eq(
log.args[0],
new OpenLayers.Geometry.LineString([
new OpenLayers.Geometry.Point(-150, 75),
new OpenLayers.Geometry.Point(-140, 65)
]),
"[dblclick] correct linestring"
);
// mock up sketch cancel
handler.mousedown({type: "mousedown", xy: new OpenLayers.Pixel(0, 0)});
handler.mouseup({type: "mouseup", xy: new OpenLayers.Pixel(0, 0)});
handler.mousemove({type: "mousemove", xy: new OpenLayers.Pixel(1, 1)});
handler.deactivate();
t.eq(log.type, "cancel", "[deactivate while drawing] cancel called");
map.destroy();
}
function test_Handler_Path_destroy(t) {
t.plan(6);
var map = new OpenLayers.Map('map');
+55 -1
View File
@@ -97,6 +97,60 @@
OpenLayers.Event.stop = oldStop;
}
function test_callbacks(t) {
t.plan(10);
var map = new OpenLayers.Map("map", {
resolutions: [1]
});
var layer = new OpenLayers.Layer.Vector("foo", {
maxExtent: new OpenLayers.Bounds(-10, -10, 10, 10),
isBaseLayer: true
});
map.addLayer(layer);
var control = new OpenLayers.Control({
});
var log = {};
var handler = new OpenLayers.Handler.Point(control, {
modify: function() {
log.type = "modify",
log.args = arguments
},
done: function() {
log.type = "done",
log.args = arguments
},
cancel: function() {
log.type = "cancel",
log.args = arguments
}
});
control.handler = handler;
map.addControl(control);
map.setCenter(new OpenLayers.LonLat(0, 0), 0);
// mock up feature drawing
handler.activate();
handler.mousedown({type: "mousedown", xy: new OpenLayers.Pixel(0, 0)});
t.eq(log.type, "modify", "[mousedown] modify called");
t.geom_eq(log.args[0], new OpenLayers.Geometry.Point(-150, 75), "[mousedown] correct point");
t.geom_eq(log.args[1].geometry, new OpenLayers.Geometry.Point(-150, 75), "[mousedown] correct sketch feature");
handler.mousemove({type: "mousemove", xy: new OpenLayers.Pixel(1, 0)});
t.eq(log.type, "modify", "[mousemove] modify called");
t.geom_eq(log.args[0], new OpenLayers.Geometry.Point(-149, 75), "[mousemove] correct point");
t.geom_eq(log.args[1].geometry, new OpenLayers.Geometry.Point(-149, 75), "[mousemove] correct sketch feature");
handler.mouseup({type: "mouseup", xy: new OpenLayers.Pixel(1, 0)});
t.eq(log.type, "done", "[mouseup] done called");
t.geom_eq(log.args[0], new OpenLayers.Geometry.Point(-149, 75), "[mouseup] correct point");
// mock up feature drawing with a cancel
handler.mousedown({type: "mousedown", xy: new OpenLayers.Pixel(0, 0)});
handler.deactivate();
t.eq(log.type, "cancel", "[deactivate while drawing] cancel called");
t.geom_eq(log.args[0], new OpenLayers.Geometry.Point(-150, 75), "[deactivate while drawing] correct point");
map.destroy();
}
function test_Handler_Point_deactivation(t) {
@@ -121,7 +175,7 @@
map.zoomToMaxExtent();
var control = new OpenLayers.Control();
map.addControl(control);
var handler = new OpenLayers.Handler.Point(control);
var handler = new OpenLayers.Handler.Point(control, {});
var activated = handler.activate();
var px = new OpenLayers.Pixel(150, 75);
var evt = {xy: px, which: 1};
+80
View File
@@ -71,6 +71,86 @@
map.destroy();
}
function test_callbacks(t) {
t.plan(12);
var map = new OpenLayers.Map("map", {
resolutions: [1]
});
var layer = new OpenLayers.Layer.Vector("foo", {
maxExtent: new OpenLayers.Bounds(-10, -10, 10, 10),
isBaseLayer: true
});
map.addLayer(layer);
var control = new OpenLayers.Control({
});
var log = {};
var handler = new OpenLayers.Handler.Polygon(control, {
modify: function() {
log.type = "modify",
log.args = arguments
},
done: function() {
log.type = "done",
log.args = arguments
},
cancel: function() {
log.type = "cancel",
log.args = arguments
}
});
control.handler = handler;
map.addControl(control);
map.setCenter(new OpenLayers.LonLat(0, 0), 0);
// mock up feature drawing
handler.activate();
// click at 0, 0
handler.mousedown({type: "mousedown", xy: new OpenLayers.Pixel(0, 0)});
handler.mouseup({type: "mouseup", xy: new OpenLayers.Pixel(0, 0)});
t.eq(log.type, "modify", "[mouseup] modify called");
t.geom_eq(log.args[0], new OpenLayers.Geometry.Point(-150, 75), "[mouseup] correct vertex");
t.ok(log.args[1] === handler.polygon, "[mouseup] correct sketch feature");
// move to 10, 10 and click
handler.mousemove({type: "mousemove", xy: new OpenLayers.Pixel(10, 10)});
t.eq(log.type, "modify", "[mousemove] modify called");
t.geom_eq(log.args[0], new OpenLayers.Geometry.Point(-140, 65), "[mousemove] correct vertex");
t.ok(log.args[1] === handler.polygon, "[mouseup] correct sketch feature");
handler.mousedown({type: "mousedown", xy: new OpenLayers.Pixel(10, 10)});
handler.mouseup({type: "mouseup", xy: new OpenLayers.Pixel(10, 10)});
// move to 0, 10 and double click
handler.mousemove({type: "mousemove", xy: new OpenLayers.Pixel(0, 10)});
t.eq(log.type, "modify", "[mousemove] modify called");
t.geom_eq(log.args[0], new OpenLayers.Geometry.Point(-150, 65), "[mousemove] correct vertex");
t.ok(log.args[1] === handler.polygon, "[mouseup] correct sketch feature");
handler.mousedown({type: "mousedown", xy: new OpenLayers.Pixel(0, 10)});
handler.mouseup({type: "mouseup", xy: new OpenLayers.Pixel(0, 10)});
handler.mousedown({type: "mousedown", xy: new OpenLayers.Pixel(0, 10)});
handler.mouseup({type: "mouseup", xy: new OpenLayers.Pixel(0, 10)});
handler.dblclick({type: "dblclick", xy: new OpenLayers.Pixel(0, 10)});
t.eq(log.type, "done", "[dblclick] done called");
t.geom_eq(
log.args[0],
new OpenLayers.Geometry.Polygon([
new OpenLayers.Geometry.LinearRing([
new OpenLayers.Geometry.Point(-150, 75),
new OpenLayers.Geometry.Point(-140, 65),
new OpenLayers.Geometry.Point(-150, 65),
new OpenLayers.Geometry.Point(-150, 75)
])
]),
"[dblclick] correct polygon"
);
// mock up sketch cancel
handler.mousedown({type: "mousedown", xy: new OpenLayers.Pixel(0, 0)});
handler.mouseup({type: "mouseup", xy: new OpenLayers.Pixel(0, 0)});
handler.mousemove({type: "mousemove", xy: new OpenLayers.Pixel(1, 1)});
handler.deactivate();
t.eq(log.type, "cancel", "[deactivate while drawing] cancel called");
map.destroy();
}
function test_Handler_Polygon_destroy(t) {
t.plan(8);
var map = new OpenLayers.Map('map');