package Ġio . g rim locations . ui . view . component Ċ Ċ import Ġandroidx . compose . foundation . Experimental Foundation Api Ċ import Ġandroidx . compose . foundation . layout . Arrange ment Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . Spacer Ċ import Ġandroidx . compose . foundation . layout . height Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . runtime . Composable Ċ 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 . unit . Dp Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġio . g rim locations . data . dto . Profile Mod Difficulty Map Ċ import Ġio . g rim locations . data . dto . RESERVED _ NO _ DIFF IC UL TIES _ IND IC ATOR Ċ import Ġio . g rim locations . data . dto . RESERVED _ NO _ MO DS _ IND IC ATOR Ċ import Ġio . g rim locations . data . dto . is Reserved Ċ import Ġio . g rim locations . ui . view model . state . container . PMD Container Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ Ċ private Ġval ĠtextBox Width Ġ= Ġ 3 0 0 . dp Ċ Ċ @ Experimental Compose Ui Api Ċ @ Experimental Foundation Api Ċ @ Experimental Cor outines Api Ċ @ Composable Ċ fun ĠP MD Chooser Component ( ĊĠĠĠ Ġmap : ĠProfile Mod Difficulty Map , ĊĠĠĠ Ġselected : ĠP MD Container , ĊĠĠĠ ĠonSelect : Ġ( PMD Container ) Ġ-> ĠUnit , ĊĠĠĠ Ġsp acer Height : ĠD p Ġ= Ġ 1 5 . dp , ĊĠĠĠ Ġcontrols On Left : ĠBoolean Ġ= Ġfalse , Ċ ) Ġ{ ĊĠĠĠ Ġval Ġprimary Color Ġ= ĠMaterial Theme . colors . primary ĊĠĠĠ Ġval Ġprofiles Ġ= Ġmap . keys . map Ġ{ ĠTrip le ( it . id , Ġit . name , Ġif Ġ( it . is Reserved ) Ġprimary Color Ġelse Ġnull ) Ġ} ĊĠĠĠ Ġval Ġmods Ġ= Ġmap [ selected . profile ]?. keys ?. map Ġ{ ĠTrip le ( it . id , Ġit . name , Ġnull ) Ġ} Ġ?: Ġempty List () ĊĠĠĠ Ġval Ġdifficult ies Ġ= Ġmap [ selected . profile ]?. get ( selected . mod )?. map Ġ{ ĠTrip le ( it . id , Ġit . name , Ġnull ) Ġ} Ġ?: Ġempty List () ĊĊĠĠĠ Ġval Ġselected Profile Ġ= Ġselected . profile ĊĠĠĠ Ġval Ġselected Mod Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( selected . mod Ġ== ĠRES ER VED _ NO _ MO DS _ IND IC ATOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected . mod . copy ( name Ġ= Ġ" None ") ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected . mod ĊĊĠĠĠ Ġval Ġselected Difficulty Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( selected . difficulty Ġ== ĠRES ER VED _ NO _ DIFF IC UL TIES _ IND IC ATOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected . difficulty . copy ( name Ġ= Ġ" None ") ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected . difficulty ĊĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ Ġvertical Arrange ment Ġ= ĠArrange ment . Center , ĊĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCombo Popup ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Profile ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġprofiles , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty Items Message Ġ= Ġ" None ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ġ= ĠTrip le ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Profile . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Profile . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected Profile . is Reserved ) Ġprimary Color Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= ĠtextBox Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontrol On Left Ġ= Ġcontrols On Left , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonSelect Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprofile Ġ= Ġmap . keys . find Ġ{ Ġitem Ġ-> Ġitem . id Ġ== Ġit . first Ġ} !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmod Ġ= Ġmap [ profile ] !!. keys . first OrNull () Ġ?: ĠRES ER VED _ NO _ MO DS _ IND IC ATOR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdifficulty Ġ= Ġmap [ profile ] ! ![ mod ]?. first OrNull () Ġ?: ĠRES ER VED _ NO _ DIFF IC UL TIES _ IND IC ATOR ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSelect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP MD Container ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Ġ= Ġprofile , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmod Ġ= Ġmod , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdifficulty Ġ= Ġdifficulty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( spacer Height )) ĊĠĠĠĠĠĠĠ ĠCombo Popup ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Mod ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġmods , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty Items Message Ġ= Ġ" None ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisabled Ġ= Ġselected . mod Ġ== ĠRES ER VED _ NO _ MO DS _ IND IC ATOR , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ġ= ĠTrip le ( selected Mod . id , Ġselected Mod . name , Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= ĠtextBox Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontrol On Left Ġ= Ġcontrols On Left , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonSelect Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmod Ġ= Ġmap [ selected . profile ] !!. keys . find Ġ{ Ġitem Ġ-> Ġitem . id Ġ== Ġit . first Ġ} !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdifficulty Ġ= Ġmap [ selected . profile ]?. get ( mod )?. first OrNull () Ġ?: ĠRES ER VED _ NO _ DIFF IC UL TIES _ IND IC ATOR ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSelect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP MD Container ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Ġ= Ġselected . profile , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmod Ġ= Ġmod , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdifficulty Ġ= Ġdifficulty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( spacer Height )) ĊĠĠĠĠĠĠĠ ĠCombo Popup ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Difficulty ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġdifficult ies , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty Items Message Ġ= Ġ" None ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisabled Ġ= Ġselected . difficulty Ġ== ĠRES ER VED _ NO _ DIFF IC UL TIES _ IND IC ATOR , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ġ= ĠTrip le ( selected Difficulty . id , Ġselected Difficulty . name , Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= ĠtextBox Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontrol On Left Ġ= Ġcontrols On Left , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonSelect Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdifficulty Ġ= Ġmap [ selected . profile ] ! ![ selected . mod ] !!. find Ġ{ Ġitem Ġ-> Ġitem . id Ġ== Ġit . first Ġ} !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSelect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP MD Container ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Ġ= Ġselected . profile , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmod Ġ= Ġselected . mod , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdifficulty Ġ= Ġdifficulty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ