git-svn-id: http://svn.openlayers.org/tags/openlayers/release-2.5@4899 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
107 lines
3.3 KiB
JavaScript
107 lines
3.3 KiB
JavaScript
/* Copyright (c) 2006-2007 MetaCarta, Inc., published under the BSD license.
|
|
* See http://svn.openlayers.org/trunk/openlayers/release-license.txt
|
|
* for the full text of the license. */
|
|
|
|
/**
|
|
* @requires OpenLayers/Handler.js
|
|
* @requires OpenLayers/Events.js
|
|
*
|
|
* Class: OpenLayers.handler.Keyboard
|
|
* A handler for keyboard events. Create a new instance with the
|
|
* <OpenLayers.Handler.Keyboard> constructor.
|
|
*
|
|
* Inherits from:
|
|
* - <OpenLayers.Handler>
|
|
*/
|
|
OpenLayers.Handler.Keyboard = OpenLayers.Class(OpenLayers.Handler, {
|
|
|
|
/* http://www.quirksmode.org/js/keys.html explains key x-browser
|
|
key handling quirks in pretty nice detail */
|
|
|
|
/**
|
|
* Constant: KEY_EVENTS
|
|
* keydown, keypress, keyup
|
|
*/
|
|
KEY_EVENTS: ["keydown", "keypress", "keyup"],
|
|
|
|
/**
|
|
* Property: eventListener
|
|
* {Function}
|
|
*/
|
|
eventListener: null,
|
|
|
|
/**
|
|
* Constructor: OpenLayers.Handler.Keyboard
|
|
* Returns a new keyboard handler.
|
|
*
|
|
* Parameters:
|
|
* control - {<OpenLayers.Control>} The control that is making use of
|
|
* this handler. If a handler is being used without a control, the
|
|
* handlers setMap method must be overridden to deal properly with
|
|
* the map.
|
|
* callbacks - {Object} An object containing a single function to be
|
|
* called when the drag operation is finished. The callback should
|
|
* expect to recieve a single argument, the pixel location of the event.
|
|
* Callbacks for 'keydown', 'keypress', and 'keyup' are supported.
|
|
* options - {Object} Optional object whose properties will be set on the
|
|
* handler.
|
|
*/
|
|
initialize: function(control, callbacks, options) {
|
|
OpenLayers.Handler.prototype.initialize.apply(this, arguments);
|
|
// cache the bound event listener method so it can be unobserved later
|
|
this.eventListener = OpenLayers.Function.bindAsEventListener(
|
|
this.handleKeyEvent, this
|
|
);
|
|
},
|
|
|
|
/**
|
|
* Method: destroy
|
|
*/
|
|
destroy: function() {
|
|
this.deactivate();
|
|
this.eventListener = null;
|
|
OpenLayers.Handler.prototype.destroy.apply(this, arguments);
|
|
},
|
|
|
|
/**
|
|
* Method: activate
|
|
*/
|
|
activate: function() {
|
|
if (OpenLayers.Handler.prototype.activate.apply(this, arguments)) {
|
|
for (var i = 0; i < this.KEY_EVENTS.length; i++) {
|
|
OpenLayers.Event.observe(
|
|
window, this.KEY_EVENTS[i], this.eventListener);
|
|
}
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Method: deactivate
|
|
*/
|
|
deactivate: function() {
|
|
var deactivated = false;
|
|
if (OpenLayers.Handler.prototype.deactivate.apply(this, arguments)) {
|
|
for (var i = 0; i < this.KEY_EVENTS.length; i++) {
|
|
OpenLayers.Event.stopObserving(
|
|
window, this.KEY_EVENTS[i], this.eventListener);
|
|
}
|
|
deactivated = true;
|
|
}
|
|
return deactivated;
|
|
},
|
|
|
|
/**
|
|
* Method: handleKeyEvent
|
|
*/
|
|
handleKeyEvent: function (evt) {
|
|
if (this.checkModifiers(evt)) {
|
|
this.callback(evt.type, [evt.charCode || evt.keyCode]);
|
|
}
|
|
},
|
|
|
|
CLASS_NAME: "OpenLayers.Handler.Keyboard"
|
|
});
|