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