Upgrade to ExtJS 3.0.3 - Released 10/11/2009
[extjs.git] / docs / source / WindowManager.html
1 <html>
2 <head>
3   <title>The source code</title>
4     <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
5     <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
6 </head>
7 <body  onload="prettyPrint();">
8     <pre class="prettyprint lang-js">/*!
9  * Ext JS Library 3.0.3
10  * Copyright(c) 2006-2009 Ext JS, LLC
11  * licensing@extjs.com
12  * http://www.extjs.com/license
13  */
14 <div id="cls-Ext.WindowGroup"></div>/**
15  * @class Ext.WindowGroup
16  * An object that represents a group of {@link Ext.Window} instances and provides z-order management
17  * and window activation behavior.
18  * @constructor
19  */
20 Ext.WindowGroup = function(){
21     var list = {};
22     var accessList = [];
23     var front = null;
24
25     // private
26     var sortWindows = function(d1, d2){
27         return (!d1._lastAccess || d1._lastAccess < d2._lastAccess) ? -1 : 1;
28     };
29
30     // private
31     var orderWindows = function(){
32         var a = accessList, len = a.length;
33         if(len > 0){
34             a.sort(sortWindows);
35             var seed = a[0].manager.zseed;
36             for(var i = 0; i < len; i++){
37                 var win = a[i];
38                 if(win && !win.hidden){
39                     win.setZIndex(seed + (i*10));
40                 }
41             }
42         }
43         activateLast();
44     };
45
46     // private
47     var setActiveWin = function(win){
48         if(win != front){
49             if(front){
50                 front.setActive(false);
51             }
52             front = win;
53             if(win){
54                 win.setActive(true);
55             }
56         }
57     };
58
59     // private
60     var activateLast = function(){
61         for(var i = accessList.length-1; i >=0; --i) {
62             if(!accessList[i].hidden){
63                 setActiveWin(accessList[i]);
64                 return;
65             }
66         }
67         // none to activate
68         setActiveWin(null);
69     };
70
71     return {
72         <div id="prop-Ext.WindowGroup-zseed"></div>/**
73          * The starting z-index for windows (defaults to 9000)
74          * @type Number The z-index value
75          */
76         zseed : 9000,
77
78         // private
79         register : function(win){
80             list[win.id] = win;
81             accessList.push(win);
82             win.on('hide', activateLast);
83         },
84
85         // private
86         unregister : function(win){
87             delete list[win.id];
88             win.un('hide', activateLast);
89             accessList.remove(win);
90         },
91
92         <div id="method-Ext.WindowGroup-get"></div>/**
93          * Gets a registered window by id.
94          * @param {String/Object} id The id of the window or a {@link Ext.Window} instance
95          * @return {Ext.Window}
96          */
97         get : function(id){
98             return typeof id == "object" ? id : list[id];
99         },
100
101         <div id="method-Ext.WindowGroup-bringToFront"></div>/**
102          * Brings the specified window to the front of any other active windows.
103          * @param {String/Object} win The id of the window or a {@link Ext.Window} instance
104          * @return {Boolean} True if the dialog was brought to the front, else false
105          * if it was already in front
106          */
107         bringToFront : function(win){
108             win = this.get(win);
109             if(win != front){
110                 win._lastAccess = new Date().getTime();
111                 orderWindows();
112                 return true;
113             }
114             return false;
115         },
116
117         <div id="method-Ext.WindowGroup-sendToBack"></div>/**
118          * Sends the specified window to the back of other active windows.
119          * @param {String/Object} win The id of the window or a {@link Ext.Window} instance
120          * @return {Ext.Window} The window
121          */
122         sendToBack : function(win){
123             win = this.get(win);
124             win._lastAccess = -(new Date().getTime());
125             orderWindows();
126             return win;
127         },
128
129         <div id="method-Ext.WindowGroup-hideAll"></div>/**
130          * Hides all windows in the group.
131          */
132         hideAll : function(){
133             for(var id in list){
134                 if(list[id] && typeof list[id] != "function" && list[id].isVisible()){
135                     list[id].hide();
136                 }
137             }
138         },
139
140         <div id="method-Ext.WindowGroup-getActive"></div>/**
141          * Gets the currently-active window in the group.
142          * @return {Ext.Window} The active window
143          */
144         getActive : function(){
145             return front;
146         },
147
148         <div id="method-Ext.WindowGroup-getBy"></div>/**
149          * Returns zero or more windows in the group using the custom search function passed to this method.
150          * The function should accept a single {@link Ext.Window} reference as its only argument and should
151          * return true if the window matches the search criteria, otherwise it should return false.
152          * @param {Function} fn The search function
153          * @param {Object} scope (optional) The scope in which to execute the function (defaults to the window
154          * that gets passed to the function if not specified)
155          * @return {Array} An array of zero or more matching windows
156          */
157         getBy : function(fn, scope){
158             var r = [];
159             for(var i = accessList.length-1; i >=0; --i) {
160                 var win = accessList[i];
161                 if(fn.call(scope||win, win) !== false){
162                     r.push(win);
163                 }
164             }
165             return r;
166         },
167
168         <div id="method-Ext.WindowGroup-each"></div>/**
169          * Executes the specified function once for every window in the group, passing each
170          * window as the only parameter. Returning false from the function will stop the iteration.
171          * @param {Function} fn The function to execute for each item
172          * @param {Object} scope (optional) The scope in which to execute the function
173          */
174         each : function(fn, scope){
175             for(var id in list){
176                 if(list[id] && typeof list[id] != "function"){
177                     if(fn.call(scope || list[id], list[id]) === false){
178                         return;
179                     }
180                 }
181             }
182         }
183     };
184 };
185
186
187 <div id="cls-Ext.WindowMgr"></div>/**
188  * @class Ext.WindowMgr
189  * @extends Ext.WindowGroup
190  * The default global window group that is available automatically.  To have more than one group of windows
191  * with separate z-order stacks, create additional instances of {@link Ext.WindowGroup} as needed.
192  * @singleton
193  */
194 Ext.WindowMgr = new Ext.WindowGroup();</pre>
195 </body>
196 </html>