package Ġnet . app tr onic . core . view model . navigation Ċ Ċ import Ġnet . app tr onic . core . base . Subscription Hold ers Ċ import Ġnet . app tr onic . core . base . addTo Ċ import Ġnet . app tr onic . core . base . observable . Observable Ċ import Ġnet . app tr onic . core . base . platform . debug Error Ċ import Ġnet . app tr onic . core . context . lifecycle . Lifecycle Stage Definition Ċ import Ġnet . app tr onic . core . context . lifecycle . enter Stage Ċ import Ġnet . app tr onic . core . context . lifecycle . exit Stage Ċ import Ġnet . app tr onic . core . entity . Entity Ċ import Ġnet . app tr onic . core . entity . commons . distinct Until Changed Ċ import Ġnet . app tr onic . core . entity . commons . value Ċ import Ġnet . app tr onic . core . entity . function . and Ċ import Ġnet . app tr onic . core . view model . I ViewModel Ċ import Ġnet . app tr onic . core . view model . ViewModel Lifecycle Ċ Ċ internal Ġclass ĠViewModel Container ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠviewModel : ĠI ViewModel , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġparent : ĠI ViewModel , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġshould Show : ĠEntity < Boolean > Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġsubscription Hold ers Ġ= ĠSubscription Hold ers () ĊĊĠĠĠ Ġprivate Ġval Ġattached Local Ġ= ĠviewModel . value ( false ) ĊĠĠĠ Ġprivate Ġval Ġbound Local Ġ= ĠviewModel . value ( false ) ĊĠĠĠ Ġprivate Ġval Ġvisible Local Ġ= ĠviewModel . value ( false ) ĊĠĠĠ Ġprivate Ġval Ġfocused Local Ġ= ĠviewModel . value ( false ) ĊĊĠĠĠ Ġprivate Ġval Ġattached Parent Ġ= Ġfrom ( parent . observe Attached ()) ĊĠĠĠ Ġprivate Ġval Ġbound Parent Ġ= Ġfrom ( parent . observe Bound ()) ĊĠĠĠ Ġprivate Ġval Ġvisible Parent Ġ= Ġfrom ( parent . observe Visible ()) ĊĠĠĠ Ġprivate Ġval Ġfocused Parent Ġ= Ġfrom ( parent . observe Focused ()) ĊĊĠĠĠ Ġprivate Ġval Ġis Attached Ġ= Ġ( attached Local Ġand Ġattached Parent ). distinct Until Changed () ĊĠĠĠ Ġprivate Ġval Ġis Bound Ġ= Ġ( is Attached Ġand Ġbound Local Ġand Ġbound Parent ). distinct Until Changed () ĊĠĠĠ Ġprivate Ġval Ġis Visible Ġ= Ġ( is Bound Ġand Ġvisible Local Ġand Ġvisible Parent ). distinct Until Changed () ĊĠĠĠ Ġprivate Ġval Ġis Focused Ġ= Ġ( isVisible Ġand Ġfocused Local Ġand Ġfocused Parent ). distinct Until Changed () ĊĠĠĠ Ġprivate Ġvar Ġshould Show Value Ġ= Ġtrue ĊĊĠĠĠ Ġprivate Ġfun Ġfrom ( parent : ĠObservable < Boolean >): ĠEntity < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproperty Ġ= ĠviewModel . value < Boolean >(). apply Ġ{ Ġset ( false ) Ġ} ĊĠĠĠĠĠĠĠ Ġparent . subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty . set ( it ) ĊĠĠĠĠĠĠĠ Ġ}. addTo ( subscription Hold ers ) ĊĠĠĠĠĠĠĠ Ġreturn Ġproperty ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Attached ( value : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġattached Local . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdebug Error ( Error ("$ viewModel Ġis Ġalready Ġattached =$ value ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġattached Local . set ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Bound ( value : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( attached Local . get (). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdebug Error ( Error ("$ viewModel Ġis Ġnot Ġattached ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġbound Local . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdebug Error ( Error ("$ viewModel Ġis Ġalready Ġbound =$ value ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbound Local . set ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Visible ( value : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( attached Local . get (). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdebug Error ( Error ("$ viewModel Ġis Ġnot Ġbound ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġvisible Local . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdebug Error ( Error ("$ viewModel Ġis Ġalready Ġvisible =$ value ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvisible Local . set ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Focused ( value : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( attached Local . get (). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdebug Error ( Error ("$ viewModel Ġis Ġnot Ġvisible ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġfocused Local . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdebug Error ( Error ("$ viewModel Ġis Ġalready Ġfocused =$ value ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfocused Local . set ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġvisibility Change Callback : Ġ( Boolean ) Ġ-> ĠUnit Ġ= Ġ{} ĊĊĠĠĠ Ġfun Ġobserve Visibility Changed ( callback : Ġ( Boolean ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvisibility Change Callback Ġ= Ġcallback ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġbind Stage ( viewModel , ĠViewModel Lifecycle . Attached , Ġis Attached ) ĊĠĠĠĠĠĠĠ Ġbind Stage ( viewModel , ĠViewModel Lifecycle . Bound , Ġis Bound ) ĊĠĠĠĠĠĠĠ Ġbind Stage ( viewModel , ĠViewModel Lifecycle . Visible , Ġis Visible ) ĊĠĠĠĠĠĠĠ Ġbind Stage ( viewModel , ĠViewModel Lifecycle . Focused , Ġis Focused ) ĊĠĠĠĠĠĠĠ Ġshould Show . subscribe ( viewModel . context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Show Value Ġ!= Ġit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Show Value Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Change Callback . invoke ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbind Stage ( viewModel : ĠI ViewModel , Ġdefinition : ĠLifecycle Stage Definition , Ġentity : ĠEntity < Boolean >) Ġ{ ĊĠĠĠĠĠĠĠ Ġentity . distinct Until Changed (). subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenter Stage ( viewModel . context , Ġdefinition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexit Stage ( viewModel . context , Ġdefinition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġterminate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsubscription Hold ers . unsubscribe () ĊĠĠĠĠĠĠĠ ĠviewModel . context . lifecycle . terminate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshould Show (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġshould Show Value ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget ViewModel (): ĠI ViewModel Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠviewModel ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" ViewModel =$ viewModel Ġstage =${ viewModel . context . lifecycle . getActive Stage ()?. get Stage Name ()} Ġshould Show Value =$ should Show Value " ĊĠĠĠ Ġ} Ċ Ċ }