/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 - present ĠRobert ĠJar os Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠY ann ik ĠH amp e Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġio . k vision . progress Ċ Ċ import Ġio . k vision . core . Container Ċ import Ġio . k vision . panel . Simple Panel Ċ import Ġio . k vision . state . Observable State Ċ import Ġio . k vision . state . Observable Value Ċ import Ġio . k vision . state . bind Ċ Ċ /** Ċ Ġ* ĠThe ĠBootstrap Ġprogress Ċ Ġ* Ċ Ġ* Ġ@ constructor Ċ Ġ* Ġ@ param ĠT Ġthe Ġtype Ġthat Ġdescribes Ġthe Ġprogress , Ġtypically Ġ@ see ĠNumber Ċ Ġ* Ġ@ param Ġbounds Ġbounds Ġof Ġthe Ġprogress Ċ Ġ* Ġ@ param Ġclasses Ġa Ġset Ġof ĠCSS Ġclass Ġnames Ċ Ġ* Ġ@ param Ġinit Ġan Ġinitializer Ġextension Ġfunction Ċ Ġ*/ Ċ class ĠProgress < T >( ĊĠĠĠ Ġbounds : ĠBounds < T >, ĊĠĠĠ Ġclasses : ĠSet < String > Ġ= Ġset Of (), ĊĠĠĠ Ġinit : Ġ( Progress < T >. () Ġ-> ĠUnit )? Ġ= Ġnull Ċ ) Ġ: ĠSimple Panel ( classes Ġ+ Ġ" progress ") Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ constructor ĊĠĠĠĠ Ġ* Ġ@ param Ġmin Ġthe Ġminimal Ġvalue ĊĠĠĠĠ Ġ* Ġ@ param Ġmax Ġthe Ġmax imal Ġvalue ĊĠĠĠĠ Ġ* Ġ@ param Ġclasses Ġa Ġset Ġof ĠCSS Ġclass Ġnames ĊĠĠĠĠ Ġ* Ġ@ param Ġinit Ġan Ġinitializer Ġextension Ġfunction ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( min : ĠT , Ġmax : ĠT , Ġclasses : ĠSet < String > Ġ= Ġset Of (), Ġinit : Ġ( Progress < T >. () Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ ĠBounds ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax ĊĠĠĠĠĠĠĠ Ġ), Ġclasses , Ġinit ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġbounds Ġ= ĠObservable Value ( bounds ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" Le aking This ") ĊĠĠĠĠĠĠĠ Ġinit ?. invoke ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Bounds ( min : ĠT , Ġmax : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbounds . value Ġ= ĠBounds ( min , Ġmax ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġfirst Ġprogress Ġbar . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget First ProgressBar (): ĠProgress Bar Tag < T >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Children (). find Ġ{ Ġit Ġis ĠProgress Bar Tag < *> Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . unsafe Cast < ProgressBar Tag < T >>() ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġlist Ġof Ġall Ġprogress Ġbars . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget ProgressBar s (): ĠList < ProgressBar Tag < T >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Children (). filter Is Instance < ProgressBar Tag < T >>() ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠDSL Ġbuilder Ġextension Ġfunction . Ċ Ġ* Ċ Ġ* ĠIt Ġtakes Ġthe Ġsame Ġparameters Ġas Ġthe Ġconstructor Ġof Ġthe Ġbuilt Ġcomponent . Ċ Ġ*/ Ċ fun Ġ< T > ĠContainer . progress ( ĊĠĠĠ Ġbounds : ĠBounds < T >, ĊĠĠĠ Ġclasses : ĠSet < String > Ġ= Ġset Of (), ĊĠĠĠ Ġinit : Ġ( Progress < T >. () Ġ-> ĠUnit )? Ġ= Ġnull Ċ ): ĠProgress < T > Ġ= ĠProgress ( bounds , Ġclasses , Ġinit ). also Ġ{ Ġthis . add ( it ) Ġ} Ċ Ċ /** Ċ Ġ* ĠDSL Ġbuilder Ġextension Ġfunction . Ċ Ġ* Ċ Ġ* ĠIt Ġtakes Ġthe Ġsame Ġparameters Ġas Ġthe Ġconstructor Ġof Ġthe Ġbuilt Ġcomponent . Ċ Ġ*/ Ċ fun ĠContainer . progress ( ĊĠĠĠ Ġmin : ĠNumber Ġ= Ġ 0 , ĊĠĠĠ Ġmax : ĠNumber Ġ= Ġ 1 0 0 , ĊĠĠĠ Ġclasses : ĠSet < String > Ġ= Ġset Of (), ĊĠĠĠ Ġinit : Ġ( Progress < Number >. () Ġ-> ĠUnit )? Ġ= Ġnull Ċ ): ĠProgress < Number > Ġ= ĠProgress ( Bounds ( min , Ġmax ), Ġclasses , Ġinit ). also Ġ{ Ġthis . add ( it ) Ġ} Ċ Ċ /** Ċ Ġ* ĠDSL Ġbuilder Ġextension Ġfunction Ġfor Ġobservable Ġstate . Ċ Ġ* Ċ Ġ* ĠIt Ġtakes Ġthe Ġsame Ġparameters Ġas Ġthe Ġconstructor Ġof Ġthe Ġbuilt Ġcomponent . Ċ Ġ*/ Ċ fun Ġ< T , ĠS > ĠContainer . progress ( ĊĠĠĠ Ġstate : ĠObservable State < S >, ĊĠĠĠ Ġbounds : ĠBounds < T >, ĊĠĠĠ Ġclasses : ĠSet < String > Ġ= Ġset Of (), ĊĠĠĠ Ġinit : ĠProgress < T >. ( S ) Ġ-> ĠUnit Ċ ) Ġ= Ġprogress ( bounds , Ġclasses ). bind ( state , Ġtrue , Ġinit ) Ċ Ċ /** Ċ Ġ* ĠDSL Ġbuilder Ġextension Ġfunction Ġfor Ġobservable Ġstate . Ċ Ġ* Ċ Ġ* ĠIt Ġtakes Ġthe Ġsame Ġparameters Ġas Ġthe Ġconstructor Ġof Ġthe Ġbuilt Ġcomponent . Ċ Ġ*/ Ċ fun Ġ< S > ĠContainer . progress ( ĊĠĠĠ Ġstate : ĠObservable State < S >, ĊĠĠĠ Ġmin : ĠNumber Ġ= Ġ 0 , ĊĠĠĠ Ġmax : ĠNumber Ġ= Ġ 1 0 0 , ĊĠĠĠ Ġclasses : ĠSet < String > Ġ= Ġset Of (), ĊĠĠĠ Ġinit : ĠProgress < Number >. ( S ) Ġ-> ĠUnit Ċ ) Ġ= Ġprogress ( min , Ġmax , Ġclasses ). bind ( state , Ġtrue , Ġinit ) Ċ