Upgrade to ExtJS 4.0.1 - Released 05/18/2011
[extjs.git] / docs / source / KeyNav.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5   <title>The source code</title>
6   <link href="../prettify/prettify.css" type="text/css" rel="stylesheet" />
7   <script type="text/javascript" src="../prettify/prettify.js"></script>
8   <style type="text/css">
9     .highlight { display: block; background-color: #ddd; }
10   </style>
11   <script type="text/javascript">
12     function highlight() {
13       document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
14     }
15   </script>
16 </head>
17 <body onload="prettyPrint(); highlight();">
18   <pre class="prettyprint lang-js"><span id='Ext-menu-KeyNav'>/**
19 </span> * @class Ext.menu.KeyNav
20  * @private
21  */
22 Ext.define('Ext.menu.KeyNav', {
23     extend: 'Ext.util.KeyNav',
24
25     requires: ['Ext.FocusManager'],
26     
27     constructor: function(menu) {
28         var me = this;
29
30         me.menu = menu;
31         me.callParent([menu.el, {
32             down: me.down,
33             enter: me.enter,
34             esc: me.escape,
35             left: me.left,
36             right: me.right,
37             space: me.enter,
38             tab: me.tab,
39             up: me.up
40         }]);
41     },
42
43     down: function(e) {
44         var me = this,
45             fi = me.menu.focusedItem;
46
47         if (fi &amp;&amp; e.getKey() == Ext.EventObject.DOWN &amp;&amp; me.isWhitelisted(fi)) {
48             return true;
49         }
50         me.focusNextItem(1);
51     },
52
53     enter: function(e) {
54         var menu = this.menu;
55
56         if (menu.activeItem) {
57             menu.onClick(e);
58         }
59     },
60
61     escape: function(e) {
62         Ext.menu.Manager.hideAll();
63     },
64
65     focusNextItem: function(step) {
66         var menu = this.menu,
67             items = menu.items,
68             focusedItem = menu.focusedItem,
69             startIdx = focusedItem ? items.indexOf(focusedItem) : -1,
70             idx = startIdx + step;
71
72         while (idx != startIdx) {
73             if (idx &lt; 0) {
74                 idx = items.length - 1;
75             } else if (idx &gt;= items.length) {
76                 idx = 0;
77             }
78
79             var item = items.getAt(idx);
80             if (menu.canActivateItem(item)) {
81                 menu.setActiveItem(item);
82                 break;
83             }
84             idx += step;
85         }
86     },
87
88     isWhitelisted: function(item) {
89         return Ext.FocusManager.isWhitelisted(item);
90     },
91
92     left: function(e) {
93         var menu = this.menu,
94             fi = menu.focusedItem,
95             ai = menu.activeItem;
96
97         if (fi &amp;&amp; this.isWhitelisted(fi)) {
98             return true;
99         }
100
101         menu.hide();
102         if (menu.parentMenu) {
103             menu.parentMenu.focus();
104         }
105     },
106
107     right: function(e) {
108         var menu = this.menu,
109             fi = menu.focusedItem,
110             ai = menu.activeItem,
111             am;
112
113         if (fi &amp;&amp; this.isWhitelisted(fi)) {
114             return true;
115         }
116
117         if (ai) {
118             am = menu.activeItem.menu;
119             if (am) {
120                 ai.expandMenu(0);
121                 Ext.defer(function() {
122                     am.setActiveItem(am.items.getAt(0));
123                 }, 25);
124             }
125         }
126     },
127
128     tab: function(e) {
129         var me = this;
130
131         if (e.shiftKey) {
132             me.up(e);
133         } else {
134             me.down(e);
135         }
136     },
137
138     up: function(e) {
139         var me = this,
140             fi = me.menu.focusedItem;
141
142         if (fi &amp;&amp; e.getKey() == Ext.EventObject.UP &amp;&amp; me.isWhitelisted(fi)) {
143             return true;
144         }
145         me.focusNextItem(-1);
146     }
147 });</pre>
148 </body>
149 </html>