init
This commit is contained in:
162
app/src/main/java/com/petrovv/gogameclock/SettingsScreen.kt
Normal file
162
app/src/main/java/com/petrovv/gogameclock/SettingsScreen.kt
Normal file
@@ -0,0 +1,162 @@
|
||||
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")
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user