package Ġhe p . data forge . vision Ċ Ċ import Ġhe p . data forge . names .* Ċ import Ġhe p . data forge . provider . Provider Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġgroup Ġof Ġ[ Vision ] Ġinstances Ċ Ġ*/ Ċ interface ĠVision Group Ġ: ĠProvider , ĠVision Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġmap Ġof Ġtop Ġlevel Ġnamed Ġchildren ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġchildren : ĠMap < Name Token , ĠVision > ĊĊĠĠĠ Ġoverride Ġval Ġdefault Target : ĠString Ġget () Ġ= ĠVision . TYPE ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġstylesheet Ġfor Ġthis Ġgroup Ġand Ġits Ġdesc endants . ĠStyles heet Ġis Ġnot Ġapplied Ġdirectly , ĊĠĠĠĠ Ġ* Ġbut Ġinstead Ġis Ġjust Ġa Ġrepository Ġfor Ġnamed Ġconfigurations . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġstyle Sheet : ĠStyleSheet ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġmap Ġof Ġdirect Ġchildren Ġfor Ġspecific Ġtarget ĊĠĠĠĠ Ġ* Ġ( currently Ġ" visual " Ġor Ġ" style ") ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġprovide Top ( target : ĠString ): ĠMap < Name , ĠAny > Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( target ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVision . TYPE Ġ-> Ġchildren . flatMap Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres : ĠMap < Name , ĠAny > Ġ= Ġif Ġ( value Ġis ĠVision Group ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . provide Top ( target ). map Keys Ġ{ Ġkey Ġ+ Ġit . key Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( key . as Name () Ġto Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres . entries ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. associate Ġ{ Ġit . to Pair () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSTYLE _ TARGET Ġ-> Ġstyle Sheet ?. items ?. map Keys Ġ{ Ġit . key . to Name () Ġ} Ġ?: Ġempty Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġempty Map () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġget ( name : ĠName ): ĠVision ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname . isEmpty () Ġ-> Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname . length Ġ== Ġ 1 Ġ-> Ġchildren [ name . first () !! ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ( children [ name . first () !! ] Ġas ? ĠVision Group )?. get ( name . cut First ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġfix Ġfor Ġserialization Ġbug Ġthat Ġwrites Ġall Ġproper Ġparents Ġinside Ġthe Ġtree Ġafter Ġde serialization ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġattach Children () Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Sheet ?. owner Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġchildren . values . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . parent Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( it Ġas ? ĠVision Group )?. attach Children () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTYLE _ TARGET Ġ= Ġ" style " ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠIterate Ġover Ġchildren Ġof Ġthis Ġgroup Ċ Ġ*/ Ċ operator Ġfun ĠVision Group . iterator (): ĠIterator < Vision > Ġ= Ġchildren . values . iterator () Ċ Ċ val ĠVision Group . isEmpty : ĠBoolean Ġget () Ġ= Ġthis . children . isEmpty () Ċ Ċ /** Ċ Ġ* ĠMutable Ġversion Ġof Ġ[ Vision Group ] Ċ Ġ*/ Ċ interface ĠMutable Vision Group Ġ: ĠVision Group Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġlistener Ġfor Ġchildren Ġstructure Ġchange . ĊĠĠĠĠ Ġ* Ġ@ param Ġowner Ġthe Ġhandler Ġto Ġproperly Ġremove Ġlisteners ĊĠĠĠĠ Ġ* Ġ@ param Ġaction ĠFirst Ġargument Ġof Ġthe Ġaction Ġis Ġthe Ġname Ġof Ġchanged Ġchild . ĠSecond Ġargument Ġis Ġthe Ġnew Ġvalue Ġof Ġthe Ġobject . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Children Change ( owner : ĠAny ?, Ġaction : Ġ( Name , ĠVision ?) Ġ-> ĠUnit ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġchildren Ġchange Ġlistener ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Children ChangeListener ( owner : ĠAny ?) ĊĊĠĠĠ Ġoperator Ġfun Ġset ( name : ĠName , Ġchild : ĠVision ?) Ċ } Ċ Ċ operator Ġfun ĠVision Group . get ( str : ĠString ?): ĠVision ? Ġ= Ġget ( str ?. to Name () Ġ?: ĠName . EMPTY ) Ċ Ċ operator Ġfun ĠMutable Vision Group . set ( key : ĠString , Ġchild : ĠVision ?) Ġ{ ĊĠĠĠ Ġset ( key . to Name (), Ġchild ) Ċ } Ċ Ċ fun ĠMutable Vision Group . removeAll () Ġ= Ġchildren . keys . map Ġ{ Ġit . as Name () Ġ}. forEach Ġ{ Ġthis [ it ] Ġ= Ġnull Ġ}