// ========================================================================== // 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.which === 9 || (SC.browser.mozilla && 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; } } 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); } } } });