Upgrade to ExtJS 3.3.1 - Released 11/30/2010
[extjs.git] / docs / source / EventManager-more.html
1 <html>
2 <head>
3   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    
4   <title>The source code</title>
5     <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
6     <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
7 </head>
8 <body  onload="prettyPrint();">
9     <pre class="prettyprint lang-js">/*!
10  * Ext JS Library 3.3.1
11  * Copyright(c) 2006-2010 Sencha Inc.
12  * licensing@sencha.com
13  * http://www.sencha.com/license
14  */
15 /**
16 * @class Ext.EventManager
17 */
18 Ext.apply(Ext.EventManager, function(){
19    var resizeEvent,
20        resizeTask,
21        textEvent,
22        textSize,
23        D = Ext.lib.Dom,
24        propRe = /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/,
25        curWidth = 0,
26        curHeight = 0,
27        // note 1: IE fires ONLY the keydown event on specialkey autorepeat
28        // note 2: Safari < 3.1, Gecko (Mac/Linux) & Opera fire only the keypress event on specialkey autorepeat
29        // (research done by @Jan Wolter at http://unixpapa.com/js/key.html)
30        useKeydown = Ext.isWebKit ?
31                    Ext.num(navigator.userAgent.match(/AppleWebKit\/(\d+)/)[1]) >= 525 :
32                    !((Ext.isGecko && !Ext.isWindows) || Ext.isOpera);
33
34    return {
35        // private
36        doResizeEvent: function(){
37            var h = D.getViewHeight(),
38                w = D.getViewWidth();
39
40             //whacky problem in IE where the resize event will fire even though the w/h are the same.
41             if(curHeight != h || curWidth != w){
42                resizeEvent.fire(curWidth = w, curHeight = h);
43             }
44        },
45
46        <div id="method-Ext.EventManager-onWindowResize"></div>/**
47         * Adds a listener to be notified when the browser window is resized and provides resize event buffering (100 milliseconds),
48         * passes new viewport width and height to handlers.
49         * @param {Function} fn      The handler function the window resize event invokes.
50         * @param {Object}   scope   The scope (<code>this</code> reference) in which the handler function executes. Defaults to the browser window.
51         * @param {boolean}  options Options object as passed to {@link Ext.Element#addListener}
52         */
53        onWindowResize : function(fn, scope, options){
54            if(!resizeEvent){
55                resizeEvent = new Ext.util.Event();
56                resizeTask = new Ext.util.DelayedTask(this.doResizeEvent);
57                Ext.EventManager.on(window, "resize", this.fireWindowResize, this);
58            }
59            resizeEvent.addListener(fn, scope, options);
60        },
61
62        // exposed only to allow manual firing
63        fireWindowResize : function(){
64            if(resizeEvent){
65                resizeTask.delay(100);
66            }
67        },
68
69        <div id="method-Ext.EventManager-onTextResize"></div>/**
70         * Adds a listener to be notified when the user changes the active text size. Handler gets called with 2 params, the old size and the new size.
71         * @param {Function} fn      The function the event invokes.
72         * @param {Object}   scope   The scope (<code>this</code> reference) in which the handler function executes. Defaults to the browser window.
73         * @param {boolean}  options Options object as passed to {@link Ext.Element#addListener}
74         */
75        onTextResize : function(fn, scope, options){
76            if(!textEvent){
77                textEvent = new Ext.util.Event();
78                var textEl = new Ext.Element(document.createElement('div'));
79                textEl.dom.className = 'x-text-resize';
80                textEl.dom.innerHTML = 'X';
81                textEl.appendTo(document.body);
82                textSize = textEl.dom.offsetHeight;
83                setInterval(function(){
84                    if(textEl.dom.offsetHeight != textSize){
85                        textEvent.fire(textSize, textSize = textEl.dom.offsetHeight);
86                    }
87                }, this.textResizeInterval);
88            }
89            textEvent.addListener(fn, scope, options);
90        },
91
92        <div id="method-Ext.EventManager-removeResizeListener"></div>/**
93         * Removes the passed window resize listener.
94         * @param {Function} fn        The method the event invokes
95         * @param {Object}   scope    The scope of handler
96         */
97        removeResizeListener : function(fn, scope){
98            if(resizeEvent){
99                resizeEvent.removeListener(fn, scope);
100            }
101        },
102
103        // private
104        fireResize : function(){
105            if(resizeEvent){
106                resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
107            }
108        },
109
110         <div id="prop-Ext.EventManager-textResizeInterval"></div>/**
111         * The frequency, in milliseconds, to check for text resize events (defaults to 50)
112         */
113        textResizeInterval : 50,
114
115        <div id="prop-Ext.EventManager-ieDeferSrc"></div>/**
116         * Url used for onDocumentReady with using SSL (defaults to Ext.SSL_SECURE_URL)
117         */
118        ieDeferSrc : false,
119        
120        // protected, short accessor for useKeydown
121        getKeyEvent : function(){
122            return useKeydown ? 'keydown' : 'keypress';
123        },
124
125        // protected for use inside the framework
126        // detects whether we should use keydown or keypress based on the browser.
127        useKeydown: useKeydown
128    };
129 }());
130
131 Ext.EventManager.on = Ext.EventManager.addListener;
132
133
134 Ext.apply(Ext.EventObjectImpl.prototype, {
135    <div id="prop-Ext.EventManager-BACKSPACE"></div>/** Key constant @type Number */
136    BACKSPACE: 8,
137    <div id="prop-Ext.EventManager-TAB"></div>/** Key constant @type Number */
138    TAB: 9,
139    <div id="prop-Ext.EventManager-NUM_CENTER"></div>/** Key constant @type Number */
140    NUM_CENTER: 12,
141    <div id="prop-Ext.EventManager-ENTER"></div>/** Key constant @type Number */
142    ENTER: 13,
143    <div id="prop-Ext.EventManager-RETURN"></div>/** Key constant @type Number */
144    RETURN: 13,
145    <div id="prop-Ext.EventManager-SHIFT"></div>/** Key constant @type Number */
146    SHIFT: 16,
147    <div id="prop-Ext.EventManager-CTRL"></div>/** Key constant @type Number */
148    CTRL: 17,
149    CONTROL : 17, // legacy
150    <div id="prop-Ext.EventManager-ALT"></div>/** Key constant @type Number */
151    ALT: 18,
152    <div id="prop-Ext.EventManager-PAUSE"></div>/** Key constant @type Number */
153    PAUSE: 19,
154    <div id="prop-Ext.EventManager-CAPS_LOCK"></div>/** Key constant @type Number */
155    CAPS_LOCK: 20,
156    <div id="prop-Ext.EventManager-ESC"></div>/** Key constant @type Number */
157    ESC: 27,
158    <div id="prop-Ext.EventManager-SPACE"></div>/** Key constant @type Number */
159    SPACE: 32,
160    <div id="prop-Ext.EventManager-PAGE_UP"></div>/** Key constant @type Number */
161    PAGE_UP: 33,
162    PAGEUP : 33, // legacy
163    <div id="prop-Ext.EventManager-PAGE_DOWN"></div>/** Key constant @type Number */
164    PAGE_DOWN: 34,
165    PAGEDOWN : 34, // legacy
166    <div id="prop-Ext.EventManager-END"></div>/** Key constant @type Number */
167    END: 35,
168    <div id="prop-Ext.EventManager-HOME"></div>/** Key constant @type Number */
169    HOME: 36,
170    <div id="prop-Ext.EventManager-LEFT"></div>/** Key constant @type Number */
171    LEFT: 37,
172    <div id="prop-Ext.EventManager-UP"></div>/** Key constant @type Number */
173    UP: 38,
174    <div id="prop-Ext.EventManager-RIGHT"></div>/** Key constant @type Number */
175    RIGHT: 39,
176    <div id="prop-Ext.EventManager-DOWN"></div>/** Key constant @type Number */
177    DOWN: 40,
178    <div id="prop-Ext.EventManager-PRINT_SCREEN"></div>/** Key constant @type Number */
179    PRINT_SCREEN: 44,
180    <div id="prop-Ext.EventManager-INSERT"></div>/** Key constant @type Number */
181    INSERT: 45,
182    <div id="prop-Ext.EventManager-DELETE"></div>/** Key constant @type Number */
183    DELETE: 46,
184    <div id="prop-Ext.EventManager-ZERO"></div>/** Key constant @type Number */
185    ZERO: 48,
186    <div id="prop-Ext.EventManager-ONE"></div>/** Key constant @type Number */
187    ONE: 49,
188    <div id="prop-Ext.EventManager-TWO"></div>/** Key constant @type Number */
189    TWO: 50,
190    <div id="prop-Ext.EventManager-THREE"></div>/** Key constant @type Number */
191    THREE: 51,
192    <div id="prop-Ext.EventManager-FOUR"></div>/** Key constant @type Number */
193    FOUR: 52,
194    <div id="prop-Ext.EventManager-FIVE"></div>/** Key constant @type Number */
195    FIVE: 53,
196    <div id="prop-Ext.EventManager-SIX"></div>/** Key constant @type Number */
197    SIX: 54,
198    <div id="prop-Ext.EventManager-SEVEN"></div>/** Key constant @type Number */
199    SEVEN: 55,
200    <div id="prop-Ext.EventManager-EIGHT"></div>/** Key constant @type Number */
201    EIGHT: 56,
202    <div id="prop-Ext.EventManager-NINE"></div>/** Key constant @type Number */
203    NINE: 57,
204    <div id="prop-Ext.EventManager-A"></div>/** Key constant @type Number */
205    A: 65,
206    <div id="prop-Ext.EventManager-B"></div>/** Key constant @type Number */
207    B: 66,
208    <div id="prop-Ext.EventManager-C"></div>/** Key constant @type Number */
209    C: 67,
210    <div id="prop-Ext.EventManager-D"></div>/** Key constant @type Number */
211    D: 68,
212    <div id="prop-Ext.EventManager-E"></div>/** Key constant @type Number */
213    E: 69,
214    <div id="prop-Ext.EventManager-F"></div>/** Key constant @type Number */
215    F: 70,
216    <div id="prop-Ext.EventManager-G"></div>/** Key constant @type Number */
217    G: 71,
218    <div id="prop-Ext.EventManager-H"></div>/** Key constant @type Number */
219    H: 72,
220    <div id="prop-Ext.EventManager-I"></div>/** Key constant @type Number */
221    I: 73,
222    <div id="prop-Ext.EventManager-J"></div>/** Key constant @type Number */
223    J: 74,
224    <div id="prop-Ext.EventManager-K"></div>/** Key constant @type Number */
225    K: 75,
226    <div id="prop-Ext.EventManager-L"></div>/** Key constant @type Number */
227    L: 76,
228    <div id="prop-Ext.EventManager-M"></div>/** Key constant @type Number */
229    M: 77,
230    <div id="prop-Ext.EventManager-N"></div>/** Key constant @type Number */
231    N: 78,
232    <div id="prop-Ext.EventManager-O"></div>/** Key constant @type Number */
233    O: 79,
234    <div id="prop-Ext.EventManager-P"></div>/** Key constant @type Number */
235    P: 80,
236    <div id="prop-Ext.EventManager-Q"></div>/** Key constant @type Number */
237    Q: 81,
238    <div id="prop-Ext.EventManager-R"></div>/** Key constant @type Number */
239    R: 82,
240    <div id="prop-Ext.EventManager-S"></div>/** Key constant @type Number */
241    S: 83,
242    <div id="prop-Ext.EventManager-T"></div>/** Key constant @type Number */
243    T: 84,
244    <div id="prop-Ext.EventManager-U"></div>/** Key constant @type Number */
245    U: 85,
246    <div id="prop-Ext.EventManager-V"></div>/** Key constant @type Number */
247    V: 86,
248    <div id="prop-Ext.EventManager-W"></div>/** Key constant @type Number */
249    W: 87,
250    <div id="prop-Ext.EventManager-X"></div>/** Key constant @type Number */
251    X: 88,
252    <div id="prop-Ext.EventManager-Y"></div>/** Key constant @type Number */
253    Y: 89,
254    <div id="prop-Ext.EventManager-Z"></div>/** Key constant @type Number */
255    Z: 90,
256    <div id="prop-Ext.EventManager-CONTEXT_MENU"></div>/** Key constant @type Number */
257    CONTEXT_MENU: 93,
258    <div id="prop-Ext.EventManager-NUM_ZERO"></div>/** Key constant @type Number */
259    NUM_ZERO: 96,
260    <div id="prop-Ext.EventManager-NUM_ONE"></div>/** Key constant @type Number */
261    NUM_ONE: 97,
262    <div id="prop-Ext.EventManager-NUM_TWO"></div>/** Key constant @type Number */
263    NUM_TWO: 98,
264    <div id="prop-Ext.EventManager-NUM_THREE"></div>/** Key constant @type Number */
265    NUM_THREE: 99,
266    <div id="prop-Ext.EventManager-NUM_FOUR"></div>/** Key constant @type Number */
267    NUM_FOUR: 100,
268    <div id="prop-Ext.EventManager-NUM_FIVE"></div>/** Key constant @type Number */
269    NUM_FIVE: 101,
270    <div id="prop-Ext.EventManager-NUM_SIX"></div>/** Key constant @type Number */
271    NUM_SIX: 102,
272    <div id="prop-Ext.EventManager-NUM_SEVEN"></div>/** Key constant @type Number */
273    NUM_SEVEN: 103,
274    <div id="prop-Ext.EventManager-NUM_EIGHT"></div>/** Key constant @type Number */
275    NUM_EIGHT: 104,
276    <div id="prop-Ext.EventManager-NUM_NINE"></div>/** Key constant @type Number */
277    NUM_NINE: 105,
278    <div id="prop-Ext.EventManager-NUM_MULTIPLY"></div>/** Key constant @type Number */
279    NUM_MULTIPLY: 106,
280    <div id="prop-Ext.EventManager-NUM_PLUS"></div>/** Key constant @type Number */
281    NUM_PLUS: 107,
282    <div id="prop-Ext.EventManager-NUM_MINUS"></div>/** Key constant @type Number */
283    NUM_MINUS: 109,
284    <div id="prop-Ext.EventManager-NUM_PERIOD"></div>/** Key constant @type Number */
285    NUM_PERIOD: 110,
286    <div id="prop-Ext.EventManager-NUM_DIVISION"></div>/** Key constant @type Number */
287    NUM_DIVISION: 111,
288    <div id="prop-Ext.EventManager-F1"></div>/** Key constant @type Number */
289    F1: 112,
290    <div id="prop-Ext.EventManager-F2"></div>/** Key constant @type Number */
291    F2: 113,
292    <div id="prop-Ext.EventManager-F3"></div>/** Key constant @type Number */
293    F3: 114,
294    <div id="prop-Ext.EventManager-F4"></div>/** Key constant @type Number */
295    F4: 115,
296    <div id="prop-Ext.EventManager-F5"></div>/** Key constant @type Number */
297    F5: 116,
298    <div id="prop-Ext.EventManager-F6"></div>/** Key constant @type Number */
299    F6: 117,
300    <div id="prop-Ext.EventManager-F7"></div>/** Key constant @type Number */
301    F7: 118,
302    <div id="prop-Ext.EventManager-F8"></div>/** Key constant @type Number */
303    F8: 119,
304    <div id="prop-Ext.EventManager-F9"></div>/** Key constant @type Number */
305    F9: 120,
306    <div id="prop-Ext.EventManager-F10"></div>/** Key constant @type Number */
307    F10: 121,
308    <div id="prop-Ext.EventManager-F11"></div>/** Key constant @type Number */
309    F11: 122,
310    <div id="prop-Ext.EventManager-F12"></div>/** Key constant @type Number */
311    F12: 123,
312
313    /** @private */
314    isNavKeyPress : function(){
315        var me = this,
316            k = this.normalizeKey(me.keyCode);
317        return (k >= 33 && k <= 40) ||  // Page Up/Down, End, Home, Left, Up, Right, Down
318        k == me.RETURN ||
319        k == me.TAB ||
320        k == me.ESC;
321    },
322
323    isSpecialKey : function(){
324        var k = this.normalizeKey(this.keyCode);
325        return (this.type == 'keypress' && this.ctrlKey) ||
326        this.isNavKeyPress() ||
327        (k == this.BACKSPACE) || // Backspace
328        (k >= 16 && k <= 20) || // Shift, Ctrl, Alt, Pause, Caps Lock
329        (k >= 44 && k <= 46);   // Print Screen, Insert, Delete
330    },
331
332    getPoint : function(){
333        return new Ext.lib.Point(this.xy[0], this.xy[1]);
334    },
335
336    <div id="method-Ext.EventManager-hasModifier"></div>/**
337     * Returns true if the control, meta, shift or alt key was pressed during this event.
338     * @return {Boolean}
339     */
340    hasModifier : function(){
341        return ((this.ctrlKey || this.altKey) || this.shiftKey);
342    }
343 });</pre>    
344 </body>
345 </html>