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