Upgrade to ExtJS 3.3.1 - Released 11/30/2010
[extjs.git] / docs / source / WindowManager.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 <div id="cls-Ext.WindowGroup"></div>/**
16  * @class Ext.WindowGroup
17  * An object that manages a group of {@link Ext.Window} instances and provides z-order management
18  * and window activation behavior.
19  * @constructor
20  */
21 Ext.WindowGroup = function(){
22     var list = {};
23     var accessList = [];
24     var front = null;
25
26     // private
27     var sortWindows = function(d1, d2){
28         return (!d1._lastAccess || d1._lastAccess < d2._lastAccess) ? -1 : 1;
29     };
30
31     // private
32     var orderWindows = function(){
33         var a = accessList, len = a.length;
34         if(len > 0){
35             a.sort(sortWindows);
36             var seed = a[0].manager.zseed;
37             for(var i = 0; i < len; i++){
38                 var win = a[i];
39                 if(win && !win.hidden){
40                     win.setZIndex(seed + (i*10));
41                 }
42             }
43         }
44         activateLast();
45     };
46
47     // private
48     var setActiveWin = function(win){
49         if(win != front){
50             if(front){
51                 front.setActive(false);
52             }
53             front = win;
54             if(win){
55                 win.setActive(true);
56             }
57         }
58     };
59
60     // private
61     var activateLast = function(){
62         for(var i = accessList.length-1; i >=0; --i) {
63             if(!accessList[i].hidden){
64                 setActiveWin(accessList[i]);
65                 return;
66             }
67         }
68         // none to activate
69         setActiveWin(null);
70     };
71
72     return {
73         <div id="prop-Ext.WindowGroup-zseed"></div>/**
74          * The starting z-index for windows in this WindowGroup (defaults to 9000)
75          * @type Number The z-index value
76          */
77         zseed : 9000,
78
79         <div id="method-Ext.WindowGroup-register"></div>/**
80          * <p>Registers a {@link Ext.Window Window} with this WindowManager. This should not
81          * need to be called under normal circumstances. Windows are automatically registered
82          * with a {@link Ext.Window#manager manager} at construction time.</p>
83          * <p>Where this may be useful is moving Windows between two WindowManagers. For example,
84          * to bring the Ext.MessageBox dialog under the same manager as the Desktop's
85          * WindowManager in the desktop sample app:</p><code><pre>
86 var msgWin = Ext.MessageBox.getDialog();
87 MyDesktop.getDesktop().getManager().register(msgWin);
88 </pre></code>
89          * @param {Window} win The Window to register.
90          */
91         register : function(win){
92             if(win.manager){
93                 win.manager.unregister(win);
94             }
95             win.manager = this;
96
97             list[win.id] = win;
98             accessList.push(win);
99             win.on('hide', activateLast);
100         },
101
102         <div id="method-Ext.WindowGroup-unregister"></div>/**
103          * <p>Unregisters a {@link Ext.Window Window} from this WindowManager. This should not
104          * need to be called. Windows are automatically unregistered upon destruction.
105          * See {@link #register}.</p>
106          * @param {Window} win The Window to unregister.
107          */
108         unregister : function(win){
109             delete win.manager;
110             delete list[win.id];
111             win.un('hide', activateLast);
112             accessList.remove(win);
113         },
114
115         <div id="method-Ext.WindowGroup-get"></div>/**
116          * Gets a registered window by id.
117          * @param {String/Object} id The id of the window or a {@link Ext.Window} instance
118          * @return {Ext.Window}
119          */
120         get : function(id){
121             return typeof id == "object" ? id : list[id];
122         },
123
124         <div id="method-Ext.WindowGroup-bringToFront"></div>/**
125          * Brings the specified window to the front of any other active windows in this WindowGroup.
126          * @param {String/Object} win The id of the window or a {@link Ext.Window} instance
127          * @return {Boolean} True if the dialog was brought to the front, else false
128          * if it was already in front
129          */
130         bringToFront : function(win){
131             win = this.get(win);
132             if(win != front){
133                 win._lastAccess = new Date().getTime();
134                 orderWindows();
135                 return true;
136             }
137             return false;
138         },
139
140         <div id="method-Ext.WindowGroup-sendToBack"></div>/**
141          * Sends the specified window to the back of other active windows in this WindowGroup.
142          * @param {String/Object} win The id of the window or a {@link Ext.Window} instance
143          * @return {Ext.Window} The window
144          */
145         sendToBack : function(win){
146             win = this.get(win);
147             win._lastAccess = -(new Date().getTime());
148             orderWindows();
149             return win;
150         },
151
152         <div id="method-Ext.WindowGroup-hideAll"></div>/**
153          * Hides all windows in this WindowGroup.
154          */
155         hideAll : function(){
156             for(var id in list){
157                 if(list[id] && typeof list[id] != "function" && list[id].isVisible()){
158                     list[id].hide();
159                 }
160             }
161         },
162
163         <div id="method-Ext.WindowGroup-getActive"></div>/**
164          * Gets the currently-active window in this WindowGroup.
165          * @return {Ext.Window} The active window
166          */
167         getActive : function(){
168             return front;
169         },
170
171         <div id="method-Ext.WindowGroup-getBy"></div>/**
172          * Returns zero or more windows in this WindowGroup using the custom search function passed to this method.
173          * The function should accept a single {@link Ext.Window} reference as its only argument and should
174          * return true if the window matches the search criteria, otherwise it should return false.
175          * @param {Function} fn The search function
176          * @param {Object} scope (optional) The scope (<code>this</code> reference) in which the function is executed. Defaults to the Window being tested.
177          * that gets passed to the function if not specified)
178          * @return {Array} An array of zero or more matching windows
179          */
180         getBy : function(fn, scope){
181             var r = [];
182             for(var i = accessList.length-1; i >=0; --i) {
183                 var win = accessList[i];
184                 if(fn.call(scope||win, win) !== false){
185                     r.push(win);
186                 }
187             }
188             return r;
189         },
190
191         <div id="method-Ext.WindowGroup-each"></div>/**
192          * Executes the specified function once for every window in this WindowGroup, passing each
193          * window as the only parameter. Returning false from the function will stop the iteration.
194          * @param {Function} fn The function to execute for each item
195          * @param {Object} scope (optional) The scope (<code>this</code> reference) in which the function is executed. Defaults to the current Window in the iteration.
196          */
197         each : function(fn, scope){
198             for(var id in list){
199                 if(list[id] && typeof list[id] != "function"){
200                     if(fn.call(scope || list[id], list[id]) === false){
201                         return;
202                     }
203                 }
204             }
205         }
206     };
207 };
208
209
210 <div id="cls-Ext.WindowMgr"></div>/**
211  * @class Ext.WindowMgr
212  * @extends Ext.WindowGroup
213  * The default global window group that is available automatically.  To have more than one group of windows
214  * with separate z-order stacks, create additional instances of {@link Ext.WindowGroup} as needed.
215  * @singleton
216  */
217 Ext.WindowMgr = new Ext.WindowGroup();</pre>    
218 </body>
219 </html>