Upgrade to ExtJS 4.0.7 - Released 10/19/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="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
7   <script type="text/javascript" src="../resources/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             focused = menu.focusedItem;
56  
57         if (menu.activeItem) {
58             menu.onClick(e);
59         } else if (focused &amp;&amp; focused.isFormField) {
60             // prevent stopEvent being called
61             return true;
62         }
63     },
64
65     escape: function(e) {
66         Ext.menu.Manager.hideAll();
67     },
68
69     focusNextItem: function(step) {
70         var menu = this.menu,
71             items = menu.items,
72             focusedItem = menu.focusedItem,
73             startIdx = focusedItem ? items.indexOf(focusedItem) : -1,
74             idx = startIdx + step;
75
76         while (idx != startIdx) {
77             if (idx &lt; 0) {
78                 idx = items.length - 1;
79             } else if (idx &gt;= items.length) {
80                 idx = 0;
81             }
82
83             var item = items.getAt(idx);
84             if (menu.canActivateItem(item)) {
85                 menu.setActiveItem(item);
86                 break;
87             }
88             idx += step;
89         }
90     },
91
92     isWhitelisted: function(item) {
93         return Ext.FocusManager.isWhitelisted(item);
94     },
95
96     left: function(e) {
97         var menu = this.menu,
98             fi = menu.focusedItem,
99             ai = menu.activeItem;
100
101         if (fi &amp;&amp; this.isWhitelisted(fi)) {
102             return true;
103         }
104
105         menu.hide();
106         if (menu.parentMenu) {
107             menu.parentMenu.focus();
108         }
109     },
110
111     right: function(e) {
112         var menu = this.menu,
113             fi = menu.focusedItem,
114             ai = menu.activeItem,
115             am;
116
117         if (fi &amp;&amp; this.isWhitelisted(fi)) {
118             return true;
119         }
120
121         if (ai) {
122             am = menu.activeItem.menu;
123             if (am) {
124                 ai.expandMenu(0);
125                 Ext.defer(function() {
126                     am.setActiveItem(am.items.getAt(0));
127                 }, 25);
128             }
129         }
130     },
131
132     tab: function(e) {
133         var me = this;
134
135         if (e.shiftKey) {
136             me.up(e);
137         } else {
138             me.down(e);
139         }
140     },
141
142     up: function(e) {
143         var me = this,
144             fi = me.menu.focusedItem;
145
146         if (fi &amp;&amp; e.getKey() == Ext.EventObject.UP &amp;&amp; me.isWhitelisted(fi)) {
147             return true;
148         }
149         me.focusNextItem(-1);
150     }
151 });</pre>
152 </body>
153 </html>