// ========================================================================== // Project: SproutCore - JavaScript Application Framework // Copyright: ©2006-2011 Strobe Inc. and contributors. // ©2008-2011 Apple Inc. All rights reserved. // License: Licensed under MIT license (see license.js) // ========================================================================== sc_require(“panes/pane”);

SC.Pane.reopen(

/** @scope SC.Pane.prototype */ {

performKeyEquivalent: function(keystring, evt) {
  var ret = sc_super() ; // try normal view behavior first
  if (!ret) {
    var defaultResponder = this.get('defaultResponder') ;
    if (defaultResponder) {
      // try default responder's own performKeyEquivalent method,
      // if it has one...
      if (defaultResponder.performKeyEquivalent) {
        ret = defaultResponder.performKeyEquivalent(keystring, evt) ;
      }

      // even if it does have one, if it doesn't handle the event, give
      // methodName-style key equivalent handling a try
      if (!ret && defaultResponder.tryToPerform) {
        ret = defaultResponder.tryToPerform(keystring, evt) ;
      }
    }
  }
  return ret ;
},

/** @private
  If the user presses the tab key and the pane does not have a first
  responder, try to give it to the next eligible responder.

  If the keyDown event reaches the pane, we can assume that no responders in
  the responder chain, nor the default responder, handled the event.
*/
keyDown: function(evt) {
  var nextValidKeyView;

  // Handle tab key presses if we don't have a first responder already
  if (evt.keyCode === 9 && !this.get('firstResponder')) {
    // Cycle forwards by default, backwards if the shift key is held
    if (evt.shiftKey) {
      nextValidKeyView = this.get('previousValidKeyView');
    } else {
      nextValidKeyView = this.get('nextValidKeyView');
    }

    if (nextValidKeyView) {
      this.makeFirstResponder(nextValidKeyView);
      return YES;
    }else if(!SC.TABBING_ONLY_INSIDE_DOCUMENT){
      evt.allowDefault();
    }
  }

  return NO;
},

/** @private method forwards status changes in a generic way. */
_forwardKeyChange: function(shouldForward, methodName, pane, isKey) {
  var keyView, responder, newKeyView;
  if (shouldForward && (responder = this.get('firstResponder'))) {
    newKeyView = (pane) ? pane.get('firstResponder') : null ;
    keyView = this.get('firstResponder') ;
    if (keyView && keyView[methodName]) { keyView[methodName](newKeyView); }

    if ((isKey !== undefined) && responder) {
      responder.set('isKeyResponder', isKey);
    }
  }
}

});