make it possible to pan the map while drawing geometries, r=tschaub (closes #3052)

git-svn-id: http://svn.openlayers.org/trunk/openlayers@11381 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
Éric Lemoine
2011-02-24 09:00:49 +00:00
parent f8db509725
commit 30aeab365a
11 changed files with 1665 additions and 309 deletions

View File

@@ -60,7 +60,7 @@
}
function test_sketch_events(t) {
t.plan(6);
t.plan(12);
var map = new OpenLayers.Map("map", {
resolutions: [1]
});
@@ -69,37 +69,62 @@
isBaseLayer: true
});
var control = new OpenLayers.Control.DrawFeature(
layer, OpenLayers.Handler.Point
layer, OpenLayers.Handler.Path, {
handlerOptions: {persist: true}
}
);
map.addLayer(layer);
map.addControl(control);
map.zoomToMaxExtent();
control.activate();
var log = {};
var log;
layer.events.on({
sketchstarted: function(event) {
log.event = event;
log['sketchstarted'] = event;
},
sketchmodified: function(event) {
log.event = event;
log['sketchmodified'] = event;
},
sketchcomplete: function(event) {
log.event = event;
log['sketchcomplete'] = event;
}
});
// mock up draw/modify of a point
log = {};
control.activate();
t.eq(log.sketchstarted.type, "sketchstarted", "[activate] sketchstarted triggered");
t.geom_eq(log.sketchstarted.vertex, new OpenLayers.Geometry.Point(-250, 175), "[activate] correct vertex");
log = {};
map.events.triggerEvent("mousemove", {xy: new OpenLayers.Pixel(0, 0)});
t.eq(log.sketchmodified.type, "sketchmodified", "[mousemove] sketchmodified triggered");
t.geom_eq(log.sketchmodified.vertex, new OpenLayers.Geometry.Point(-200, 125), "[mousemove] correct vertex");
map.events.triggerEvent("mousedown", {xy: new OpenLayers.Pixel(0, 0)});
t.eq(log.event.type, "sketchstarted", "[mousedown] sketchstarted triggered");
t.geom_eq(log.event.vertex, new OpenLayers.Geometry.Point(-200, 125), "[mousedown] correct vertex");
log = {};
map.events.triggerEvent("mouseup", {xy: new OpenLayers.Pixel(0, 0)});
t.eq(log.sketchmodified.type, "sketchmodified", "[mouseup] sketchmodified triggered");
t.geom_eq(log.sketchmodified.vertex, new OpenLayers.Geometry.Point(-200, 125), "[mouseup] correct vertex");
log = {};
map.events.triggerEvent("mousemove", {xy: new OpenLayers.Pixel(10, 10)});
t.eq(log.event.type, "sketchmodified", "[mousemove] sketchmodified triggered");
t.geom_eq(log.event.vertex, new OpenLayers.Geometry.Point(-190, 115), "[mousemove] correct vertex");
map.events.triggerEvent("mouseup", {xy: new OpenLayers.Pixel(10, 10)});
t.eq(log.event.type, "sketchcomplete", "[mouseup] sketchcomplete triggered");
t.geom_eq(log.event.feature.geometry, new OpenLayers.Geometry.Point(-190, 115), "[mouseup] correct geometry");
t.eq(log.sketchmodified.type, "sketchmodified", "[mousemove] sketchmodified triggered");
t.geom_eq(log.sketchmodified.vertex, new OpenLayers.Geometry.Point(-190, 115), "[mousemove] correct vertex");
log = {};
map.events.triggerEvent("dblclick", {xy: new OpenLayers.Pixel(10, 10)});
t.eq(log.sketchcomplete.type, "sketchcomplete", "[dblclick] sketchcomplete triggered");
t.geom_eq(log.sketchcomplete.feature.geometry,
new OpenLayers.Geometry.LineString([
new OpenLayers.Geometry.Point(-200, 125),
new OpenLayers.Geometry.Point(-190, 115)
]),
"[dblclick] correct geometry");
t.eq(log.sketchstarted.type, "sketchstarted", "[dblclick] sketchstarted triggered");
t.geom_eq(log.sketchstarted.vertex, new OpenLayers.Geometry.Point(-250, 175), "[dblclick] correct vertex");
map.destroy();
}

View File

@@ -52,6 +52,7 @@
xy: new OpenLayers.Pixel(x, y)
})
};
trigger("mousemove", 0, 0);
trigger("mousedown", 0, 0);
trigger("mouseup", 0, 0);
trigger("mousemove", 10, 10);
@@ -60,9 +61,10 @@
// confirm that the sketch persists
t.eq(control.handler.layer.features.length, 1, "feature persists");
// cancel and see that sketch is gone
// cancel and see that sketch is gone (do not forget that
// cancel will create the new feature)
control.cancel();
t.eq(control.handler.layer.features.length, 0, "feature is gone after cancel");
t.eq(control.handler.layer.features.length, 2, "feature is gone after cancel");
map.destroy();
@@ -112,6 +114,7 @@
var delay = control.partialDelay / 1000;
// establish first point
trigger("mousemove", 0, 0);
trigger("mousedown", 0, 0);
trigger("mouseup", 0, 0);
@@ -187,6 +190,7 @@
log = [];
// f) establish first freehand point
trigger("mousemove", 0, 0);
trigger("mousedown", 0, 0);
t.eq(log.length, 0, "f) no event fired yet")
@@ -203,14 +207,14 @@
t.eq(log.length, 2, "h) event logged");
t.ok(log[1] && log[1].type == "measurepartial", "h) correct type");
t.ok(log[1] && log[1].measure == 20, "h) correct measure");
// i) mouse up to finish
trigger("mouseup", 20, 0);
t.eq(log.length, 3, "i) event logged");
t.ok(log[2] && log[2].type == "measure", "i) correct type");
t.ok(log[2] && log[2].measure == 20, "i) correct measure");
// j) clean up
log = [];
map.destroy();
@@ -224,7 +228,7 @@
}
function test_immediate(t) {
t.plan(29);
t.plan(32);
var map = new OpenLayers.Map({
div: "map",
@@ -237,7 +241,7 @@
],
center: new OpenLayers.LonLat(0, 0)
});
var log = [];
var control = new OpenLayers.Control.Measure(
OpenLayers.Handler.Path, {
@@ -255,7 +259,7 @@
);
map.addControl(control);
control.activate();
// convenience function to trigger mouse events
function trigger(type, x, y) {
map.events.triggerEvent(type, {
@@ -267,6 +271,7 @@
var delay = control.partialDelay / 1000;
// a) establish first point
trigger("mousemove", 0, 0);
trigger("mousedown", 0, 0);
trigger("mouseup", 0, 0);
@@ -274,7 +279,7 @@
trigger("mousemove", 0, 10);
t.eq(log.length, 0, "a) no event fired yet");
t.delay_call(
delay, function() {
// confirm measurepartial is fired
@@ -334,18 +339,21 @@
// i) double click to finish
trigger("mousedown", 0, 60);
t.eq(log.length, 7, "i) event logged");
t.eq(log[6] && log[6].type, "measurepartial", "i) correct type");
t.eq(log[6] && log[6].measure, 60, "i) correct measure");
trigger("mouseup", 0, 60);
t.eq(log.length, 6, "i) no event fired yet");
t.eq(log.length, 7, "i) no event fired yet");
},
delay, function() {
t.eq(log.length, 7, "i) event logged");
t.ok(log[6] && log[6].type == "measurepartial", "i) correct type");
t.ok(log[6] && log[6].measure == 60, "i) correct measure");
trigger("dblclick", 0, 60);
t.eq(log.length, 8, "i) event logged");
t.ok(log[7] && log[7].type == "measure", "i) correct type");
t.ok(log[7] && log[7].measure == 60, "i) correct measure");
t.eq(log[7] && log[7].type, "measurepartial", "i) correct type");
t.eq(log[7] && log[7].measure, 60, "i) correct measure");
trigger("dblclick", 0, 60);
t.eq(log.length, 9, "i) event logged");
t.eq(log[8] && log[8].type, "measure", "i) correct type");
t.eq(log[8] && log[8].measure, 60, "i) correct measure");
// clear log
log = [];

View File

@@ -35,13 +35,20 @@
function test_setSource(t) {
t.plan(5);
var layer1 = new OpenLayers.Layer.Vector();
var layer2 = new OpenLayers.Layer.Vector();
var layer1 = new OpenLayers.Layer.Vector("foo", {
maxExtent: new OpenLayers.Bounds(-10, -10, 10, 10),
isBaseLayer: true
});
var layer2 = new OpenLayers.Layer.Vector("foo", {
maxExtent: new OpenLayers.Bounds(-10, -10, 10, 10),
isBaseLayer: true
});
var control = new OpenLayers.Control.Split({layer: layer1});
var map = new OpenLayers.Map("map");
map.addLayers([layer1, layer2]);
map.zoomToMaxExtent();
map.addControl(control);
control.activate();
@@ -64,12 +71,16 @@
function test_activate(t) {
t.plan(8);
var layer = new OpenLayers.Layer.Vector();
var layer = new OpenLayers.Layer.Vector("foo", {
maxExtent: new OpenLayers.Bounds(-10, -10, 10, 10),
isBaseLayer: true
});
var control = new OpenLayers.Control.Split({layer: layer});
var map = new OpenLayers.Map("map");
map.addLayer(layer);
map.zoomToMaxExtent();
map.addControl(control);
// test activation with no source layer
control.activate();
t.eq(control.active, true, "control is active");
@@ -93,12 +104,16 @@
t.plan(7);
var layer = new OpenLayers.Layer.Vector();
var layer = new OpenLayers.Layer.Vector("foo", {
maxExtent: new OpenLayers.Bounds(-10, -10, 10, 10),
isBaseLayer: true
});
var control = new OpenLayers.Control.Split({layer: layer});
var map = new OpenLayers.Map("map");
map.addLayer(layer);
map.zoomToMaxExtent();
map.addControl(control);
// activate and check sketch handler
control.activate();
t.ok(control.handler, "sketch handler present");