Scroll to top when selecting another stanza
This commit is contained in:
parent
e120dce2bd
commit
e3f03703a2
2 changed files with 19 additions and 5 deletions
|
|
@ -13,6 +13,7 @@ import androidx.compose.foundation.layout.height
|
|||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.safeDrawing
|
||||
import androidx.compose.foundation.layout.windowInsetsPadding
|
||||
import androidx.compose.foundation.lazy.grid.rememberLazyGridState
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material3.Text
|
||||
|
|
@ -21,6 +22,7 @@ import androidx.compose.runtime.collectAsState
|
|||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
|
|
@ -37,6 +39,7 @@ import mg.dot.feufaro.solfa.LazyVerticalGridTUO
|
|||
import kotlin.math.roundToInt
|
||||
import cafe.adriel.voyager.core.screen.Screen
|
||||
import cafe.adriel.voyager.koin.koinScreenModel
|
||||
import kotlinx.coroutines.launch
|
||||
import mg.dot.feufaro.data.GridTUOData
|
||||
import mg.dot.feufaro.viewmodel.SolfaScreenModel
|
||||
import java.io.ObjectStreamException
|
||||
|
|
@ -53,6 +56,8 @@ object ScreenSolfa : Screen {
|
|||
val measure by sharedScreenModel.measure.collectAsState()
|
||||
val stanza by sharedScreenModel.stanza.collectAsState()
|
||||
val gridTUOData = GridTUOData(measure, tuoList, stanza)
|
||||
val lazyGridState = rememberLazyGridState()
|
||||
val coroutineScope = rememberCoroutineScope()
|
||||
Column(
|
||||
Modifier.fillMaxSize()
|
||||
.pointerInput(Unit) {
|
||||
|
|
@ -66,6 +71,7 @@ object ScreenSolfa : Screen {
|
|||
},
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
val columnScrollState = rememberScrollState()
|
||||
if (showContextualMenu) {
|
||||
Popup(
|
||||
alignment = Alignment.TopStart,
|
||||
|
|
@ -85,7 +91,7 @@ object ScreenSolfa : Screen {
|
|||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.weight(1f)
|
||||
.verticalScroll(rememberScrollState())
|
||||
.verticalScroll(columnScrollState)
|
||||
) {
|
||||
FlowRow(
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
|
|
@ -104,11 +110,13 @@ object ScreenSolfa : Screen {
|
|||
.padding(horizontal = 4.dp)
|
||||
)
|
||||
Text(text = measureString)
|
||||
Text(text = "Stanza: $stanza")
|
||||
}
|
||||
LazyVerticalGridTUO(
|
||||
gridTUOData,
|
||||
gridWidthPx = gridWidthPx,
|
||||
onGridWidthMeasured = { width -> gridWidthPx = width }
|
||||
onGridWidthMeasured = { width -> gridWidthPx = width },
|
||||
lazyGridState = lazyGridState
|
||||
)
|
||||
MGButton(onClick = {
|
||||
//showContent = !showContent
|
||||
|
|
@ -131,13 +139,16 @@ object ScreenSolfa : Screen {
|
|||
enabled = (i != stanza.toInt()),
|
||||
onClick = {
|
||||
sharedScreenModel.setStanza(i)
|
||||
coroutineScope.launch {
|
||||
lazyGridState.animateScrollToItem(0)
|
||||
columnScrollState.animateScrollTo(0)
|
||||
}
|
||||
},
|
||||
modifier = Modifier.padding(horizontal = 4.dp)
|
||||
) {
|
||||
Text("$i")
|
||||
}
|
||||
}
|
||||
Text(text = "Stanza: $stanza")
|
||||
val songAuthor: String by sharedScreenModel.songAuthor.collectAsState()
|
||||
val songComposer: String by sharedScreenModel.songComposer.collectAsState()
|
||||
val songRhythm: String by sharedScreenModel.songRhythm.collectAsState()
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import androidx.compose.foundation.background
|
|||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.lazy.grid.GridCells
|
||||
import androidx.compose.foundation.lazy.grid.LazyGridState
|
||||
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
|
||||
import androidx.compose.foundation.lazy.grid.items
|
||||
import androidx.compose.ui.Modifier
|
||||
|
|
@ -334,7 +335,8 @@ fun LazyVerticalGridTUO(
|
|||
viewModel: GridTUOData,
|
||||
gridWidthPx: Int,
|
||||
onGridWidthMeasured: (Int) -> Unit,
|
||||
modifier: Modifier = Modifier
|
||||
modifier: Modifier = Modifier,
|
||||
lazyGridState: LazyGridState
|
||||
) {
|
||||
val regexMeasure = Regex("(\\d)/\\d").find(viewModel.measure)
|
||||
val tuoList = viewModel.tuoList
|
||||
|
|
@ -373,7 +375,8 @@ fun LazyVerticalGridTUO(
|
|||
|
||||
horizontalArrangement = Arrangement.spacedBy(horizontalArrangementSpacing),
|
||||
verticalArrangement = Arrangement.spacedBy(8.dp),
|
||||
contentPadding = PaddingValues(8.dp) // c'est juste le padding exterieur de toute la liste
|
||||
contentPadding = PaddingValues(8.dp), // c'est juste le padding exterieur de toute la liste
|
||||
state = lazyGridState
|
||||
) {
|
||||
items(items = tuoList.drop(1), key = { it.numBlock }) { oneTUO ->
|
||||
TimeUnitComposable(
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue