Source: atajos.js

/**
 * @file atajos.js Contiene la configuración de atajos de teclado del MM.
 * @author José Luis Molina Soria
 * @version 20130520
 */

/**
 * @desc Define los atajos de teclado para el render
 * @memberof MM
 * @method definirAtajos
 * @inner
 */
MM.definirAtajos = function() {

    // teclado Zoom
    MM.teclado.atajos.add('Ctrl++', MM.render.zoomIn, MM);    
    MM.teclado.atajos.add('Ctrl+-', MM.render.zoomOut, MM);
    MM.teclado.atajos.add('Ctrl+0', MM.render.zoomReset, MM);


    var addEdicion = function () {
        if ( MM.foco.elemento.plegado ) {
            MM.plegarRama(false);
        }
        MM.add();
        MM.render.editar();
    };

    // teclas de operaciones
    MM.teclado.atajos.add('Shift+n', MM.nuevo, MM);
    MM.teclado.atajos.add('ins', addEdicion, MM);
    MM.teclado.atajos.add('Shift+Tab', addEdicion, MM);
    MM.teclado.atajos.add('del', MM.borrar, MM);

    // teclas de edición
    MM.teclado.atajos.add('Shift+Enter', function() {
        if ( MM.render.modoEdicion() ) {
            MM.render.insertarSaltoDeLinea();
        } else {
            MM.padre().add();
            MM.render.editar();
        }
    }, MM);
    MM.teclado.atajos.add('enter', MM.render.editar, MM);
    MM.teclado.atajos.add('esc', function() {
        if ( MM.render.modoEdicion() ){
            MM.render.editar();
	}
    }, MM);

    // teclas de plegado / desplegado
    MM.teclado.atajos.add('shift++', function() { MM.plegarRama(false); }, MM );
    MM.teclado.atajos.add('shift+-', function() { MM.plegarRama(true); }, MM );

    // teclas de navegación
    MM.teclado.atajos.add('home', MM.root, MM);
    MM.teclado.atajos.add('left', MM.padre, MM);
    MM.teclado.atajos.add('right', MM.next, MM);
    MM.teclado.atajos.add('up', MM.prevHermano, MM);
    MM.teclado.atajos.add('down', MM.nextHermano, MM);
    MM.teclado.atajos.add('tab', function() {
        if ( MM.render.modoEdicion() ) {
            MM.render.editar();
        } else {
            if ( MM.foco.esHoja() ) { // Si estamos en el último nivel añadimos un nuevo nodo hijo
                addEdicion();
            } if ( MM.foco.elemento.plegado ) {
                MM.plegarRama(false);
            } else { // navegamos por los niveles
                MM.next();
            }
        }
    }, MM);

};

/**
 * @desc pone los atajos de tecla en modo de edición.
 * @memberof MM
 * @method atajosEnEdicion
 * @inner
 */
MM.atajosEnEdicion = function(enEdicion) {    
    MM.teclado.atajos.activar('Ctrl++', !enEdicion );
    MM.teclado.atajos.activar('Ctrl+-', !enEdicion );
    MM.teclado.atajos.activar('Ctrl+0', !enEdicion );
    MM.teclado.atajos.activar('Shift+n', !enEdicion ); 
    MM.teclado.atajos.activar('ins', !enEdicion );
    MM.teclado.atajos.activar('Shift+Tab', !enEdicion );
    MM.teclado.atajos.activar('del', !enEdicion );
    MM.teclado.atajos.activar('shift++', !enEdicion );
    MM.teclado.atajos.activar('shift+-', !enEdicion );
    MM.teclado.atajos.activar('home', !enEdicion ); 
    MM.teclado.atajos.activar('left' , !enEdicion );
    MM.teclado.atajos.activar('right', !enEdicion ); 
    MM.teclado.atajos.activar('up', !enEdicion ); 
    MM.teclado.atajos.activar('down', !enEdicion );
};