function onKeyDown()

in src/studies/apg/treegrid/js/treegrid-1.js [393:472]


  function onKeyDown (event) {
    var ENTER = 13;
    var UP = 38;
    var DOWN = 40;
    var LEFT = 37;
    var RIGHT = 39;
    var HOME = 36;
    var END = 35;
    var CTRL_HOME = -HOME;
    var CTRL_END = -END;

    var numModifiersPressed = event.ctrlKey + event.altKey + event.shiftKey +
      event.metaKey;

    var key = event.keyCode;

    if (numModifiersPressed === 1 && event.ctrlKey) {
      key = -key; // Treat as negative key value when ctrl pressed
    }
    else if (numModifiersPressed) {
      return;
    }

    switch (key) {
      case DOWN:
        moveByRow(1);
        break;
      case UP:
        moveByRow(-1);
        break;
      case LEFT:
        if (isEditableFocused()) {
          return;  // Leave key for editable area
        }
        if (isRowFocused()) {
          changeExpanded(false) || moveByRow(-1, true);
        }
        else {
          moveByCol(-1);
        }
        break;
      case RIGHT:
        if (isEditableFocused()) {
          return;  // Leave key for editable area
        }

        // If row: try to expand
        // If col or can't expand, move column to right
        if (!isRowFocused() || !changeExpanded(true)) {
          moveByCol(1);
        }
        break;
      case CTRL_HOME:
        moveToExtremeRow(-1);
        break;
      case HOME:
        if (isEditableFocused()) {
          return;  // Leave key for editable area
        }
        moveToExtreme(-1);
        break;
      case CTRL_END:
        moveToExtremeRow(1);
        break;
      case END:
        if (isEditableFocused()) {
          return;  // Leave key for editable area
        }
        moveToExtreme(1);
        break;
      case ENTER:
        doPrimaryAction();
        break;
      default:
        return;
    }

    // Important: don't use key for anything else, such as scrolling
    event.preventDefault();
  }