/** * Copyright (c) 2006-2015, JGraph Ltd * Copyright (c) 2006-2015, Gaudenz Alder */ /** * Class: mxDefaultKeyHandler * * Binds keycodes to actionnames in an editor. This aggregates an internal * and extends the implementation of to not * only cancel the editing, but also hide the properties dialog and fire an * event via . An instance of this class is created * by and stored in . * * Example: * * Bind the delete key to the delete action in an existing editor. * * (code) * var keyHandler = new mxDefaultKeyHandler(editor); * keyHandler.bindAction(46, 'delete'); * (end) * * Codec: * * This class uses the to read configuration * data into an existing instance. See for a * description of the configuration format. * * Keycodes: * * See . * * An event is fired via the editor if the escape key is * pressed. * * Constructor: mxDefaultKeyHandler * * Constructs a new default key handler for the in the * given . (The editor may be null if a prototypical instance for * a is created.) * * Parameters: * * editor - Reference to the enclosing . */ function mxDefaultKeyHandler(editor) { if (editor != null) { this.editor = editor; this.handler = new mxKeyHandler(editor.graph); // Extends the escape function of the internal key // handle to hide the properties dialog and fire // the escape event via the editor instance var old = this.handler.escape; this.handler.escape = function(evt) { old.apply(this, arguments); editor.hideProperties(); editor.fireEvent(new mxEventObject(mxEvent.ESCAPE, 'event', evt)); }; } }; /** * Variable: editor * * Reference to the enclosing . */ mxDefaultKeyHandler.prototype.editor = null; /** * Variable: handler * * Holds the for key event handling. */ mxDefaultKeyHandler.prototype.handler = null; /** * Function: bindAction * * Binds the specified keycode to the given action in . The * optional control flag specifies if the control key must be pressed * to trigger the action. * * Parameters: * * code - Integer that specifies the keycode. * action - Name of the action to execute in . * control - Optional boolean that specifies if control must be pressed. * Default is false. */ mxDefaultKeyHandler.prototype.bindAction = function (code, action, control) { var keyHandler = mxUtils.bind(this, function() { this.editor.execute(action); }); // Binds the function to control-down keycode if (control) { this.handler.bindControlKey(code, keyHandler); } // Binds the function to the normal keycode else { this.handler.bindKey(code, keyHandler); } }; /** * Function: destroy * * Destroys the associated with this object. This does normally * not need to be called, the is destroyed automatically when the * window unloads (in IE) by . */ mxDefaultKeyHandler.prototype.destroy = function () { this.handler.destroy(); this.handler = null; };