Coverage Summary for Class: CueDurationViewKt (com.vsevolodganin.clicktrack.ui.piece)

Class Method, % Branch, % Line, % Instruction, %
CueDurationViewKt 0% (0/10) 0% (0/43) 0% (0/65) 0.4% (4/968)
CueDurationViewKt$WhenMappings
Total 0% (0/10) 0% (0/43) 0% (0/65) 0.4% (4/968)


 package com.vsevolodganin.clicktrack.ui.piece
 
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.IntrinsicSize
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.width
 import androidx.compose.material.MaterialTheme
 import androidx.compose.material.ProvideTextStyle
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.unit.dp
 import clicktrack.multiplatform.generated.resources.Res
 import clicktrack.multiplatform.generated.resources.cue_duration_beats
 import clicktrack.multiplatform.generated.resources.cue_duration_measures
 import clicktrack.multiplatform.generated.resources.cue_duration_time
 import com.vsevolodganin.clicktrack.model.CueDuration
 import org.jetbrains.compose.resources.stringResource
 import org.jetbrains.compose.ui.tooling.preview.Preview
 import kotlin.time.Duration.Companion.minutes
 
 @Composable
 fun CueDurationView(
     value: CueDuration,
     onValueChange: (CueDuration) -> Unit,
     onTypeChange: (CueDuration.Type) -> Unit,
     modifier: Modifier = Modifier,
 ) {
     Row(modifier = modifier.height(IntrinsicSize.Min)) {
         DurationTypeDropdown(
             value = value.type,
             onValueChange = onTypeChange,
         )
 
         Spacer(modifier = Modifier.width(8.dp))
 
         val commonCueDurationModifier = Modifier
             .align(Alignment.CenterVertically)
             .fillMaxWidth()
 
         ProvideTextStyle(MaterialTheme.typography.subtitle1) {
             when (value) {
                 is CueDuration.Beats -> {
                     EditBeatsView(
                         value = value,
                         onValueChange = onValueChange,
                         modifier = commonCueDurationModifier,
                     )
                 }
 
                 is CueDuration.Measures -> {
                     EditMeasuresView(
                         value = value,
                         onValueChange = onValueChange,
                         modifier = commonCueDurationModifier,
                     )
                 }
 
                 is CueDuration.Time -> {
                     EditTimeView(
                         value = value,
                         onValueChange = onValueChange,
                         modifier = commonCueDurationModifier,
                     )
                 }
             }
         }
     }
 }
 
 @Composable
 private fun DurationTypeDropdown(value: CueDuration.Type, onValueChange: (CueDuration.Type) -> Unit) {
     DropdownSelector(
         items = CueDuration.Type.entries,
         selectedValue = value,
         onSelect = { selectedValue ->
             onValueChange(selectedValue)
         },
         toString = { it.stringResource() },
         modifier = Modifier.width(140.dp),
     )
 }
 
 @Composable
 private fun EditBeatsView(value: CueDuration.Beats, onValueChange: (CueDuration) -> Unit, modifier: Modifier = Modifier) {
     NumberInputField(
         value = value.value,
         onValueChange = { onValueChange(CueDuration.Beats(it)) },
         modifier = modifier,
     )
 }
 
 @Composable
 private fun EditMeasuresView(value: CueDuration.Measures, onValueChange: (CueDuration) -> Unit, modifier: Modifier = Modifier) {
     NumberInputField(
         value = value.value,
         onValueChange = { onValueChange(CueDuration.Measures(it)) },
         modifier = modifier,
     )
 }
 
 @Composable
 private fun EditTimeView(value: CueDuration.Time, onValueChange: (CueDuration) -> Unit, modifier: Modifier = Modifier) {
     DurationPicker(
         value = value.value,
         onValueChange = { onValueChange(CueDuration.Time(it)) },
         modifier = modifier,
     )
 }
 
 @Composable
 private fun CueDuration.Type.stringResource(): String {
     return when (this) {
         CueDuration.Type.BEATS -> Res.string.cue_duration_beats
         CueDuration.Type.MEASURES -> Res.string.cue_duration_measures
         CueDuration.Type.TIME -> Res.string.cue_duration_time
     }.let { stringResource(it) }
 }
 
 @Preview
 @Composable
 private fun Preview() {
     MaterialTheme {
         Column {
             CueDurationView(CueDuration.Beats(999999), {}, {})
             CueDurationView(CueDuration.Measures(999999), {}, {})
             CueDurationView(CueDuration.Time(1.minutes), {}, {})
         }
     }
 }