//>>built
define("dojox/grid/enhanced/_PluginManager",["dojo/_base/kernel","dojo/_base/lang","dojo/_base/declare","dojo/_base/array","dojo/_base/connect","./_Events","./_FocusManager","../util"],function(_1,_2,_3,_4,_5,_6,_7,_8){
var _9=_3("dojox.grid.enhanced._PluginManager",null,{_options:null,_plugins:null,_connects:null,constructor:function(_a){
this.grid=_a;
this._store=_a.store;
this._options={};
this._plugins=[];
this._connects=[];
this._parseProps(this.grid.plugins);
_a.connect(_a,"_setStore",_2.hitch(this,function(_b){
if(this._store!==_b){
this.forEach("onSetStore",[_b,this._store]);
this._store=_b;
}
}));
},startup:function(){
this.forEach("onStartUp");
},preInit:function(){
this.grid.focus.destroy();
this.grid.focus=new _7(this.grid);
new _6(this.grid);
this._init(true);
this.forEach("onPreInit");
},postInit:function(){
this._init(false);
_4.forEach(this.grid.views.views,this._initView,this);
this._connects.push(_5.connect(this.grid.views,"addView",_2.hitch(this,this._initView)));
if(this._plugins.length>0){
var _c=this.grid.edit;
if(_c){
_c.styleRow=function(_d){
};
}
}
this.forEach("onPostInit");
},forEach:function(_e,_f){
_4.forEach(this._plugins,function(p){
if(!p||!p[_e]){
return;
}
p[_e].apply(p,_f?_f:[]);
});
},_parseProps:function(_10){
if(!_10){
return;
}
var p,_11={},_12=this._options,_13=this.grid;
var _14=_9.registry;
for(p in _10){
if(_10[p]){
this._normalize(p,_10,_14,_11);
}
}
if(_12.dnd){
_12.columnReordering=false;
}
_2.mixin(_13,_12);
},_normalize:function(p,_15,_16,_17){
if(!_16[p]){
throw new Error("Plugin "+p+" is required.");
}
if(_17[p]){
throw new Error("Recursive cycle dependency is not supported.");
}
var _18=this._options;
if(_18[p]){
return _18[p];
}
_17[p]=true;
_18[p]=_2.mixin({},_16[p],_2.isObject(_15[p])?_15[p]:{});
var _19=_18[p]["dependency"];
if(_19){
if(!_2.isArray(_19)){
_19=_18[p]["dependency"]=[_19];
}
_4.forEach(_19,function(_1a){
if(!this._normalize(_1a,_15,_16,_17)){
throw new Error("Plugin "+_1a+" is required.");
}
},this);
}
delete _17[p];
return _18[p];
},_init:function(pre){
var p,_1b,_1c=this._options;
for(p in _1c){
_1b=_1c[p]["preInit"];
if((pre?_1b:!_1b)&&_1c[p]["class"]&&!this.pluginExisted(p)){
this.loadPlugin(p);
}
}
},loadPlugin:function(_1d){
var _1e=this._options[_1d];
if(!_1e){
return null;
}
var _1f=this.getPlugin(_1d);
if(_1f){
return _1f;
}
var _20=_1e["dependency"];
_4.forEach(_20,function(_21){
if(!this.loadPlugin(_21)){
throw new Error("Plugin "+_21+" is required.");
}
},this);
var cls=_1e["class"];
delete _1e["class"];
_1f=new this.getPluginClazz(cls)(this.grid,_1e);
this._plugins.push(_1f);
return _1f;
},_initView:function(_22){
if(!_22){
return;
}
_8.funnelEvents(_22.contentNode,_22,"doContentEvent",["mouseup","mousemove"]);
_8.funnelEvents(_22.headerNode,_22,"doHeaderEvent",["mouseup"]);
},pluginExisted:function(_23){
return !!this.getPlugin(_23);
},getPlugin:function(_24){
var _25=this._plugins;
_24=_24.toLowerCase();
for(var i=0,len=_25.length;i<len;i++){
if(_24==_25[i]["name"].toLowerCase()){
return _25[i];
}
}
return null;
},getPluginClazz:function(_26){
if(_2.isFunction(_26)){
return _26;
}
var _27="Please make sure Plugin \""+_26+"\" is existed.";
try{
var cls=_2.getObject(_26);
if(!cls){
throw new Error(_27);
}
return cls;
}
catch(e){
throw new Error(_27);
}
},isFixedCell:function(_28){
return _28&&(_28.isRowSelector||_28.fixedPos);
},destroy:function(){
_4.forEach(this._connects,_5.disconnect);
this.forEach("destroy");
if(this.grid.unwrap){
this.grid.unwrap();
}
delete this._connects;
delete this._plugins;
delete this._options;
}});
_9.registerPlugin=function(_29,_2a){
if(!_29){
console.warn("Failed to register plugin, class missed!");
return;
}
var cls=_9;
cls.registry=cls.registry||{};
cls.registry[_29.prototype.name]=_2.mixin({"class":_29},(_2a?_2a:{}));
};
return _9;
});
