2 * @class Ext.menu.KeyNav
5 Ext.define('Ext.menu.KeyNav', {
6 extend: 'Ext.util.KeyNav',
8 requires: ['Ext.FocusManager'],
10 constructor: function(menu) {
14 me.callParent([menu.el, {
28 fi = me.menu.focusedItem;
30 if (fi && e.getKey() == Ext.EventObject.DOWN && me.isWhitelisted(fi)) {
39 if (menu.activeItem) {
45 Ext.menu.Manager.hideAll();
48 focusNextItem: function(step) {
51 focusedItem = menu.focusedItem,
52 startIdx = focusedItem ? items.indexOf(focusedItem) : -1,
53 idx = startIdx + step;
55 while (idx != startIdx) {
57 idx = items.length - 1;
58 } else if (idx >= items.length) {
62 var item = items.getAt(idx);
63 if (menu.canActivateItem(item)) {
64 menu.setActiveItem(item);
71 isWhitelisted: function(item) {
72 return Ext.FocusManager.isWhitelisted(item);
77 fi = menu.focusedItem,
80 if (fi && this.isWhitelisted(fi)) {
85 if (menu.parentMenu) {
86 menu.parentMenu.focus();
92 fi = menu.focusedItem,
96 if (fi && this.isWhitelisted(fi)) {
101 am = menu.activeItem.menu;
104 Ext.defer(function() {
105 am.setActiveItem(am.items.getAt(0));
123 fi = me.menu.focusedItem;
125 if (fi && e.getKey() == Ext.EventObject.UP && me.isWhitelisted(fi)) {
128 me.focusNextItem(-1);