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