2011-04-23 16:45:50 +00:00
|
|
|
// vim: et:ts=4:sw=4:sts=4:ft=js
|
2011-04-27 19:24:33 +00:00
|
|
|
|
2011-05-16 10:49:48 +00:00
|
|
|
/*@
|
|
|
|
Ox.MapRectangleMarker <f> MapRectangleMarker Object
|
|
|
|
() -> <f> MapRectangleMarker Object
|
|
|
|
(options) -> <f> MapRectangleMarker Object
|
|
|
|
(options, self) -> <f> MapRectangleMarker Object
|
|
|
|
options <o> Options object
|
|
|
|
map <o|null> map
|
|
|
|
place <o|null> place
|
|
|
|
position <s|''>
|
|
|
|
self <o> shared private variable
|
|
|
|
@*/
|
|
|
|
|
2011-04-22 22:03:10 +00:00
|
|
|
Ox.MapRectangleMarker = function(options, self) {
|
|
|
|
|
2011-04-27 19:24:33 +00:00
|
|
|
options = Ox.extend({
|
|
|
|
map: null,
|
|
|
|
place: null,
|
|
|
|
position: ''
|
|
|
|
}, options);
|
|
|
|
|
|
|
|
var that = this;
|
2011-04-22 22:03:10 +00:00
|
|
|
|
|
|
|
Ox.forEach(options, function(val, key) {
|
|
|
|
that[key] = val;
|
|
|
|
});
|
|
|
|
|
|
|
|
that.markerImage = new google.maps.MarkerImage
|
|
|
|
that.marker = new google.maps.Marker({
|
|
|
|
cursor: that.position + '-resize',
|
|
|
|
draggable: true,
|
2011-04-27 19:24:33 +00:00
|
|
|
icon: Ox.MapMarkerImage({
|
|
|
|
mode: 'editing',
|
|
|
|
type: 'rectangle'
|
|
|
|
}),
|
2011-04-22 22:03:10 +00:00
|
|
|
position: that.place.points[that.position],
|
|
|
|
raiseOnDrag: false
|
|
|
|
});
|
|
|
|
|
|
|
|
function dragstart(e) {
|
|
|
|
that.drag = {
|
|
|
|
lat: e.latLng.lat(),
|
|
|
|
lng: e.latLng.lng()
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
function drag(e) {
|
|
|
|
// fixme: implement shift+drag (center stays the same)
|
|
|
|
Ox.print(e.pixel.x, e.pixel.y)
|
|
|
|
var lat = Ox.limit(e.latLng.lat(), Ox.MIN_LATITUDE, Ox.MAX_LATITUDE),
|
|
|
|
lng = e.latLng.lng();
|
|
|
|
that.drag = {
|
|
|
|
lat: lat,
|
|
|
|
lng: lng
|
|
|
|
};
|
|
|
|
if (that.position.indexOf('s') > -1) {
|
|
|
|
that.place.south = lat;
|
|
|
|
}
|
|
|
|
if (that.position.indexOf('n') > -1) {
|
|
|
|
that.place.north = lat;
|
|
|
|
}
|
|
|
|
if (that.position.indexOf('w') > -1) {
|
|
|
|
that.place.west = lng;
|
|
|
|
}
|
|
|
|
if (that.position.indexOf('e') > -1) {
|
|
|
|
that.place.east = lng;
|
|
|
|
}
|
|
|
|
Ox.print('west', that.place.west, 'east', that.place.east);
|
|
|
|
Ox.print('south', that.place.south, 'north', that.place.north);
|
|
|
|
that.place.update();
|
|
|
|
that.place.marker.update();
|
|
|
|
that.place.rectangle.update();
|
|
|
|
}
|
|
|
|
|
|
|
|
function dragend(e) {
|
|
|
|
var south;
|
|
|
|
if (that.place.south > that.place.north) {
|
|
|
|
south = that.place.south;
|
|
|
|
that.place.south = that.place.north;
|
|
|
|
that.place.north = south;
|
|
|
|
that.place.update();
|
|
|
|
that.place.marker.update();
|
|
|
|
that.place.rectangle.update();
|
|
|
|
}
|
2011-05-30 07:21:11 +00:00
|
|
|
that.map.triggerEvent('changeplaceend', that.place);
|
2011-04-22 22:03:10 +00:00
|
|
|
}
|
|
|
|
|
2011-05-16 10:49:48 +00:00
|
|
|
/*@
|
|
|
|
add <f> add
|
|
|
|
@*/
|
2011-04-22 22:03:10 +00:00
|
|
|
that.add = function() {
|
|
|
|
that.marker.setMap(that.map.map);
|
|
|
|
google.maps.event.addListener(that.marker, 'dragstart', dragstart);
|
|
|
|
google.maps.event.addListener(that.marker, 'drag', drag);
|
|
|
|
google.maps.event.addListener(that.marker, 'dragend', dragend);
|
|
|
|
};
|
|
|
|
|
2011-05-16 10:49:48 +00:00
|
|
|
/*@
|
|
|
|
remove <f> remove
|
|
|
|
@*/
|
2011-04-22 22:03:10 +00:00
|
|
|
that.remove = function() {
|
|
|
|
that.marker.setMap(null);
|
|
|
|
google.maps.event.clearListeners(that.marker);
|
|
|
|
};
|
|
|
|
|
2011-05-16 10:49:48 +00:00
|
|
|
/*@
|
|
|
|
update <f> update
|
|
|
|
@*/
|
2011-04-22 22:03:10 +00:00
|
|
|
that.update = function() {
|
|
|
|
that.marker.setOptions({
|
|
|
|
position: that.place.points[that.position]
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
return that;
|
|
|
|
|
|
|
|
};
|