/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠI ce Rock ĠMAG ĠInc . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġdev . icer ock . mo ko . widgets . core Ċ Ċ import Ġdev . icer ock . mo ko . mv vm . li ved ata . LiveData Ċ import Ġdev . icer ock . mo ko . resources . desc . StringDesc Ċ import Ġdev . icer ock . mo ko . resources . desc . desc Ċ import Ġkotlin . properties . ReadOnly Property Ċ import Ġkotlin . properties . ReadWrite Property Ċ import Ġkotlin . reflect . K Property Ċ Ċ class ĠWidget Scope ( ĊĠĠĠ Ġprivate Ġval Ġproperties : ĠMutable Map < Key <* >, ĠAny >, ĊĠĠĠ Ġprivate Ġval Ġid Properties : ĠMutable Map < Pair < Id , ĠKey <* >>, ĠAny > Ċ ) Ġ{ ĊĊĠĠĠ Ġconstructor () Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġproperties Ġ= Ġmutable Map Of (), ĊĠĠĠĠĠĠĠ Ġid Properties Ġ= Ġmutable Map Of () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġconstructor ( parent : ĠWidget Scope ? Ġ= Ġnull , Ġbuilder : ĠBuilder . () Ġ-> ĠUnit ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġproperties Ġ= Ġparent ?. properties ?. deep Mutable Copy () Ġ?: Ġmutable Map Of (), ĊĠĠĠĠĠĠĠ Ġid Properties Ġ= Ġparent ?. id Properties ?. deep Mutable Copy () Ġ?: Ġmutable Map Of () ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠBuilder ( scope Ġ= Ġthis ). builder () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġchild Scope ( builder : ĠBuilder . () Ġ-> ĠUnit ): ĠWidget Scope Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠWidget Scope ( parent Ġ= Ġthis , Ġbuilder Ġ= Ġbuilder ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconst ( value : ĠString ): ĠLive Data < StringDesc > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue . desc (). as LiveData () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġconst ( value : ĠT ): ĠLive Data < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue . as LiveData () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠKey < T > ĊĊĠĠĠ Ġinterface ĠId ĊĊĠĠĠ Ġclass ĠBuilder ( val Ġscope : ĠWidget Scope ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġ< T Ġ: ĠAny > ĠsetId Property ( id : ĠId , Ġkey : ĠKey < T >, Ġvalue : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope . id Properties [ id Ġto Ġkey ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġ< T Ġ: ĠAny > ĠgetId Property ( id : ĠId , Ġkey : ĠKey < T >, Ġfallback : Ġ() Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġreturn Ġid Properties [ id Ġto Ġkey ] Ġas ? ĠT Ġ?: Ġfallback () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġread Property ( key : ĠKey < T >, Ġcross inline Ġfallback : Ġ() Ġ-> ĠT ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠReadOnly Property < Widget Scope , ĠT > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠWidget Scope , Ġproperty : ĠK Property < *> ): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= Ġthis Ref . properties [ key ] Ġas ? ĠT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( factory Ġ?: Ġfallback ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġread Write Property ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠKey < T >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcross inline Ġread Property : ĠWidget Scope . () Ġ-> ĠT ĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġobject Ġ: ĠRead Write Property < Builder , ĠT > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠsetValue ( this Ref : ĠBuilder , Ġproperty : ĠK Property <* >, Ġvalue : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ref . scope . properties [ key ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠBuilder , Ġproperty : ĠK Property < *> ): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis Ref . scope . read Property () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġ< K , ĠV > ĠMap < K , ĠV >. deep Mutable Copy (): ĠMutable Map < K , ĠV > Ġ= Ġmutable Map Of < K , ĠV >(). also Ġ{ ĊĠĠĠ ĠforEach Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠ Ġit [ key ] Ġ= Ġvalue ĊĠĠĠ Ġ} Ċ } Ċ