WindowManager.js
上传用户:shuoshiled
上传日期:2018-01-28
资源大小:10124k
文件大小:6k
源码类别:

中间件编程

开发平台:

JavaScript

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