diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ui/DrawerUI.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ui/DrawerUI.kt index 1637bd1..4951f23 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ui/DrawerUI.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ui/DrawerUI.kt @@ -52,14 +52,12 @@ fun MainScreenWithDrawer( val currentActivePath = Solfa.currentFile var textInput = sharedScreenModel.searchTitle.collectAsState().value - var isSearchActive by remember { mutableStateOf(false) } + val isSearchActive by sharedScreenModel.showSearchMenu.collectAsState() val focusRequester = remember { FocusRequester() } - var isExpanded by remember { mutableStateOf(false) } + val isExpanded by sharedScreenModel.expandedFAB.collectAsState() + val showMidiCtrl by sharedScreenModel.showMidiCtrl.collectAsState() - - -var isPlayMid by remember { mutableStateOf(false) } val isPlay by sharedScreenModel.isPlay.collectAsState() val isPos by sharedScreenModel.isPos.collectAsState() var isDragging = sharedScreenModel.isDragging @@ -153,14 +151,14 @@ LaunchedEffect(isPlay, isPos) { verticalArrangement = Arrangement.spacedBy(7.dp) ) { AnimatedVisibility( - visible = isExpanded and !isPlayMid, + visible = isExpanded and !showMidiCtrl, enter = fadeIn() + scaleIn() + slideInVertically { it / 2 }, exit = fadeOut() + scaleOut() + slideOutVertically { it / 2 } ) { FloatingActionButton( onClick = { sharedScreenModel.toggleQRCodeVisibility() - isExpanded = false + sharedScreenModel.setExpandedFAB(false) }, modifier = Modifier.alpha(0.45f) ) { Icon( @@ -173,7 +171,7 @@ LaunchedEffect(isPlay, isPos) { AnimatedVisibility( - visible = isExpanded and !isPlayMid, + visible = isExpanded and !showMidiCtrl, enter = fadeIn() + scaleIn() + slideInVertically { it / 2 }, exit = fadeOut() + scaleOut() + slideOutVertically { it / 2 } ) { @@ -195,20 +193,20 @@ LaunchedEffect(isPlay, isPos) { ) { FloatingActionButton( onClick = { - isPlayMid = !isPlayMid + sharedScreenModel.setMidiCtrl(!showMidiCtrl) }, modifier = Modifier.alpha(0.45f) ) { Icon( - imageVector = if(isPlayMid) Icons.Filled.StopCircle else Icons.Filled.PlayCircle, + imageVector = if(showMidiCtrl) Icons.Filled.StopCircle else Icons.Filled.PlayCircle, contentDescription = "Jouer", tint = Color.Blue ) } } - if (!isPlayMid) { + if (!showMidiCtrl) { FloatingActionButton( onClick = { - isExpanded = !isExpanded + sharedScreenModel.setExpandedFAB(!isExpanded) refreshTrigeer++ sharedScreenModel.loadNewSong("$midiFile") }, modifier = Modifier.alpha(0.45f) @@ -221,7 +219,7 @@ LaunchedEffect(isPlay, isPos) { } } AnimatedVisibility( - visible = isPlayMid, + visible = showMidiCtrl, enter = fadeIn() + scaleIn() + slideInVertically { it / 2 }, exit = fadeOut() + scaleOut() + slideOutVertically { it / 2 } ) { @@ -292,9 +290,6 @@ LaunchedEffect(isPlay, isPos) { sharedScreenModel.updateSearchTxt("") sharedScreenModel.reset() solfaScreenModel.loadFromFile(item.path) - isSearchActive = false - isPlayMid = false - isExpanded = false sharedScreenModel.stopMidi() sharedScreenModel.seekTo(0f) }) @@ -355,7 +350,7 @@ LaunchedEffect(isPlay, isPos) { ) { IconButton( onClick = { - isSearchActive = !isSearchActive + sharedScreenModel.showSearchMenu(!isSearchActive) sharedScreenModel.updateSearchTxt("") textInput = "" }, modifier = Modifier.size(56.dp).alpha(0.45f).background( diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/viewmodel/SharedScreenModel.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/viewmodel/SharedScreenModel.kt index 4defeb0..b6e545e 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/viewmodel/SharedScreenModel.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/viewmodel/SharedScreenModel.kt @@ -96,6 +96,24 @@ class SharedScreenModel(private val fileRepository: FileRepository) : ScreenMode fun updateSearchTxt(searchValue: String) { _searchTitle.value = searchValue } + private val _showMidiCtrl = MutableStateFlow(false) + val showMidiCtrl: StateFlow = _showMidiCtrl.asStateFlow() + fun setMidiCtrl(value: Boolean) { + _showMidiCtrl.value = value + } + + private val _expandedFAB = MutableStateFlow(false) + val expandedFAB: StateFlow = _expandedFAB.asStateFlow() + + fun setExpandedFAB(value: Boolean) { + _expandedFAB.value = value + } + + private val _showSearchMenu = MutableStateFlow(false) + val showSearchMenu: StateFlow = _showSearchMenu.asStateFlow() + fun showSearchMenu(value: Boolean) { + _showSearchMenu.value = value + } private var _mediaPlayer by mutableStateOf(null) val mediaPlayer: FMediaPlayer? get() = _mediaPlayer @@ -369,6 +387,11 @@ class SharedScreenModel(private val fileRepository: FileRepository) : ScreenMode } fun reset() { + // Close other menus + _showMidiCtrl.value = false + _expandedFAB.value = false + _showSearchMenu.value = false + updateSearchTxt("") tempTimeUnitObjectList.clear() }