| /* |
| Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved. |
| Available via Academic Free License >= 2.1 OR the modified BSD license. |
| see: http://dojotoolkit.org/license for details |
| */ |
| |
| |
| if(!dojo._hasResource["dojox.form._SelectStackMixin"]){ |
| dojo._hasResource["dojox.form._SelectStackMixin"]=true; |
| dojo.provide("dojox.form._SelectStackMixin"); |
| dojo.declare("dojox.form._SelectStackMixin",null,{stackId:"",stackPrefix:"",_paneIdFromOption:function(_1){ |
| return (this.stackPrefix||"")+_1; |
| },_optionValFromPane:function(id){ |
| var sp=this.stackPrefix; |
| if(sp&&id.indexOf(sp)===0){ |
| return id.substring(sp.length); |
| } |
| return id; |
| },_togglePane:function(_2,_3){ |
| if(_2._shown!=undefined&&_2._shown==_3){ |
| return; |
| } |
| var _4=dojo.filter(_2.getDescendants(),"return item.name;"); |
| if(!_3){ |
| _5={}; |
| dojo.forEach(_4,function(w){ |
| _5[w.id]=w.disabled; |
| w.attr("disabled",true); |
| }); |
| _2._savedStates=_5; |
| }else{ |
| var _5=_2._savedStates||{}; |
| dojo.forEach(_4,function(w){ |
| var _6=_5[w.id]; |
| if(_6==undefined){ |
| _6=false; |
| } |
| w.attr("disabled",_6); |
| }); |
| delete _2._savedStates; |
| } |
| _2._shown=_3; |
| },_connectTitle:function(_7,_8){ |
| var fx=dojo.hitch(this,function(_9){ |
| this.updateOption({value:_8,label:_9}); |
| }); |
| if(_7._setTitleAttr){ |
| this.connect(_7,"_setTitleAttr",fx); |
| }else{ |
| this.connect(_7,"attr",function(_a,_b){ |
| if(_a=="title"&&arguments.length>1){ |
| fx(_b); |
| } |
| }); |
| } |
| },onAddChild:function(_c,_d){ |
| if(!this._panes[_c.id]){ |
| this._panes[_c.id]=_c; |
| var v=this._optionValFromPane(_c.id); |
| this.addOption({value:v,label:_c.title}); |
| this._connectTitle(_c,v); |
| } |
| if(!_c.onShow||!_c.onHide||_c._shown==undefined){ |
| _c.onShow=dojo.hitch(this,"_togglePane",_c,true); |
| _c.onHide=dojo.hitch(this,"_togglePane",_c,false); |
| _c.onHide(); |
| } |
| },_setValueAttr:function(v){ |
| if("_savedValue" in this){ |
| return; |
| } |
| this.inherited(arguments); |
| },attr:function(_e,_f){ |
| if(_e=="value"&&arguments.length==2&&"_savedValue" in this){ |
| this._savedValue=_f; |
| } |
| return this.inherited(arguments); |
| },onRemoveChild:function(_10){ |
| if(this._panes[_10.id]){ |
| delete this._panes[_10.id]; |
| this.removeOption(this._optionValFromPane(_10.id)); |
| } |
| },onSelectChild:function(_11){ |
| this._setValueAttr(this._optionValFromPane(_11.id)); |
| },onStartup:function(_12){ |
| var _13=_12.selected; |
| this.addOption(dojo.filter(dojo.map(_12.children,function(c){ |
| var v=this._optionValFromPane(c.id); |
| this._connectTitle(c,v); |
| var _14=null; |
| if(!this._panes[c.id]){ |
| this._panes[c.id]=c; |
| _14={value:v,label:c.title}; |
| } |
| if(!c.onShow||!c.onHide||c._shown==undefined){ |
| c.onShow=dojo.hitch(this,"_togglePane",c,true); |
| c.onHide=dojo.hitch(this,"_togglePane",c,false); |
| c.onHide(); |
| } |
| if("_savedValue" in this&&v===this._savedValue){ |
| _13=c; |
| } |
| return _14; |
| },this),function(i){ |
| return i; |
| })); |
| var _15=this; |
| var fx=function(){ |
| delete _15._savedValue; |
| _15.onSelectChild(_13); |
| if(!_13._shown){ |
| _15._togglePane(_13,true); |
| } |
| }; |
| if(_13!==_12.selected){ |
| var _16=dijit.byId(this.stackId); |
| var c=this.connect(_16,"_showChild",function(sel){ |
| this.disconnect(c); |
| fx(); |
| }); |
| }else{ |
| fx(); |
| } |
| },postMixInProperties:function(){ |
| this._savedValue=this.value; |
| this.inherited(arguments); |
| this.connect(this,"onChange","_handleSelfOnChange"); |
| },postCreate:function(){ |
| this.inherited(arguments); |
| this._panes={}; |
| this._subscriptions=[dojo.subscribe(this.stackId+"-startup",this,"onStartup"),dojo.subscribe(this.stackId+"-addChild",this,"onAddChild"),dojo.subscribe(this.stackId+"-removeChild",this,"onRemoveChild"),dojo.subscribe(this.stackId+"-selectChild",this,"onSelectChild")]; |
| var _17=dijit.byId(this.stackId); |
| if(_17&&_17._started){ |
| this.onStartup({children:_17.getChildren(),selected:_17.selectedChildWidget}); |
| } |
| },destroy:function(){ |
| dojo.forEach(this._subscriptions,dojo.unsubscribe); |
| delete this._panes; |
| this.inherited("destroy",arguments); |
| },_handleSelfOnChange:function(val){ |
| var _18=this._panes[this._paneIdFromOption(val)]; |
| if(_18){ |
| var s=dijit.byId(this.stackId); |
| if(_18==s.selectedChildWidget){ |
| s._transition(_18); |
| }else{ |
| s.selectChild(_18); |
| } |
| } |
| }}); |
| } |