163 lines
5.3 KiB
Kotlin
163 lines
5.3 KiB
Kotlin
package com.petrovv.gogameclock
|
|
|
|
import androidx.compose.foundation.layout.Arrangement
|
|
import androidx.compose.foundation.layout.Column
|
|
import androidx.compose.foundation.layout.Row
|
|
import androidx.compose.foundation.layout.Spacer
|
|
import androidx.compose.foundation.layout.fillMaxSize
|
|
import androidx.compose.foundation.layout.height
|
|
import androidx.compose.foundation.layout.padding
|
|
import androidx.compose.foundation.selection.selectable
|
|
import androidx.compose.foundation.text.KeyboardOptions
|
|
import androidx.compose.material3.Button
|
|
import androidx.compose.material3.RadioButton
|
|
import androidx.compose.material3.Text
|
|
import androidx.compose.material3.TextField
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.getValue
|
|
import androidx.compose.runtime.mutableStateOf
|
|
import androidx.compose.runtime.remember
|
|
import androidx.compose.runtime.setValue
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.text.input.KeyboardType
|
|
import androidx.compose.ui.unit.dp
|
|
|
|
enum class TimingOption(val displayName: String) {
|
|
Absolute("Absolute Timing"),
|
|
Fischer("Fischer Timing"),
|
|
Canadian("Canadian Timing"),
|
|
Japan("Japan Timing"),
|
|
}
|
|
|
|
@Composable
|
|
fun SettingsScreen(
|
|
modifier: Modifier = Modifier,
|
|
onTimingChange: (IClock, IClock) -> Unit
|
|
) {
|
|
var t1 by remember { mutableStateOf("1200") }
|
|
var t2 by remember { mutableStateOf("60") }
|
|
var t3 by remember { mutableStateOf("25") }
|
|
val timingOptions = remember { TimingOption.entries }
|
|
var selectedTiming by remember { mutableStateOf(TimingOption.Absolute) }
|
|
|
|
Column(
|
|
modifier = modifier.fillMaxSize(),
|
|
verticalArrangement = Arrangement.Center,
|
|
horizontalAlignment = Alignment.CenterHorizontally
|
|
) {
|
|
Text(text = "Settings")
|
|
|
|
Spacer(modifier = Modifier.height(16.dp))
|
|
|
|
TextField(
|
|
value = t1,
|
|
onValueChange = { t1 = it },
|
|
label = { Text("Main time (s)") },
|
|
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
|
|
)
|
|
|
|
Column {
|
|
timingOptions.forEach { timingType ->
|
|
Row(
|
|
verticalAlignment = Alignment.CenterVertically,
|
|
modifier = Modifier
|
|
.selectable(
|
|
selected = (timingType == selectedTiming),
|
|
onClick = { selectedTiming = timingType }
|
|
)
|
|
.padding(horizontal = 16.dp)
|
|
) {
|
|
RadioButton(
|
|
selected = (timingType == selectedTiming),
|
|
onClick = { selectedTiming = timingType }
|
|
)
|
|
Text(
|
|
text = timingType.displayName,
|
|
modifier = Modifier.padding(start = 16.dp)
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
var text1 = ""
|
|
var text2 = ""
|
|
var show1 = false
|
|
var show2 = false
|
|
|
|
when (selectedTiming) {
|
|
TimingOption.Absolute -> {}
|
|
TimingOption.Fischer -> {
|
|
text1 = "Increment (s)"
|
|
show1 = true
|
|
}
|
|
TimingOption.Canadian -> {
|
|
text1 = "byo-yomi time (s)"
|
|
text2 = "byo-yomi stones"
|
|
show1 = true
|
|
show2 = true
|
|
}
|
|
TimingOption.Japan -> {
|
|
text1 = "byo-yomi time (s)"
|
|
text2 = "byo-yomi periods"
|
|
show1 = true
|
|
show2 = true
|
|
}
|
|
}
|
|
|
|
if (show1) {
|
|
Spacer(modifier = Modifier.height(8.dp))
|
|
TextField(
|
|
value = t2,
|
|
onValueChange = { t2 = it },
|
|
label = { Text(text1) },
|
|
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number)
|
|
)
|
|
}
|
|
|
|
|
|
|
|
if (show2) {
|
|
Spacer(modifier = Modifier.height(8.dp))
|
|
TextField(
|
|
value = t3,
|
|
onValueChange = { t3 = it },
|
|
label = { Text(text2) },
|
|
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number)
|
|
)
|
|
}
|
|
|
|
Spacer(modifier = Modifier.height(16.dp))
|
|
|
|
Button(onClick = {
|
|
val v1 = t1.toLongOrNull() ?: 25
|
|
val v2 = t2.toLongOrNull() ?: 25
|
|
val v3 = t3.toLongOrNull() ?: 25
|
|
|
|
when (selectedTiming) {
|
|
TimingOption.Absolute -> onTimingChange(AbsoluteTiming(v1), AbsoluteTiming(v1))
|
|
TimingOption.Fischer -> {
|
|
onTimingChange(
|
|
FischerTiming(v1, v2),
|
|
FischerTiming(v1, v2)
|
|
)
|
|
}
|
|
TimingOption.Canadian -> {
|
|
onTimingChange(
|
|
CanadianTiming(v1, v2, v3),
|
|
CanadianTiming(v1, v2, v3)
|
|
)
|
|
}
|
|
TimingOption.Japan -> {
|
|
onTimingChange(
|
|
JapanTiming(v1, v2, v3),
|
|
JapanTiming(v1, v2, v3)
|
|
)
|
|
}
|
|
}
|
|
}) {
|
|
Text(text = "Start Game")
|
|
}
|
|
}
|
|
}
|