package Ġio . g rim locations . ui . view Ċ Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . material .* Ċ import Ġandroidx . compose . material . icons . Icons Ċ import Ġandroidx . compose . material . icons . filled . Edit Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . Composition Local Provider Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Experimental Compose Ui Api Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . text . TextStyle Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . compose . ui . unit . sp Ċ import Ġandroidx . compose . ui . window .* Ċ import Ġio . g rim locations . constant . APP _ ICON Ċ import Ġio . g rim locations . framework . ui . Local ViewModel Ċ import Ġio . g rim locations . framework . ui . get Factory ViewModel Ċ import Ġio . g rim locations . framework . ui . view . View Ċ import Ġio . g rim locations . ui . GL ViewModel Provider Ċ import Ġio . g rim locations . ui . view model . Properties ViewModel Ċ import Ġio . g rim locations . ui . view model . event . persist State Ċ import Ġio . g rim locations . ui . view model . event . update Install Path Ċ import Ġio . g rim locations . ui . view model . state . Properties State Ċ import Ġio . g rim locations . ui . view model . state . Properties State Error . GR IM _ INTERNAL S _ NOT _ FOUND Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġjavax . swing . J FileChooser Ċ Ċ private Ġval ĠTEXT _ FIELD _ WIDTH Ġ= Ġ 4 0 0 . dp Ċ Ċ @ Experimental Cor outines Api Ċ @ Composable Ċ private Ġfun ĠProperties View ( ĊĠĠĠ Ġon Cancel : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġon Ok : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġvm : ĠProperties ViewModel Ġ= Ġget Factory ViewModel (), Ċ ) Ġ= ĠView ( vm ) Ġ{ ĊĊĠĠĠ ĠSurface ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill MaxSize () ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Arrange ment Ġ= ĠArrange ment . Center , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Alignment Ġ= ĠAlignment . Center Vert ically , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Arrange ment Ġ= ĠArrange ment . Center ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTextField ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Style Ġ= ĠTextStyle . Default . copy ( color Ġ= ĠColor . White ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextColor Ġ= ĠColor . White , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġit . install Path Ġ?: Ġ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Value Change Ġ= Ġvm :: update Install Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText (" GD ĠInstallation ĠFolder ", Ġstyle Ġ= ĠTextStyle ( fontSize Ġ= Ġ 1 5 . sp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Line Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . width ( TEXT _ FIELD _ WIDTH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . width ( 1 0 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . size ( 4 0 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( vm . install FileChooser ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġok Or Cancel Ġ= Ġshow Open Dialog ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ok Or Cancel Ġ== ĠJ FileChooser . APPRO VE _ OPTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvm . update Install Path ( selected File . absolute Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcons . Default . Edit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Browse ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . errors . contains ( GR IM _ INTERNAL S _ NOT _ FOUND )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" G rim Internals 6 4 . exe Ġnot Ġfound ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . Red , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . width ( TEXT _ FIELD _ WIDTH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( Modifier . height ( 3 0 . dp )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠRow ( horizontal Arrange ment Ġ= ĠArrange ment . End ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButton ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġon Cancel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText (" Cancel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . width ( 2 0 . dp )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButton ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Ġ= Ġis Ok Enabled ( it ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvm . persist State () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Ok () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText (" Ok ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġis Ok Enabled ( state : ĠProperties State ) Ġ= ĊĠĠĠ Ġstate . install Path Ġ!= Ġnull Ġ&& Ġstate . install Path . isNotBlank () Ġ&& Ġstate . errors . isEmpty () Ċ Ċ @ Experimental Compose Ui Api Ċ @ Experimental Cor outines Api Ċ @ Composable Ċ fun Ġopen Initial Properties View ( ĊĠĠĠ Ġvm Provider : ĠGL ViewModel Provider , ĊĠĠĠ Ġnext Window : Ġ@ Composable Ġ(() Ġ-> ĠUnit ), ĊĠĠĠ Ġclose Window : Ġ() Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠĠĠ Ġval Ġstate Ġ= ĊĠĠĠĠĠĠĠ Ġremember Window State ( size Ġ= ĠWindow Size ( 5 5 0 . dp , Ġ 2 5 0 . dp ), Ġposition Ġ= ĠWindow Position . Aligned ( Alignment . Center )) ĊĊĠĠĠ Ġval ĠisOpen Ġ= Ġremember Ġ{ Ġmutable State Of ( true ) Ġ} ĊĊĠĠĠ Ġif Ġ( isOpen . value ) Ġ{ ĊĠĠĠĠĠĠĠ ĠWindow ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" Settings ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ġ= ĠAPP _ ICON , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġstate , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClose Request Ġ= Ġclose Window , ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComp osition Local Provider ( Local ViewModel Ġprovides Ġvm Provider ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG rim Locations Theme Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProperties View ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Cancel Ġ= Ġclose Window , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Ok Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisOpen . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġnext Window () ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Experimental Compose Ui Api Ċ @ Experimental Cor outines Api Ċ @ Composable Ċ fun Ġopen Properties View ( ĊĠĠĠ Ġclose Window : Ġ() Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠĠĠ Ġval Ġstate Ġ= ĊĠĠĠĠĠĠĠ Ġremember Dialog State ( size Ġ= ĠWindow Size ( 5 5 0 . dp , Ġ 2 5 0 . dp ), Ġposition Ġ= ĠWindow Position . Aligned ( Alignment . Center )) ĊĊĠĠĠ ĠDialog ( ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" Settings ", ĊĠĠĠĠĠĠĠ Ġicon Ġ= ĠAPP _ ICON , ĊĠĠĠĠĠĠĠ Ġstate Ġ= Ġstate , ĊĠĠĠĠĠĠĠ ĠonClose Request Ġ= Ġclose Window , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠG rim Locations Theme Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProperties View ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Cancel Ġ= Ġclose Window , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Ok Ġ= Ġclose Window , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }